From 5b6368e6e1518b24adc52c2ac38ce0b43d0f4153 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 18 May 2020 19:42:35 +0000 Subject: [PATCH 01/23] Update dependency js-big-integer to v3.0.3 --- _benchmark/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_benchmark/package.json b/_benchmark/package.json index d39693c..5b903fb 100644 --- a/_benchmark/package.json +++ b/_benchmark/package.json @@ -14,7 +14,7 @@ "biginteger": "1.0.3", "bn.js": "^5.1.1", "eccjs": "0.3.1", - "js-big-integer": "3.0.1", + "js-big-integer": "3.0.3", "jsbi": "^3.1.2", "xorshift.js": "^1.0.5" }, From 1ec26fe8e490e547b8c50c77404970ad7a83279d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 26 May 2020 23:44:13 +0000 Subject: [PATCH 02/23] Update babel monorepo to v7.10.0 --- package.json | 6 +- yarn.lock | 279 +++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 217 insertions(+), 68 deletions(-) diff --git a/package.json b/package.json index 0a4049c..8d528e8 100644 --- a/package.json +++ b/package.json @@ -38,10 +38,10 @@ "@aureooms/js-operator": "1.0.2", "@aureooms/js-random": "2.0.0", "@aureooms/js-string": "0.2.0", - "@babel/cli": "7.8.4", - "@babel/core": "7.9.6", + "@babel/cli": "7.10.0", + "@babel/core": "7.10.0", "@babel/polyfill": "7.8.7", - "@babel/preset-env": "7.9.6", + "@babel/preset-env": "7.10.0", "@babel/register": "7.9.0", "ava": "3.8.2", "coveralls": "3.1.0", diff --git a/yarn.lock b/yarn.lock index 1e4ff13..ca5f837 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,10 +52,10 @@ resolved "https://registry.yarnpkg.com/@aureooms/js-string/-/js-string-0.2.0.tgz#ed5f9216c256ccb43b4c895424239d4c891d87d8" integrity sha1-7V+SFsJWzLQ7TIlUJCOdTIkdh9g= -"@babel/cli@7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.8.4.tgz#505fb053721a98777b2b175323ea4f090b7d3c1c" - integrity sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag== +"@babel/cli@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.0.tgz#44bfd08feb6f9e4791bf69c62e3b35196269b0e3" + integrity sha512-AziyYI4DpD4NmAcBD2xnH8CcIgdRrCGlW7wVL9Ysk736PCSNn2ZZedAUMu5rx/SfMT7Yv+3UReHcWKeQ3wNd/Q== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" @@ -75,16 +75,38 @@ dependencies: "@babel/highlight" "^7.8.3" -"@babel/compat-data@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.6.tgz#3f604c40e420131affe6f2c8052e9a275ae2049b" - integrity sha512-5QPTrNen2bm7RBc7dsOmcA5hbrS4O2Vhmk5XOL4zWW/zD/hV0iinpefDlkm+tBBy8kDtFaaeEvmAqt+nURAV2g== +"@babel/compat-data@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.0.tgz#1e9129ec36bc7cc5ec202801d8af9529699b8d5e" + integrity sha512-H59nKm/7ATMfocMobbSk4PkeAerKqoxk+EYBT0kV5sol0e8GBpGNHseZNNYX0VOItKngIf6GgUpEOAlOLIUvDA== dependencies: - browserslist "^4.11.1" + browserslist "^4.12.0" invariant "^2.2.4" semver "^5.5.0" -"@babel/core@7.9.6", "@babel/core@^7.7.5": +"@babel/core@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.0.tgz#a6fe5db77ebfb61e0da6c5c36aaf14aab07b2b44" + integrity sha512-FGgV2XyPoVtYDvbFXlukEWt13Afka4mBRQ2CoTsHxpgVGO6XfgtT6eI+WyjQRGGTL90IDkIVmme8riFCLZ8lUw== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.10.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.10.0" + "@babel/parser" "^7.10.0" + "@babel/template" "^7.10.0" + "@babel/traverse" "^7.10.0" + "@babel/types" "^7.10.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.7.5": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376" integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg== @@ -106,6 +128,16 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/generator@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.0.tgz#a238837896edf35ee5fbfb074548d3256b4bc55d" + integrity sha512-ThoWCJHlgukbtCP79nAK4oLqZt5fVo70AHUni/y8Jotyg5rtJiG2FVl+iJjRNKIyl4hppqztLyAoEWcCvqyOFQ== + dependencies: + "@babel/types" "^7.10.0" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + "@babel/generator@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" @@ -131,17 +163,29 @@ "@babel/helper-explode-assignable-expression" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-compilation-targets@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz#1e05b7ccc9d38d2f8b40b458b380a04dcfadd38a" - integrity sha512-x2Nvu0igO0ejXzx09B/1fGBxY9NXQlBW2kZsSxCJft+KHN8t9XWzIvFxtPHnBOAXpVsdxZKZFbRUC8TsNKajMw== +"@babel/helper-compilation-targets@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.0.tgz#c2734604ddfaa616479759a0cc2593d1928304bd" + integrity sha512-PW5Hlc1cQ8bLzY7YsLJP6PQ7GR6ZD8Av4JlP3DZk6QaZJvptsXNDn4Su64EjKAetLTJhVPDp8AEC+j2O6b/Gpg== dependencies: - "@babel/compat-data" "^7.9.6" - browserslist "^4.11.1" + "@babel/compat-data" "^7.10.0" + browserslist "^4.12.0" invariant "^2.2.4" levenary "^1.1.1" semver "^5.5.0" +"@babel/helper-create-class-features-plugin@^7.8.3": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.0.tgz#3a2b7b86f6365ea4ac3837a49ec5791e65217944" + integrity sha512-n4tPJaI0iuLRayriXTQ8brP3fMA/fNmxpxswfNuhe4qXQbcCWzeAqm6SeR/KExIOcdCvOh/KkPQVgBsjcb0oqA== + dependencies: + "@babel/helper-function-name" "^7.9.5" + "@babel/helper-member-expression-to-functions" "^7.10.0" + "@babel/helper-optimise-call-expression" "^7.10.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.10.0" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": version "7.8.8" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" @@ -191,6 +235,13 @@ dependencies: "@babel/types" "^7.8.3" +"@babel/helper-member-expression-to-functions@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.0.tgz#e8cf57470bfd1247f2b41aa621a527e952efa6f1" + integrity sha512-xKLTpbMkJcvwEsDaTfs9h0IlfUiBLPFfybxaPpPPsQDsZTRg+UKh+86oK7sctHF3OUiRQkb10oS9MXSqgyV6/g== + dependencies: + "@babel/types" "^7.10.0" + "@babel/helper-member-expression-to-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" @@ -218,6 +269,13 @@ "@babel/types" "^7.9.0" lodash "^4.17.13" +"@babel/helper-optimise-call-expression@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.0.tgz#6dcfb565842f43bed31b24f3e4277f18826e5e79" + integrity sha512-HgMd8QKA8wMJs5uK/DYKdyzJAEuGt1zyDp9wLMlMR6LitTQTHPUE+msC82ZsEDwq+U3/yHcIXIngRm9MS4IcIg== + dependencies: + "@babel/types" "^7.10.0" + "@babel/helper-optimise-call-expression@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" @@ -248,6 +306,16 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/helper-replace-supers@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.0.tgz#26bc22ee1a35450934d2e2a9b27de10a22fac9d6" + integrity sha512-erl4iVeiANf14JszXP7b69bSrz3e3+qW09pVvEmTWwzRQEOoyb1WFlYCA8d/VjVZGYW8+nGpLh7swf9CifH5wg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.0" + "@babel/helper-optimise-call-expression" "^7.10.0" + "@babel/traverse" "^7.10.0" + "@babel/types" "^7.10.0" + "@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444" @@ -288,6 +356,15 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/helpers@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.0.tgz#634400a0977b8dcf7b311761a77ca94ed974b3b6" + integrity sha512-lQtFJoDZAGf/t2PgR6Z59Q2MwjvOGGsxZ0BAlsrgyDhKuMbe63EfbQmVmcLfyTBj8J4UtiadQimcotvYVg/kVQ== + dependencies: + "@babel/template" "^7.10.0" + "@babel/traverse" "^7.10.0" + "@babel/types" "^7.10.0" + "@babel/helpers@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580" @@ -306,6 +383,11 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/parser@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.0.tgz#8eca3e71a73dd562c5222376b08253436bb4995b" + integrity sha512-fnDUl1Uy2gThM4IFVW4ISNHqr3cJrCsRkSCasFgx0XDO9JcttDS5ytyBc4Cu4X1+fjoo3IVvFbRD6TeFlHJlEQ== + "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" @@ -320,6 +402,14 @@ "@babel/helper-remap-async-to-generator" "^7.8.3" "@babel/plugin-syntax-async-generators" "^7.8.0" +"@babel/plugin-proposal-class-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" + integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" @@ -328,10 +418,10 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" - integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== +"@babel/plugin-proposal-json-strings@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.0.tgz#72926c31c14ff4f04916a0b17d376cdfb7fa1d84" + integrity sha512-n4oQLAAXTFj0OusjIbr6bcvVQf8oH6QziwAK8QNtKhjJAg71+hnU2rZDZYkYMmfOZ46dCWf+ybbHJ7hxfrzFlw== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.0" @@ -352,10 +442,10 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.8.3" -"@babel/plugin-proposal-object-rest-spread@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz#7a093586fcb18b08266eb1a7177da671ac575b63" - integrity sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A== +"@babel/plugin-proposal-object-rest-spread@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.0.tgz#d27b0910b637f7c9d9a5629f2adcd04dc9ea4e69" + integrity sha512-DOD+4TqMcRKJdAfN08+v9cciK5d0HW5hwTndOoKZEfEzU/mRrKboheD5mnWU4Q96VOnDdAj86kKjZhoQyG6s+A== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" @@ -369,14 +459,22 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" - integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w== +"@babel/plugin-proposal-optional-chaining@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.0.tgz#f9bdcd5cbf2e3037674903a45e56ed0cbaea1550" + integrity sha512-bn+9XT8Y6FJCO37ewj4E1gIirR35nDm+mGcqQV4dM3LKSVp3QTAU3f65Z0ld4y6jdfAlv2VKzCh4mezhRnl+6Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.0" +"@babel/plugin-proposal-private-methods@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.8.3.tgz#01248c6c8dc292116b3b4ebd746150f4f0728bab" + integrity sha512-ysLAper960yy1TVXa2lMYdCQIGqtUXo8sVb+zYE7UTiZSLs6/wbZ0PrrXEKESJcK3SgFWrF8WpsaDzdslhuoZA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": version "7.8.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" @@ -392,6 +490,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7" + integrity sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" @@ -471,10 +576,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-block-scoping@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" - integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== +"@babel/plugin-transform-block-scoping@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.0.tgz#5d7aa0cf921ec91bdc97c9b311bf1fce0ea979b0" + integrity sha512-AoMn0D3nLG9i71useuBrZZTnHbjnhcaTXCckUtOx3JPuhGGJdOUYMwOV9niPJ+nZCk52dfLLqbmV3pBMCRQLNw== dependencies: "@babel/helper-plugin-utils" "^7.8.3" lodash "^4.17.13" @@ -500,10 +605,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-destructuring@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50" - integrity sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q== +"@babel/plugin-transform-destructuring@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.0.tgz#59145194029721e49e511afb4bdd1d2f38369180" + integrity sha512-yKoghHpYbC0eM+6o6arPUJT9BQBvOOn8iOCEHwFvkJ5gjAxYmoUaAuLwaoA9h2YvC6dzcRI0KPQOpRXr8qQTxQ== dependencies: "@babel/helper-plugin-utils" "^7.8.3" @@ -530,10 +635,10 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-for-of@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" - integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ== +"@babel/plugin-transform-for-of@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.0.tgz#ff2bf95dc1deb9b309c7fd78d9620ac9266a3efe" + integrity sha512-0ldl5xEe9kbuhB1cDqs17JiBPEm1+6/LH7loo29+MAJOyB/xbpLI/u6mRzDPjr0nYL7z0S14FPT4hs2gH8Im9Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" @@ -578,10 +683,10 @@ "@babel/helper-simple-access" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz#207f1461c78a231d5337a92140e52422510d81a4" - integrity sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg== +"@babel/plugin-transform-modules-systemjs@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.0.tgz#815aa9b9d59224ed1bb5d4cbb3c86c4d7e12d9bf" + integrity sha512-L/1xADoyJeb01fqKiHhl4ghAJOnFcHvx2JQA7bc8zdaDFDU4k62CJmXqDtNtJUNiOwlHZLWg1l7/Twf1aWARQw== dependencies: "@babel/helper-hoist-variables" "^7.8.3" "@babel/helper-module-transforms" "^7.9.0" @@ -654,10 +759,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" - integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== +"@babel/plugin-transform-spread@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.0.tgz#6918d9b2b52c604802bd50a5f22b649efddf9af6" + integrity sha512-P3Zj04ylqumJBjmjylNl05ZHRo4j4gFNG7P70loys0//q5BTe30E8xIj6PnqEWAfsPYu2sdIPcJeeQdclqlM6A== dependencies: "@babel/helper-plugin-utils" "^7.8.3" @@ -684,6 +789,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-unicode-escapes@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.0.tgz#63b4da633af14740b6570b928a2d5537495314cb" + integrity sha512-6DwSPQzJ9kSRI1kNFfVAeYdeH7sUH0c1NOYSBGnpJ1ZUZ7mxPY1hxeAqzcrO5NKlOx7ghcy4nAbfFWTPx5IVEg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-unicode-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" @@ -700,25 +812,28 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.6.tgz#df063b276c6455ec6fcfc6e53aacc38da9b0aea6" - integrity sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ== +"@babel/preset-env@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.0.tgz#2b1d9c0cf41fdf68f64d8183a567a14f70861f99" + integrity sha512-UOZNyiZRvIGvIudjCB8Y8OVkpAvlslec4qgwC73yEvx3Puz0c/xc28Yru36y5K+StOkPPM+VldTsmXPht5LpSg== dependencies: - "@babel/compat-data" "^7.9.6" - "@babel/helper-compilation-targets" "^7.9.6" + "@babel/compat-data" "^7.10.0" + "@babel/helper-compilation-targets" "^7.10.0" "@babel/helper-module-imports" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-proposal-async-generator-functions" "^7.8.3" + "@babel/plugin-proposal-class-properties" "^7.8.3" "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" + "@babel/plugin-proposal-json-strings" "^7.10.0" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-proposal-numeric-separator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.9.6" + "@babel/plugin-proposal-object-rest-spread" "^7.10.0" "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.9.0" + "@babel/plugin-proposal-optional-chaining" "^7.10.0" + "@babel/plugin-proposal-private-methods" "^7.8.3" "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.8.3" "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-syntax-json-strings" "^7.8.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" @@ -730,20 +845,20 @@ "@babel/plugin-transform-arrow-functions" "^7.8.3" "@babel/plugin-transform-async-to-generator" "^7.8.3" "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.10.0" "@babel/plugin-transform-classes" "^7.9.5" "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.9.5" + "@babel/plugin-transform-destructuring" "^7.10.0" "@babel/plugin-transform-dotall-regex" "^7.8.3" "@babel/plugin-transform-duplicate-keys" "^7.8.3" "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.9.0" + "@babel/plugin-transform-for-of" "^7.10.0" "@babel/plugin-transform-function-name" "^7.8.3" "@babel/plugin-transform-literals" "^7.8.3" "@babel/plugin-transform-member-expression-literals" "^7.8.3" "@babel/plugin-transform-modules-amd" "^7.9.6" "@babel/plugin-transform-modules-commonjs" "^7.9.6" - "@babel/plugin-transform-modules-systemjs" "^7.9.6" + "@babel/plugin-transform-modules-systemjs" "^7.10.0" "@babel/plugin-transform-modules-umd" "^7.9.0" "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" "@babel/plugin-transform-new-target" "^7.8.3" @@ -753,14 +868,15 @@ "@babel/plugin-transform-regenerator" "^7.8.7" "@babel/plugin-transform-reserved-words" "^7.8.3" "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-spread" "^7.10.0" "@babel/plugin-transform-sticky-regex" "^7.8.3" "@babel/plugin-transform-template-literals" "^7.8.3" "@babel/plugin-transform-typeof-symbol" "^7.8.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.0" "@babel/plugin-transform-unicode-regex" "^7.8.3" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.9.6" - browserslist "^4.11.1" + "@babel/types" "^7.10.0" + browserslist "^4.12.0" core-js-compat "^3.6.2" invariant "^2.2.2" levenary "^1.1.1" @@ -795,6 +911,15 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/template@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.0.tgz#f15d852ce16cd5fb3e219097a75f662710b249b1" + integrity sha512-aMLEQn5tcG49LEWrsEwxiRTdaJmvLem3+JMCMSeCy2TILau0IDVyWdm/18ACx7XOCady64FLt6KkHy28tkDQHQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.10.0" + "@babel/types" "^7.10.0" + "@babel/template@^7.8.3", "@babel/template@^7.8.6": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" @@ -804,6 +929,21 @@ "@babel/parser" "^7.8.6" "@babel/types" "^7.8.6" +"@babel/traverse@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.0.tgz#290935529881baf619398d94fd453838bef36740" + integrity sha512-NZsFleMaLF1zX3NxbtXI/JCs2RPOdpGru6UBdGsfhdsDsP+kFF+h2QQJnMJglxk0kc69YmMFs4A44OJY0tKo5g== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.10.0" + "@babel/helper-function-name" "^7.9.5" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.10.0" + "@babel/types" "^7.10.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/traverse@^7.8.3", "@babel/traverse@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" @@ -819,6 +959,15 @@ globals "^11.1.0" lodash "^4.17.13" +"@babel/types@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.0.tgz#d47d92249e42393a5723aad5319035ae411e3e38" + integrity sha512-t41W8yWFyQFPOAAvPvjyRhejcLGnJTA3iRpFcDbEKwVJ3UnHQePFzLk8GagTsucJlImyNwrGikGsYURrWbQG8w== + dependencies: + "@babel/helper-validator-identifier" "^7.9.5" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7" @@ -1437,7 +1586,7 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.11.1, browserslist@^4.8.5: +browserslist@^4.12.0, browserslist@^4.8.5: version "4.12.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d" integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg== From f8de3bf786743adc1699eeb07ae3a045e17100f6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 27 May 2020 23:25:45 +0000 Subject: [PATCH 03/23] Update babel monorepo to v7.10.1 --- package.json | 10 +- yarn.lock | 1002 ++++++++++++++++++++++++++++---------------------- 2 files changed, 564 insertions(+), 448 deletions(-) diff --git a/package.json b/package.json index 8d528e8..d1d0207 100644 --- a/package.json +++ b/package.json @@ -38,11 +38,11 @@ "@aureooms/js-operator": "1.0.2", "@aureooms/js-random": "2.0.0", "@aureooms/js-string": "0.2.0", - "@babel/cli": "7.10.0", - "@babel/core": "7.10.0", - "@babel/polyfill": "7.8.7", - "@babel/preset-env": "7.10.0", - "@babel/register": "7.9.0", + "@babel/cli": "7.10.1", + "@babel/core": "7.10.1", + "@babel/polyfill": "7.10.1", + "@babel/preset-env": "7.10.1", + "@babel/register": "7.10.1", "ava": "3.8.2", "coveralls": "3.1.0", "esdoc": "1.1.0", diff --git a/yarn.lock b/yarn.lock index ca5f837..42ec0a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,10 +52,10 @@ resolved "https://registry.yarnpkg.com/@aureooms/js-string/-/js-string-0.2.0.tgz#ed5f9216c256ccb43b4c895424239d4c891d87d8" integrity sha1-7V+SFsJWzLQ7TIlUJCOdTIkdh9g= -"@babel/cli@7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.0.tgz#44bfd08feb6f9e4791bf69c62e3b35196269b0e3" - integrity sha512-AziyYI4DpD4NmAcBD2xnH8CcIgdRrCGlW7wVL9Ysk736PCSNn2ZZedAUMu5rx/SfMT7Yv+3UReHcWKeQ3wNd/Q== +"@babel/cli@7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.1.tgz#b6e5cd43a17b8f639442ab027976408ebe6d79a0" + integrity sha512-cVB+dXeGhMOqViIaZs3A9OUAe4pKw4SBNdMw6yHJMYR7s4TB+Cei7ThquV/84O19PdIFWuwe03vxxES0BHUm5g== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" @@ -75,28 +75,35 @@ dependencies: "@babel/highlight" "^7.8.3" -"@babel/compat-data@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.0.tgz#1e9129ec36bc7cc5ec202801d8af9529699b8d5e" - integrity sha512-H59nKm/7ATMfocMobbSk4PkeAerKqoxk+EYBT0kV5sol0e8GBpGNHseZNNYX0VOItKngIf6GgUpEOAlOLIUvDA== +"@babel/code-frame@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff" + integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw== + dependencies: + "@babel/highlight" "^7.10.1" + +"@babel/compat-data@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz#b1085ffe72cd17bf2c0ee790fc09f9626011b2db" + integrity sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw== dependencies: browserslist "^4.12.0" invariant "^2.2.4" semver "^5.5.0" -"@babel/core@7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.0.tgz#a6fe5db77ebfb61e0da6c5c36aaf14aab07b2b44" - integrity sha512-FGgV2XyPoVtYDvbFXlukEWt13Afka4mBRQ2CoTsHxpgVGO6XfgtT6eI+WyjQRGGTL90IDkIVmme8riFCLZ8lUw== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.10.0" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helpers" "^7.10.0" - "@babel/parser" "^7.10.0" - "@babel/template" "^7.10.0" - "@babel/traverse" "^7.10.0" - "@babel/types" "^7.10.0" +"@babel/core@7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.1.tgz#2a0ad0ea693601820defebad2140206503d89af3" + integrity sha512-u8XiZ6sMXW/gPmoP5ijonSUln4unazG291X0XAQ5h0s8qnAFr6BRRZGUEK+jtRWdmB0NTJQt7Uga25q8GetIIg== + dependencies: + "@babel/code-frame" "^7.10.1" + "@babel/generator" "^7.10.1" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helpers" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" @@ -128,12 +135,12 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.0.tgz#a238837896edf35ee5fbfb074548d3256b4bc55d" - integrity sha512-ThoWCJHlgukbtCP79nAK4oLqZt5fVo70AHUni/y8Jotyg5rtJiG2FVl+iJjRNKIyl4hppqztLyAoEWcCvqyOFQ== +"@babel/generator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.1.tgz#4d14458e539bcb04ffe34124143f5c489f2dbca9" + integrity sha512-AT0YPLQw9DI21tliuJIdplVfLHya6mcGa8ctkv7n4Qv+hYacJrKmNWIteAK1P9iyLikFIAkwqJ7HAOqIDLFfgA== dependencies: - "@babel/types" "^7.10.0" + "@babel/types" "^7.10.1" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" @@ -148,6 +155,13 @@ lodash "^4.17.13" source-map "^0.5.0" +"@babel/helper-annotate-as-pure@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz#f6d08acc6f70bbd59b436262553fb2e259a1a268" + integrity sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw== + dependencies: + "@babel/types" "^7.10.1" + "@babel/helper-annotate-as-pure@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" @@ -155,36 +169,45 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" - integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz#0ec7d9be8174934532661f87783eb18d72290059" + integrity sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-explode-assignable-expression" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-compilation-targets@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.0.tgz#c2734604ddfaa616479759a0cc2593d1928304bd" - integrity sha512-PW5Hlc1cQ8bLzY7YsLJP6PQ7GR6ZD8Av4JlP3DZk6QaZJvptsXNDn4Su64EjKAetLTJhVPDp8AEC+j2O6b/Gpg== +"@babel/helper-compilation-targets@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.1.tgz#ad6f69b4c3bae955081ef914a84e5878ffcaca63" + integrity sha512-YuF8IrgSmX/+MV2plPkjEnzlC2wf+gaok8ehMNN0jodF3/sejZauExqpEVGbJua62oaWoNYIXwz4RmAsVcGyHw== dependencies: - "@babel/compat-data" "^7.10.0" + "@babel/compat-data" "^7.10.1" browserslist "^4.12.0" invariant "^2.2.4" levenary "^1.1.1" semver "^5.5.0" -"@babel/helper-create-class-features-plugin@^7.8.3": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.0.tgz#3a2b7b86f6365ea4ac3837a49ec5791e65217944" - integrity sha512-n4tPJaI0iuLRayriXTQ8brP3fMA/fNmxpxswfNuhe4qXQbcCWzeAqm6SeR/KExIOcdCvOh/KkPQVgBsjcb0oqA== - dependencies: - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-member-expression-to-functions" "^7.10.0" - "@babel/helper-optimise-call-expression" "^7.10.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.10.0" - "@babel/helper-split-export-declaration" "^7.8.3" +"@babel/helper-create-class-features-plugin@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.1.tgz#6d8a45aafe492378d0e6fc0b33e5dea132eae21c" + integrity sha512-bwhdehBJZt84HuPUcP1HaTLuc/EywVS8rc3FgsEPDcivg+DCW+SHuLHVkYOmcBA1ZfI+Z/oZjQc/+bPmIO7uAA== + dependencies: + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-member-expression-to-functions" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + +"@babel/helper-create-regexp-features-plugin@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd" + integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-regex" "^7.10.1" + regexpu-core "^4.7.0" "@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": version "7.8.8" @@ -195,24 +218,33 @@ "@babel/helper-regex" "^7.8.3" regexpu-core "^4.7.0" -"@babel/helper-define-map@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" - integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== +"@babel/helper-define-map@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz#5e69ee8308648470dd7900d159c044c10285221d" + integrity sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-function-name" "^7.10.1" + "@babel/types" "^7.10.1" lodash "^4.17.13" -"@babel/helper-explode-assignable-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" - integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== +"@babel/helper-explode-assignable-expression@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz#e9d76305ee1162ca467357ae25df94f179af2b7e" + integrity sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg== dependencies: - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-function-name@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz#92bd63829bfc9215aca9d9defa85f56b539454f4" + integrity sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-function-name@^7.8.3", "@babel/helper-function-name@^7.9.5": +"@babel/helper-function-name@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== @@ -221,6 +253,13 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.9.5" +"@babel/helper-get-function-arity@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz#7303390a81ba7cb59613895a192b93850e373f7d" + integrity sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw== + dependencies: + "@babel/types" "^7.10.1" + "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" @@ -228,19 +267,19 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-hoist-variables@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" - integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== +"@babel/helper-hoist-variables@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz#7e77c82e5dcae1ebf123174c385aaadbf787d077" + integrity sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-member-expression-to-functions@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.0.tgz#e8cf57470bfd1247f2b41aa621a527e952efa6f1" - integrity sha512-xKLTpbMkJcvwEsDaTfs9h0IlfUiBLPFfybxaPpPPsQDsZTRg+UKh+86oK7sctHF3OUiRQkb10oS9MXSqgyV6/g== +"@babel/helper-member-expression-to-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz#432967fd7e12a4afef66c4687d4ca22bc0456f15" + integrity sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g== dependencies: - "@babel/types" "^7.10.0" + "@babel/types" "^7.10.1" "@babel/helper-member-expression-to-functions@^7.8.3": version "7.8.3" @@ -249,6 +288,13 @@ dependencies: "@babel/types" "^7.8.3" +"@babel/helper-module-imports@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz#dd331bd45bccc566ce77004e9d05fe17add13876" + integrity sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg== + dependencies: + "@babel/types" "^7.10.1" + "@babel/helper-module-imports@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" @@ -256,6 +302,19 @@ dependencies: "@babel/types" "^7.8.3" +"@babel/helper-module-transforms@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622" + integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg== + dependencies: + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-simple-access" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" + lodash "^4.17.13" + "@babel/helper-module-transforms@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" @@ -269,12 +328,12 @@ "@babel/types" "^7.9.0" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.0.tgz#6dcfb565842f43bed31b24f3e4277f18826e5e79" - integrity sha512-HgMd8QKA8wMJs5uK/DYKdyzJAEuGt1zyDp9wLMlMR6LitTQTHPUE+msC82ZsEDwq+U3/yHcIXIngRm9MS4IcIg== +"@babel/helper-optimise-call-expression@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz#b4a1f2561870ce1247ceddb02a3860fa96d72543" + integrity sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg== dependencies: - "@babel/types" "^7.10.0" + "@babel/types" "^7.10.1" "@babel/helper-optimise-call-expression@^7.8.3": version "7.8.3" @@ -288,6 +347,18 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== +"@babel/helper-plugin-utils@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127" + integrity sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA== + +"@babel/helper-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96" + integrity sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g== + dependencies: + lodash "^4.17.13" + "@babel/helper-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" @@ -295,28 +366,28 @@ dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" - integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== +"@babel/helper-remap-async-to-generator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz#bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432" + integrity sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-wrap-function" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-wrap-function" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-replace-supers@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.0.tgz#26bc22ee1a35450934d2e2a9b27de10a22fac9d6" - integrity sha512-erl4iVeiANf14JszXP7b69bSrz3e3+qW09pVvEmTWwzRQEOoyb1WFlYCA8d/VjVZGYW8+nGpLh7swf9CifH5wg== +"@babel/helper-replace-supers@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d" + integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A== dependencies: - "@babel/helper-member-expression-to-functions" "^7.10.0" - "@babel/helper-optimise-call-expression" "^7.10.0" - "@babel/traverse" "^7.10.0" - "@babel/types" "^7.10.0" + "@babel/helper-member-expression-to-functions" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": +"@babel/helper-replace-supers@^7.8.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444" integrity sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA== @@ -326,6 +397,14 @@ "@babel/traverse" "^7.9.6" "@babel/types" "^7.9.6" +"@babel/helper-simple-access@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e" + integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw== + dependencies: + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" + "@babel/helper-simple-access@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" @@ -334,6 +413,13 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/helper-split-export-declaration@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f" + integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g== + dependencies: + "@babel/types" "^7.10.1" + "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" @@ -341,29 +427,34 @@ dependencies: "@babel/types" "^7.8.3" +"@babel/helper-validator-identifier@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5" + integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw== + "@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== -"@babel/helper-wrap-function@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" - integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== +"@babel/helper-wrap-function@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9" + integrity sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-function-name" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helpers@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.0.tgz#634400a0977b8dcf7b311761a77ca94ed974b3b6" - integrity sha512-lQtFJoDZAGf/t2PgR6Z59Q2MwjvOGGsxZ0BAlsrgyDhKuMbe63EfbQmVmcLfyTBj8J4UtiadQimcotvYVg/kVQ== +"@babel/helpers@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973" + integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw== dependencies: - "@babel/template" "^7.10.0" - "@babel/traverse" "^7.10.0" - "@babel/types" "^7.10.0" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" "@babel/helpers@^7.9.6": version "7.9.6" @@ -374,6 +465,15 @@ "@babel/traverse" "^7.9.6" "@babel/types" "^7.9.6" +"@babel/highlight@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0" + integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg== + dependencies: + "@babel/helper-validator-identifier" "^7.10.1" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/highlight@^7.8.3": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" @@ -383,99 +483,107 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.0.tgz#8eca3e71a73dd562c5222376b08253436bb4995b" - integrity sha512-fnDUl1Uy2gThM4IFVW4ISNHqr3cJrCsRkSCasFgx0XDO9JcttDS5ytyBc4Cu4X1+fjoo3IVvFbRD6TeFlHJlEQ== +"@babel/parser@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.1.tgz#2e142c27ca58aa2c7b119d09269b702c8bbad28c" + integrity sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg== "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q== -"@babel/plugin-proposal-async-generator-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" - integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== +"@babel/plugin-proposal-async-generator-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz#6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55" + integrity sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-remap-async-to-generator" "^7.10.1" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-class-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" - integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA== +"@babel/plugin-proposal-class-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz#046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01" + integrity sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-proposal-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" - integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== +"@babel/plugin-proposal-dynamic-import@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz#e36979dc1dc3b73f6d6816fc4951da2363488ef0" + integrity sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-json-strings@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.0.tgz#72926c31c14ff4f04916a0b17d376cdfb7fa1d84" - integrity sha512-n4oQLAAXTFj0OusjIbr6bcvVQf8oH6QziwAK8QNtKhjJAg71+hnU2rZDZYkYMmfOZ46dCWf+ybbHJ7hxfrzFlw== +"@babel/plugin-proposal-json-strings@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz#b1e691ee24c651b5a5e32213222b2379734aff09" + integrity sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" - integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz#02dca21673842ff2fe763ac253777f235e9bbf78" + integrity sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" - integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== +"@babel/plugin-proposal-numeric-separator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz#a9a38bc34f78bdfd981e791c27c6fdcec478c123" + integrity sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-numeric-separator" "^7.10.1" -"@babel/plugin-proposal-object-rest-spread@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.0.tgz#d27b0910b637f7c9d9a5629f2adcd04dc9ea4e69" - integrity sha512-DOD+4TqMcRKJdAfN08+v9cciK5d0HW5hwTndOoKZEfEzU/mRrKboheD5mnWU4Q96VOnDdAj86kKjZhoQyG6s+A== +"@babel/plugin-proposal-object-rest-spread@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz#cba44908ac9f142650b4a65b8aa06bf3478d5fb6" + integrity sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.9.5" + "@babel/plugin-transform-parameters" "^7.10.1" -"@babel/plugin-proposal-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" - integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== +"@babel/plugin-proposal-optional-catch-binding@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz#c9f86d99305f9fa531b568ff5ab8c964b8b223d2" + integrity sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.0.tgz#f9bdcd5cbf2e3037674903a45e56ed0cbaea1550" - integrity sha512-bn+9XT8Y6FJCO37ewj4E1gIirR35nDm+mGcqQV4dM3LKSVp3QTAU3f65Z0ld4y6jdfAlv2VKzCh4mezhRnl+6Q== +"@babel/plugin-proposal-optional-chaining@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz#15f5d6d22708629451a91be28f8facc55b0e818c" + integrity sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-private-methods@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.8.3.tgz#01248c6c8dc292116b3b4ebd746150f4f0728bab" - integrity sha512-ysLAper960yy1TVXa2lMYdCQIGqtUXo8sVb+zYE7UTiZSLs6/wbZ0PrrXEKESJcK3SgFWrF8WpsaDzdslhuoZA== +"@babel/plugin-proposal-private-methods@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz#ed85e8058ab0fe309c3f448e5e1b73ca89cdb598" + integrity sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": +"@babel/plugin-proposal-unicode-property-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f" + integrity sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.8.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== @@ -490,12 +598,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7" - integrity sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg== +"@babel/plugin-syntax-class-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5" + integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" @@ -518,12 +626,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" - integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== +"@babel/plugin-syntax-numeric-separator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99" + integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" @@ -546,73 +654,81 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" - integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== +"@babel/plugin-syntax-top-level-await@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz#8b8733f8c57397b3eaa47ddba8841586dcaef362" + integrity sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-arrow-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" - integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== +"@babel/plugin-transform-arrow-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz#cb5ee3a36f0863c06ead0b409b4cc43a889b295b" + integrity sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" - integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== +"@babel/plugin-transform-async-to-generator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz#e5153eb1a3e028f79194ed8a7a4bf55f862b2062" + integrity sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-remap-async-to-generator" "^7.10.1" -"@babel/plugin-transform-block-scoped-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" - integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== +"@babel/plugin-transform-block-scoped-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz#146856e756d54b20fff14b819456b3e01820b85d" + integrity sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-block-scoping@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.0.tgz#5d7aa0cf921ec91bdc97c9b311bf1fce0ea979b0" - integrity sha512-AoMn0D3nLG9i71useuBrZZTnHbjnhcaTXCckUtOx3JPuhGGJdOUYMwOV9niPJ+nZCk52dfLLqbmV3pBMCRQLNw== +"@babel/plugin-transform-block-scoping@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz#47092d89ca345811451cd0dc5d91605982705d5e" + integrity sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c" - integrity sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-split-export-declaration" "^7.8.3" +"@babel/plugin-transform-classes@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz#6e11dd6c4dfae70f540480a4702477ed766d733f" + integrity sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-define-map" "^7.10.1" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" - integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== +"@babel/plugin-transform-computed-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz#59aa399064429d64dce5cf76ef9b90b7245ebd07" + integrity sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-destructuring@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.0.tgz#59145194029721e49e511afb4bdd1d2f38369180" - integrity sha512-yKoghHpYbC0eM+6o6arPUJT9BQBvOOn8iOCEHwFvkJ5gjAxYmoUaAuLwaoA9h2YvC6dzcRI0KPQOpRXr8qQTxQ== +"@babel/plugin-transform-destructuring@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz#abd58e51337815ca3a22a336b85f62b998e71907" + integrity sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": +"@babel/plugin-transform-dotall-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee" + integrity sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-dotall-regex@^7.4.4": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== @@ -620,86 +736,86 @@ "@babel/helper-create-regexp-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-duplicate-keys@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" - integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== +"@babel/plugin-transform-duplicate-keys@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz#c900a793beb096bc9d4d0a9d0cde19518ffc83b9" + integrity sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-exponentiation-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" - integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== +"@babel/plugin-transform-exponentiation-operator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz#279c3116756a60dd6e6f5e488ba7957db9c59eb3" + integrity sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-for-of@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.0.tgz#ff2bf95dc1deb9b309c7fd78d9620ac9266a3efe" - integrity sha512-0ldl5xEe9kbuhB1cDqs17JiBPEm1+6/LH7loo29+MAJOyB/xbpLI/u6mRzDPjr0nYL7z0S14FPT4hs2gH8Im9Q== +"@babel/plugin-transform-for-of@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz#ff01119784eb0ee32258e8646157ba2501fcfda5" + integrity sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" - integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== +"@babel/plugin-transform-function-name@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz#4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d" + integrity sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" - integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== +"@babel/plugin-transform-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz#5794f8da82846b22e4e6631ea1658bce708eb46a" + integrity sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-member-expression-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" - integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== +"@babel/plugin-transform-member-expression-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz#90347cba31bca6f394b3f7bd95d2bbfd9fce2f39" + integrity sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-modules-amd@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz#8539ec42c153d12ea3836e0e3ac30d5aae7b258e" - integrity sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw== +"@babel/plugin-transform-modules-amd@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz#65950e8e05797ebd2fe532b96e19fc5482a1d52a" + integrity sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw== dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz#64b7474a4279ee588cacd1906695ca721687c277" - integrity sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ== +"@babel/plugin-transform-modules-commonjs@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz#d5ff4b4413ed97ffded99961056e1fb980fb9301" + integrity sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg== dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-simple-access" "^7.10.1" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.0.tgz#815aa9b9d59224ed1bb5d4cbb3c86c4d7e12d9bf" - integrity sha512-L/1xADoyJeb01fqKiHhl4ghAJOnFcHvx2JQA7bc8zdaDFDU4k62CJmXqDtNtJUNiOwlHZLWg1l7/Twf1aWARQw== +"@babel/plugin-transform-modules-systemjs@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz#9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6" + integrity sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA== dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-hoist-variables" "^7.10.1" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" - integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ== +"@babel/plugin-transform-modules-umd@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz#ea080911ffc6eb21840a5197a39ede4ee67b1595" + integrity sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA== dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": version "7.8.3" @@ -708,174 +824,174 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.8.3" -"@babel/plugin-transform-new-target@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" - integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== +"@babel/plugin-transform-new-target@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz#6ee41a5e648da7632e22b6fb54012e87f612f324" + integrity sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-object-super@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" - integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== +"@babel/plugin-transform-object-super@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz#2e3016b0adbf262983bf0d5121d676a5ed9c4fde" + integrity sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" -"@babel/plugin-transform-parameters@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz#173b265746f5e15b2afe527eeda65b73623a0795" - integrity sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA== +"@babel/plugin-transform-parameters@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz#b25938a3c5fae0354144a720b07b32766f683ddd" + integrity sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg== dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-get-function-arity" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-property-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" - integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== +"@babel/plugin-transform-property-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz#cffc7315219230ed81dc53e4625bf86815b6050d" + integrity sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-regenerator@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" - integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== +"@babel/plugin-transform-regenerator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz#10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490" + integrity sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" - integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== +"@babel/plugin-transform-reserved-words@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz#0fc1027312b4d1c3276a57890c8ae3bcc0b64a86" + integrity sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-shorthand-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" - integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== +"@babel/plugin-transform-shorthand-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz#e8b54f238a1ccbae482c4dce946180ae7b3143f3" + integrity sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-spread@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.0.tgz#6918d9b2b52c604802bd50a5f22b649efddf9af6" - integrity sha512-P3Zj04ylqumJBjmjylNl05ZHRo4j4gFNG7P70loys0//q5BTe30E8xIj6PnqEWAfsPYu2sdIPcJeeQdclqlM6A== +"@babel/plugin-transform-spread@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz#0c6d618a0c4461a274418460a28c9ccf5239a7c8" + integrity sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-sticky-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" - integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== +"@babel/plugin-transform-sticky-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz#90fc89b7526228bed9842cff3588270a7a393b00" + integrity sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-regex" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-regex" "^7.10.1" -"@babel/plugin-transform-template-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" - integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== +"@babel/plugin-transform-template-literals@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz#914c7b7f4752c570ea00553b4284dad8070e8628" + integrity sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-typeof-symbol@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" - integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== +"@babel/plugin-transform-typeof-symbol@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz#60c0239b69965d166b80a84de7315c1bc7e0bb0e" + integrity sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-unicode-escapes@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.0.tgz#63b4da633af14740b6570b928a2d5537495314cb" - integrity sha512-6DwSPQzJ9kSRI1kNFfVAeYdeH7sUH0c1NOYSBGnpJ1ZUZ7mxPY1hxeAqzcrO5NKlOx7ghcy4nAbfFWTPx5IVEg== +"@babel/plugin-transform-unicode-escapes@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz#add0f8483dab60570d9e03cecef6c023aa8c9940" + integrity sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-unicode-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" - integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== +"@babel/plugin-transform-unicode-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz#6b58f2aea7b68df37ac5025d9c88752443a6b43f" + integrity sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/polyfill@7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.8.7.tgz#151ec24c7135481336168c3bd8b8bf0cf91c032f" - integrity sha512-LeSfP9bNZH2UOZgcGcZ0PIHUt1ZuHub1L3CVmEyqLxCeDLm4C5Gi8jRH8ZX2PNpDhQCo0z6y/+DIs2JlliXW8w== +"@babel/polyfill@7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.10.1.tgz#d56d4c8be8dd6ec4dce2649474e9b707089f739f" + integrity sha512-TviueJ4PBW5p48ra8IMtLXVkDucrlOZAIZ+EXqS3Ot4eukHbWiqcn7DcqpA1k5PcKtmJ4Xl9xwdv6yQvvcA+3g== dependencies: core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.0.tgz#2b1d9c0cf41fdf68f64d8183a567a14f70861f99" - integrity sha512-UOZNyiZRvIGvIudjCB8Y8OVkpAvlslec4qgwC73yEvx3Puz0c/xc28Yru36y5K+StOkPPM+VldTsmXPht5LpSg== - dependencies: - "@babel/compat-data" "^7.10.0" - "@babel/helper-compilation-targets" "^7.10.0" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-class-properties" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.10.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-numeric-separator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.10.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.10.0" - "@babel/plugin-proposal-private-methods" "^7.8.3" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" +"@babel/preset-env@7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.1.tgz#099e1b76379739bdcbfab3d548dc7e7edb2ac808" + integrity sha512-bGWNfjfXRLnqbN2T4lB3pMfoic8dkRrmHpVZamSFHzGy5xklyHTobZ28TVUD2grhE5WDnu67tBj8oslIhkiOMQ== + dependencies: + "@babel/compat-data" "^7.10.1" + "@babel/helper-compilation-targets" "^7.10.1" + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-proposal-async-generator-functions" "^7.10.1" + "@babel/plugin-proposal-class-properties" "^7.10.1" + "@babel/plugin-proposal-dynamic-import" "^7.10.1" + "@babel/plugin-proposal-json-strings" "^7.10.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" + "@babel/plugin-proposal-numeric-separator" "^7.10.1" + "@babel/plugin-proposal-object-rest-spread" "^7.10.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.1" + "@babel/plugin-proposal-optional-chaining" "^7.10.1" + "@babel/plugin-proposal-private-methods" "^7.10.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.1" "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.10.1" "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-syntax-json-strings" "^7.8.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.1" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.10.0" - "@babel/plugin-transform-classes" "^7.9.5" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.10.0" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.10.0" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.9.6" - "@babel/plugin-transform-modules-commonjs" "^7.9.6" - "@babel/plugin-transform-modules-systemjs" "^7.10.0" - "@babel/plugin-transform-modules-umd" "^7.9.0" + "@babel/plugin-syntax-top-level-await" "^7.10.1" + "@babel/plugin-transform-arrow-functions" "^7.10.1" + "@babel/plugin-transform-async-to-generator" "^7.10.1" + "@babel/plugin-transform-block-scoped-functions" "^7.10.1" + "@babel/plugin-transform-block-scoping" "^7.10.1" + "@babel/plugin-transform-classes" "^7.10.1" + "@babel/plugin-transform-computed-properties" "^7.10.1" + "@babel/plugin-transform-destructuring" "^7.10.1" + "@babel/plugin-transform-dotall-regex" "^7.10.1" + "@babel/plugin-transform-duplicate-keys" "^7.10.1" + "@babel/plugin-transform-exponentiation-operator" "^7.10.1" + "@babel/plugin-transform-for-of" "^7.10.1" + "@babel/plugin-transform-function-name" "^7.10.1" + "@babel/plugin-transform-literals" "^7.10.1" + "@babel/plugin-transform-member-expression-literals" "^7.10.1" + "@babel/plugin-transform-modules-amd" "^7.10.1" + "@babel/plugin-transform-modules-commonjs" "^7.10.1" + "@babel/plugin-transform-modules-systemjs" "^7.10.1" + "@babel/plugin-transform-modules-umd" "^7.10.1" "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.9.5" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.7" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.10.0" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.4" - "@babel/plugin-transform-unicode-escapes" "^7.10.0" - "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.10.1" + "@babel/plugin-transform-object-super" "^7.10.1" + "@babel/plugin-transform-parameters" "^7.10.1" + "@babel/plugin-transform-property-literals" "^7.10.1" + "@babel/plugin-transform-regenerator" "^7.10.1" + "@babel/plugin-transform-reserved-words" "^7.10.1" + "@babel/plugin-transform-shorthand-properties" "^7.10.1" + "@babel/plugin-transform-spread" "^7.10.1" + "@babel/plugin-transform-sticky-regex" "^7.10.1" + "@babel/plugin-transform-template-literals" "^7.10.1" + "@babel/plugin-transform-typeof-symbol" "^7.10.1" + "@babel/plugin-transform-unicode-escapes" "^7.10.1" + "@babel/plugin-transform-unicode-regex" "^7.10.1" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.10.0" + "@babel/types" "^7.10.1" browserslist "^4.12.0" core-js-compat "^3.6.2" invariant "^2.2.2" @@ -893,10 +1009,10 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/register@7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.9.0.tgz#02464ede57548bddbb5e9f705d263b7c3f43d48b" - integrity sha512-Tv8Zyi2J2VRR8g7pC5gTeIN8Ihultbmk0ocyNz8H2nEZbmhp1N6q0A1UGsQbDvGP/sNinQKUHf3SqXwqjtFv4Q== +"@babel/register@7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.1.tgz#b6567c5cb5049f44bbf8c35d6ff68ca3c43238ed" + integrity sha512-sl96+kB3IA2B9EzpwwBmYadOT14vw3KaXOknGDbJaZCOj52GDA4Tivudq9doCJcB+bEIKCEARZYwRgBBsCGXyg== dependencies: find-cache-dir "^2.0.0" lodash "^4.17.13" @@ -911,14 +1027,14 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.0.tgz#f15d852ce16cd5fb3e219097a75f662710b249b1" - integrity sha512-aMLEQn5tcG49LEWrsEwxiRTdaJmvLem3+JMCMSeCy2TILau0IDVyWdm/18ACx7XOCady64FLt6KkHy28tkDQHQ== +"@babel/template@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811" + integrity sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig== dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.10.0" - "@babel/types" "^7.10.0" + "@babel/code-frame" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/types" "^7.10.1" "@babel/template@^7.8.3", "@babel/template@^7.8.6": version "7.8.6" @@ -929,22 +1045,22 @@ "@babel/parser" "^7.8.6" "@babel/types" "^7.8.6" -"@babel/traverse@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.0.tgz#290935529881baf619398d94fd453838bef36740" - integrity sha512-NZsFleMaLF1zX3NxbtXI/JCs2RPOdpGru6UBdGsfhdsDsP+kFF+h2QQJnMJglxk0kc69YmMFs4A44OJY0tKo5g== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.10.0" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.10.0" - "@babel/types" "^7.10.0" +"@babel/traverse@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz#bbcef3031e4152a6c0b50147f4958df54ca0dd27" + integrity sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ== + dependencies: + "@babel/code-frame" "^7.10.1" + "@babel/generator" "^7.10.1" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/types" "^7.10.1" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/traverse@^7.8.3", "@babel/traverse@^7.9.6": +"@babel/traverse@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg== @@ -959,12 +1075,12 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.10.0": - version "7.10.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.0.tgz#d47d92249e42393a5723aad5319035ae411e3e38" - integrity sha512-t41W8yWFyQFPOAAvPvjyRhejcLGnJTA3iRpFcDbEKwVJ3UnHQePFzLk8GagTsucJlImyNwrGikGsYURrWbQG8w== +"@babel/types@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.1.tgz#6886724d31c8022160a7db895e6731ca33483921" + integrity sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA== dependencies: - "@babel/helper-validator-identifier" "^7.9.5" + "@babel/helper-validator-identifier" "^7.10.1" lodash "^4.17.13" to-fast-properties "^2.0.0" From 46c48f75fff3a4d014d959dfd0a55d814a706099 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 30 May 2020 19:56:23 +0000 Subject: [PATCH 04/23] Update babel monorepo to v7.10.2 --- package.json | 4 ++-- yarn.lock | 58 +++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index d1d0207..985db18 100644 --- a/package.json +++ b/package.json @@ -39,9 +39,9 @@ "@aureooms/js-random": "2.0.0", "@aureooms/js-string": "0.2.0", "@babel/cli": "7.10.1", - "@babel/core": "7.10.1", + "@babel/core": "7.10.2", "@babel/polyfill": "7.10.1", - "@babel/preset-env": "7.10.1", + "@babel/preset-env": "7.10.2", "@babel/register": "7.10.1", "ava": "3.8.2", "coveralls": "3.1.0", diff --git a/yarn.lock b/yarn.lock index 42ec0a3..cb4070b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -91,19 +91,19 @@ invariant "^2.2.4" semver "^5.5.0" -"@babel/core@7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.1.tgz#2a0ad0ea693601820defebad2140206503d89af3" - integrity sha512-u8XiZ6sMXW/gPmoP5ijonSUln4unazG291X0XAQ5h0s8qnAFr6BRRZGUEK+jtRWdmB0NTJQt7Uga25q8GetIIg== +"@babel/core@7.10.2": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.2.tgz#bd6786046668a925ac2bd2fd95b579b92a23b36a" + integrity sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ== dependencies: "@babel/code-frame" "^7.10.1" - "@babel/generator" "^7.10.1" + "@babel/generator" "^7.10.2" "@babel/helper-module-transforms" "^7.10.1" "@babel/helpers" "^7.10.1" - "@babel/parser" "^7.10.1" + "@babel/parser" "^7.10.2" "@babel/template" "^7.10.1" "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/types" "^7.10.2" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" @@ -145,6 +145,16 @@ lodash "^4.17.13" source-map "^0.5.0" +"@babel/generator@^7.10.2": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.2.tgz#0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9" + integrity sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA== + dependencies: + "@babel/types" "^7.10.2" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + "@babel/generator@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" @@ -177,10 +187,10 @@ "@babel/helper-explode-assignable-expression" "^7.10.1" "@babel/types" "^7.10.1" -"@babel/helper-compilation-targets@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.1.tgz#ad6f69b4c3bae955081ef914a84e5878ffcaca63" - integrity sha512-YuF8IrgSmX/+MV2plPkjEnzlC2wf+gaok8ehMNN0jodF3/sejZauExqpEVGbJua62oaWoNYIXwz4RmAsVcGyHw== +"@babel/helper-compilation-targets@^7.10.2": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz#a17d9723b6e2c750299d2a14d4637c76936d8285" + integrity sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA== dependencies: "@babel/compat-data" "^7.10.1" browserslist "^4.12.0" @@ -488,6 +498,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.1.tgz#2e142c27ca58aa2c7b119d09269b702c8bbad28c" integrity sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg== +"@babel/parser@^7.10.2": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz#871807f10442b92ff97e4783b9b54f6a0ca812d0" + integrity sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ== + "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" @@ -928,13 +943,13 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.1.tgz#099e1b76379739bdcbfab3d548dc7e7edb2ac808" - integrity sha512-bGWNfjfXRLnqbN2T4lB3pMfoic8dkRrmHpVZamSFHzGy5xklyHTobZ28TVUD2grhE5WDnu67tBj8oslIhkiOMQ== +"@babel/preset-env@7.10.2": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.2.tgz#715930f2cf8573b0928005ee562bed52fb65fdfb" + integrity sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA== dependencies: "@babel/compat-data" "^7.10.1" - "@babel/helper-compilation-targets" "^7.10.1" + "@babel/helper-compilation-targets" "^7.10.2" "@babel/helper-module-imports" "^7.10.1" "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-proposal-async-generator-functions" "^7.10.1" @@ -991,7 +1006,7 @@ "@babel/plugin-transform-unicode-escapes" "^7.10.1" "@babel/plugin-transform-unicode-regex" "^7.10.1" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.10.1" + "@babel/types" "^7.10.2" browserslist "^4.12.0" core-js-compat "^3.6.2" invariant "^2.2.2" @@ -1084,6 +1099,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.10.2": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d" + integrity sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng== + dependencies: + "@babel/helper-validator-identifier" "^7.10.1" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7" From cc03a2a558005e2baafacaaedf3750c50326bee0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 1 Jun 2020 01:16:19 +0000 Subject: [PATCH 05/23] Update dependency nyc to v15.1.0 --- package.json | 2 +- yarn.lock | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 985db18..ba4aab3 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "esdoc-inject-style-plugin": "1.0.0", "esdoc-standard-plugin": "1.0.0", "np": "6.2.3", - "nyc": "15.0.1" + "nyc": "15.1.0" }, "files": [ "lib" diff --git a/yarn.lock b/yarn.lock index cb4070b..84246f3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3040,6 +3040,11 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -4656,10 +4661,10 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" integrity sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ== -nyc@15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.0.1.tgz#bd4d5c2b17f2ec04370365a5ca1fc0ed26f9f93d" - integrity sha512-n0MBXYBYRqa67IVt62qW1r/d9UH/Qtr7SF1w/nQLJ9KxvWF6b2xCHImRAixHN9tnMMYHC2P14uo6KddNGwMgGg== +nyc@15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" + integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== dependencies: "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" @@ -4669,6 +4674,7 @@ nyc@15.0.1: find-cache-dir "^3.2.0" find-up "^4.1.0" foreground-child "^2.0.0" + get-package-type "^0.1.0" glob "^7.1.6" istanbul-lib-coverage "^3.0.0" istanbul-lib-hook "^3.0.0" From 77504429c3473a9b73d4874a387cce5c9f548a35 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 7 Jun 2020 06:47:01 +0000 Subject: [PATCH 06/23] Update dependency np to v6.2.4 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index ba4aab3..f2beb98 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "esdoc-inject-script-plugin": "1.0.0", "esdoc-inject-style-plugin": "1.0.0", "esdoc-standard-plugin": "1.0.0", - "np": "6.2.3", + "np": "6.2.4", "nyc": "15.1.0" }, "files": [ diff --git a/yarn.lock b/yarn.lock index 84246f3..a657d31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4583,10 +4583,10 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== -np@6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/np/-/np-6.2.3.tgz#6161314e94f5ca38ae939d68f2c14fe95f43aa68" - integrity sha512-EuRlncnTPL6e/p1lqa1lbrTPPddT3KWpTvztTmOCrB2/ZvHp73xqljoUh7xSm+NTipbrcSacTDSlDZt8N6MeWg== +np@6.2.4: + version "6.2.4" + resolved "https://registry.yarnpkg.com/np/-/np-6.2.4.tgz#1cab1188b9764ae7794ec740a6881c52910337d9" + integrity sha512-3ChpSEnrQQGSH5kU8qei/vfmQRI8mggPjDvrIvGUBkAjCO0u3b3xTuraefJADZps0dGsblzcSXc5ZrAWcQAbaQ== dependencies: "@samverschueren/stream-to-observable" "^0.3.0" any-observable "^0.5.0" From 0347a2e1ac9db7da1922dd554dcc732752b8202f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 14 Jun 2020 15:36:09 +0000 Subject: [PATCH 07/23] Update dependency ava to v3.9.0 --- package.json | 2 +- yarn.lock | 123 ++++++++++++++++++++------------------------------- 2 files changed, 50 insertions(+), 75 deletions(-) diff --git a/package.json b/package.json index f2beb98..ddf6728 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@babel/polyfill": "7.10.1", "@babel/preset-env": "7.10.2", "@babel/register": "7.10.1", - "ava": "3.8.2", + "ava": "3.9.0", "coveralls": "3.1.0", "esdoc": "1.1.0", "esdoc-inject-script-plugin": "1.0.0", diff --git a/yarn.lock b/yarn.lock index a657d31..d14b98b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1245,10 +1245,10 @@ acorn@^2.1.0, acorn@^2.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" integrity sha1-q259nYhqrKiwhbwzEreaGYQz8Oc= -acorn@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe" - integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ== +acorn@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" + integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== aggregate-error@^3.0.0: version "3.0.1" @@ -1471,19 +1471,19 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -ava@3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/ava/-/ava-3.8.2.tgz#877c9eb861763a185bbabd54f359e1fbe57d1754" - integrity sha512-sph3oUsVTGsq4qbgeWys03QKCmXjkZUO3oPnFWXEW6g1SReCY9vuONGghMgw1G6VOzkg1k+niqJsOzwfO8h9Ng== +ava@3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ava/-/ava-3.9.0.tgz#ac91eac980555fcc6c1b91872ac6923ff4c0ffae" + integrity sha512-EnK5I/AX1U5nF4X1YG3QQYg2+jWnpvMW3z2y096DBvbwITkq9rB7Gu1j5clWcuizAJUlYbvcX6YfP+zkRFgC8Q== dependencies: "@concordance/react" "^2.0.0" - acorn "^7.1.1" + acorn "^7.3.1" acorn-walk "^7.1.1" ansi-styles "^4.2.1" arrgv "^1.0.2" arrify "^2.0.1" callsites "^3.1.0" - chalk "^4.0.0" + chalk "^4.1.0" chokidar "^3.4.0" chunkd "^2.0.1" ci-info "^2.0.0" @@ -1493,16 +1493,16 @@ ava@3.8.2: cli-truncate "^2.1.0" code-excerpt "^2.1.1" common-path-prefix "^3.0.0" - concordance "^4.0.0" + concordance "^5.0.0" convert-source-map "^1.7.0" currently-unhandled "^0.4.1" debug "^4.1.1" del "^5.1.0" - emittery "^0.6.0" + emittery "^0.7.0" equal-length "^1.0.0" figures "^3.2.0" - globby "^11.0.0" - ignore-by-default "^1.0.0" + globby "^11.0.1" + ignore-by-default "^2.0.0" import-local "^3.0.2" indent-string "^4.0.0" is-error "^2.2.2" @@ -1841,10 +1841,10 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" - integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== +chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -2122,21 +2122,18 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concordance@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/concordance/-/concordance-4.0.0.tgz#5932fdee397d129bdbc3a1885fbe69839b1b7e15" - integrity sha512-l0RFuB8RLfCS0Pt2Id39/oCPykE01pyxgAFypWTlaGRgvLkZrtczZ8atEHpTeEIW+zYWXTBuA9cCSeEOScxReQ== +concordance@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/concordance/-/concordance-5.0.0.tgz#6d4552f76c78301dd65e748c26af2cf131f9dd49" + integrity sha512-stOCz9ffg0+rytwTaL2njUOIyMfANwfwmqc9Dr4vTUS/x/KkVFlWx9Zlzu6tHYtjKxxaCF/cEAZgPDac+n35sg== dependencies: - date-time "^2.1.0" - esutils "^2.0.2" - fast-diff "^1.1.2" + date-time "^3.1.0" + esutils "^2.0.3" + fast-diff "^1.2.0" js-string-escape "^1.0.1" - lodash.clonedeep "^4.5.0" - lodash.flattendeep "^4.4.0" - lodash.islength "^4.0.1" - lodash.merge "^4.6.1" - md5-hex "^2.0.0" - semver "^5.5.1" + lodash "^4.17.15" + md5-hex "^3.0.1" + semver "^7.3.2" well-known-symbols "^2.0.0" configstore@^5.0.1: @@ -2268,10 +2265,10 @@ date-fns@^1.27.2: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== -date-time@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/date-time/-/date-time-2.1.0.tgz#0286d1b4c769633b3ca13e1e62558d2dbdc2eba2" - integrity sha512-/9+C44X7lot0IeiyfgJmETtRMhBidBYM2QFFIkGa0U1k+hSyY87Nw7PY3eDqpvCBm7I3WCSfPeZskW/YYq6m4g== +date-time@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/date-time/-/date-time-3.1.0.tgz#0d1e934d170579f481ed8df1e2b8ff70ee845e1e" + integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== dependencies: time-zone "^1.0.0" @@ -2513,10 +2510,10 @@ elegant-spinner@^1.0.1: resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= -emittery@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.6.0.tgz#e85312468d77c3ed9a6adf43bb57d34849e0c95a" - integrity sha512-6EMRGr9KzYWp8DzHFZsKVZBsMO6QhAeHMeHND8rhyBNCHKMLpgW9tZv40bwN3rAIKRS5CxcK8oLRKUJSB9h7yQ== +emittery@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.0.tgz#0f0789ea90e03f3de7865feb806e4f0916d16c93" + integrity sha512-/kshvS+tZaggOPQDLGzXopumRRIzxciGILDlYTGIU+PmqbSfhn4wDVphFPry4H+2TNl2QxLduexPhxcWLULA5A== emoji-regex@^7.0.1: version "7.0.3" @@ -2736,7 +2733,7 @@ estraverse@^4.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -esutils@^2.0.2: +esutils@^2.0.2, esutils@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== @@ -2827,7 +2824,7 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== -fast-diff@^1.1.2: +fast-diff@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== @@ -3139,10 +3136,10 @@ globby@^10.0.1: merge2 "^1.2.3" slash "^3.0.0" -globby@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.0.tgz#56fd0e9f0d4f8fb0c456f1ab0dee96e1380bc154" - integrity sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg== +globby@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" @@ -3342,10 +3339,10 @@ iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ignore-by-default@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= +ignore-by-default@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-2.0.0.tgz#537092018540640459569fe7c8c7a408af581146" + integrity sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA== ignore@^5.1.1, ignore@^5.1.4: version "5.1.4" @@ -4147,11 +4144,6 @@ lodash.bind@^4.1.4: resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - lodash.defaults@^4.0.1: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -4177,17 +4169,12 @@ lodash.foreach@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= -lodash.islength@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.islength/-/lodash.islength-4.0.1.tgz#4e9868d452575d750affd358c979543dc20ed577" - integrity sha1-Tpho1FJXXXUK/9NYyXlUPcIO1Xc= - lodash.map@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= -lodash.merge@^4.4.0, lodash.merge@^4.6.1: +lodash.merge@^4.4.0: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== @@ -4330,13 +4317,6 @@ matcher@^3.0.0: dependencies: escape-string-regexp "^4.0.0" -md5-hex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-2.0.0.tgz#d0588e9f1c74954492ecd24ac0ac6ce997d92e33" - integrity sha1-0FiOnxx0lUSS7NJKwKxs6ZfZLjM= - dependencies: - md5-o-matic "^0.1.1" - md5-hex@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-3.0.1.tgz#be3741b510591434b2784d79e556eefc2c9a8e5c" @@ -4344,11 +4324,6 @@ md5-hex@^3.0.1: dependencies: blueimp-md5 "^2.10.0" -md5-o-matic@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" - integrity sha1-givM1l4RfFFPqxdrJZRdVBAKA8M= - mem@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" @@ -5529,7 +5504,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -5544,7 +5519,7 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.1.1: +semver@^7.1.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== From e9db816cde145d9b026acdbbe824b73ea35c7c63 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 19 Jun 2020 21:19:03 +0000 Subject: [PATCH 08/23] Update babel monorepo to v7.10.3 --- package.json | 8 +- yarn.lock | 316 +++++++++++++++++++++++++++++++++------------------ 2 files changed, 212 insertions(+), 112 deletions(-) diff --git a/package.json b/package.json index ddf6728..f8ba27b 100644 --- a/package.json +++ b/package.json @@ -38,11 +38,11 @@ "@aureooms/js-operator": "1.0.2", "@aureooms/js-random": "2.0.0", "@aureooms/js-string": "0.2.0", - "@babel/cli": "7.10.1", - "@babel/core": "7.10.2", + "@babel/cli": "7.10.3", + "@babel/core": "7.10.3", "@babel/polyfill": "7.10.1", - "@babel/preset-env": "7.10.2", - "@babel/register": "7.10.1", + "@babel/preset-env": "7.10.3", + "@babel/register": "7.10.3", "ava": "3.9.0", "coveralls": "3.1.0", "esdoc": "1.1.0", diff --git a/yarn.lock b/yarn.lock index d14b98b..b899ee2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,10 +52,10 @@ resolved "https://registry.yarnpkg.com/@aureooms/js-string/-/js-string-0.2.0.tgz#ed5f9216c256ccb43b4c895424239d4c891d87d8" integrity sha1-7V+SFsJWzLQ7TIlUJCOdTIkdh9g= -"@babel/cli@7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.1.tgz#b6e5cd43a17b8f639442ab027976408ebe6d79a0" - integrity sha512-cVB+dXeGhMOqViIaZs3A9OUAe4pKw4SBNdMw6yHJMYR7s4TB+Cei7ThquV/84O19PdIFWuwe03vxxES0BHUm5g== +"@babel/cli@7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.3.tgz#4ea83bd997d2a41c78d07263ada3ec466fb3764b" + integrity sha512-lWB3yH5/fWY8pi2Kj5/fA+17guJ9feSBw5DNjTju3/nRi9sXnl1JPh7aKQOSvdNbiDbkzzoGYtsr46M8dGmXDQ== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" @@ -82,6 +82,13 @@ dependencies: "@babel/highlight" "^7.10.1" +"@babel/code-frame@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.3.tgz#324bcfd8d35cd3d47dae18cde63d752086435e9a" + integrity sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg== + dependencies: + "@babel/highlight" "^7.10.3" + "@babel/compat-data@^7.10.1": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz#b1085ffe72cd17bf2c0ee790fc09f9626011b2db" @@ -91,19 +98,28 @@ invariant "^2.2.4" semver "^5.5.0" -"@babel/core@7.10.2": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.2.tgz#bd6786046668a925ac2bd2fd95b579b92a23b36a" - integrity sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ== +"@babel/compat-data@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.3.tgz#9af3e033f36e8e2d6e47570db91e64a846f5d382" + integrity sha512-BDIfJ9uNZuI0LajPfoYV28lX8kyCPMHY6uY4WH1lJdcicmAfxCK5ASzaeV0D/wsUaRH/cLk+amuxtC37sZ8TUg== dependencies: - "@babel/code-frame" "^7.10.1" - "@babel/generator" "^7.10.2" + browserslist "^4.12.0" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.3.tgz#73b0e8ddeec1e3fdd7a2de587a60e17c440ec77e" + integrity sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w== + dependencies: + "@babel/code-frame" "^7.10.3" + "@babel/generator" "^7.10.3" "@babel/helper-module-transforms" "^7.10.1" "@babel/helpers" "^7.10.1" - "@babel/parser" "^7.10.2" - "@babel/template" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.2" + "@babel/parser" "^7.10.3" + "@babel/template" "^7.10.3" + "@babel/traverse" "^7.10.3" + "@babel/types" "^7.10.3" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" @@ -145,12 +161,12 @@ lodash "^4.17.13" source-map "^0.5.0" -"@babel/generator@^7.10.2": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.2.tgz#0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9" - integrity sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA== +"@babel/generator@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.3.tgz#32b9a0d963a71d7a54f5f6c15659c3dbc2a523a5" + integrity sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA== dependencies: - "@babel/types" "^7.10.2" + "@babel/types" "^7.10.3" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" @@ -228,13 +244,13 @@ "@babel/helper-regex" "^7.8.3" regexpu-core "^4.7.0" -"@babel/helper-define-map@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz#5e69ee8308648470dd7900d159c044c10285221d" - integrity sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg== +"@babel/helper-define-map@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.3.tgz#d27120a5e57c84727b30944549b2dfeca62401a8" + integrity sha512-bxRzDi4Sin/k0drWCczppOhov1sBSdBvXJObM1NLHQzjhXhwRtn7aRWGvLJWCYbuu2qUk3EKs6Ci9C9ps8XokQ== dependencies: - "@babel/helper-function-name" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/helper-function-name" "^7.10.3" + "@babel/types" "^7.10.3" lodash "^4.17.13" "@babel/helper-explode-assignable-expression@^7.10.1": @@ -254,6 +270,15 @@ "@babel/template" "^7.10.1" "@babel/types" "^7.10.1" +"@babel/helper-function-name@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz#79316cd75a9fa25ba9787ff54544307ed444f197" + integrity sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw== + dependencies: + "@babel/helper-get-function-arity" "^7.10.3" + "@babel/template" "^7.10.3" + "@babel/types" "^7.10.3" + "@babel/helper-function-name@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" @@ -270,6 +295,13 @@ dependencies: "@babel/types" "^7.10.1" +"@babel/helper-get-function-arity@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz#3a28f7b28ccc7719eacd9223b659fdf162e4c45e" + integrity sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg== + dependencies: + "@babel/types" "^7.10.3" + "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" @@ -277,12 +309,12 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-hoist-variables@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz#7e77c82e5dcae1ebf123174c385aaadbf787d077" - integrity sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg== +"@babel/helper-hoist-variables@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.3.tgz#d554f52baf1657ffbd7e5137311abc993bb3f068" + integrity sha512-9JyafKoBt5h20Yv1+BXQMdcXXavozI1vt401KBiRc2qzUepbVnd7ogVNymY1xkQN9fekGwfxtotH2Yf5xsGzgg== dependencies: - "@babel/types" "^7.10.1" + "@babel/types" "^7.10.3" "@babel/helper-member-expression-to-functions@^7.10.1": version "7.10.1" @@ -305,6 +337,13 @@ dependencies: "@babel/types" "^7.10.1" +"@babel/helper-module-imports@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz#766fa1d57608e53e5676f23ae498ec7a95e1b11a" + integrity sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w== + dependencies: + "@babel/types" "^7.10.3" + "@babel/helper-module-imports@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" @@ -345,6 +384,13 @@ dependencies: "@babel/types" "^7.10.1" +"@babel/helper-optimise-call-expression@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz#f53c4b6783093195b0f69330439908841660c530" + integrity sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg== + dependencies: + "@babel/types" "^7.10.3" + "@babel/helper-optimise-call-expression@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" @@ -362,6 +408,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127" integrity sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA== +"@babel/helper-plugin-utils@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz#aac45cccf8bc1873b99a85f34bceef3beb5d3244" + integrity sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g== + "@babel/helper-regex@^7.10.1": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96" @@ -387,6 +438,17 @@ "@babel/traverse" "^7.10.1" "@babel/types" "^7.10.1" +"@babel/helper-remap-async-to-generator@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.3.tgz#18564f8a6748be466970195b876e8bba3bccf442" + integrity sha512-sLB7666ARbJUGDO60ZormmhQOyqMX/shKBXZ7fy937s+3ID8gSrneMvKSSb+8xIM5V7Vn6uNVtOY1vIm26XLtA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-wrap-function" "^7.10.1" + "@babel/template" "^7.10.3" + "@babel/traverse" "^7.10.3" + "@babel/types" "^7.10.3" + "@babel/helper-replace-supers@^7.10.1": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d" @@ -442,6 +504,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5" integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw== +"@babel/helper-validator-identifier@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz#60d9847f98c4cea1b279e005fdb7c28be5412d15" + integrity sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw== + "@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" @@ -484,6 +551,15 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.3.tgz#c633bb34adf07c5c13156692f5922c81ec53f28d" + integrity sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw== + dependencies: + "@babel/helper-validator-identifier" "^7.10.3" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/highlight@^7.8.3": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" @@ -498,23 +574,23 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.1.tgz#2e142c27ca58aa2c7b119d09269b702c8bbad28c" integrity sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg== -"@babel/parser@^7.10.2": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz#871807f10442b92ff97e4783b9b54f6a0ca812d0" - integrity sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ== +"@babel/parser@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.3.tgz#7e71d892b0d6e7d04a1af4c3c79d72c1f10f5315" + integrity sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA== "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q== -"@babel/plugin-proposal-async-generator-functions@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz#6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55" - integrity sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw== +"@babel/plugin-proposal-async-generator-functions@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.3.tgz#5a02453d46e5362e2073c7278beab2e53ad7d939" + integrity sha512-WUUWM7YTOudF4jZBAJIW9D7aViYC/Fn0Pln4RIHlQALyno3sXSjqmTA4Zy1TKC2D49RCR8Y/Pn4OIUtEypK3CA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-remap-async-to-generator" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.3" + "@babel/helper-remap-async-to-generator" "^7.10.3" "@babel/plugin-syntax-async-generators" "^7.8.0" "@babel/plugin-proposal-class-properties@^7.10.1": @@ -557,12 +633,12 @@ "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-numeric-separator" "^7.10.1" -"@babel/plugin-proposal-object-rest-spread@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz#cba44908ac9f142650b4a65b8aa06bf3478d5fb6" - integrity sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ== +"@babel/plugin-proposal-object-rest-spread@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.3.tgz#b8d0d22f70afa34ad84b7a200ff772f9b9fce474" + integrity sha512-ZZh5leCIlH9lni5bU/wB/UcjtcVLgR8gc+FAgW2OOY+m9h1II3ItTO1/cewNUcsIDZSYcSaz/rYVls+Fb0ExVQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.3" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.10.1" @@ -574,12 +650,12 @@ "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz#15f5d6d22708629451a91be28f8facc55b0e818c" - integrity sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA== +"@babel/plugin-proposal-optional-chaining@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.3.tgz#9a726f94622b653c0a3a7a59cdce94730f526f7c" + integrity sha512-yyG3n9dJ1vZ6v5sfmIlMMZ8azQoqx/5/nZTSWX1td6L1H1bsjzA8TInDChpafCZiJkeOFzp/PtrfigAQXxI1Ng== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.3" "@babel/plugin-syntax-optional-chaining" "^7.8.0" "@babel/plugin-proposal-private-methods@^7.10.1": @@ -707,26 +783,26 @@ "@babel/helper-plugin-utils" "^7.10.1" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz#6e11dd6c4dfae70f540480a4702477ed766d733f" - integrity sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ== +"@babel/plugin-transform-classes@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.3.tgz#8d9a656bc3d01f3ff69e1fccb354b0f9d72ac544" + integrity sha512-irEX0ChJLaZVC7FvvRoSIxJlmk0IczFLcwaRXUArBKYHCHbOhe57aG8q3uw/fJsoSXvZhjRX960hyeAGlVBXZw== dependencies: "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-define-map" "^7.10.1" - "@babel/helper-function-name" "^7.10.1" - "@babel/helper-optimise-call-expression" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-define-map" "^7.10.3" + "@babel/helper-function-name" "^7.10.3" + "@babel/helper-optimise-call-expression" "^7.10.3" + "@babel/helper-plugin-utils" "^7.10.3" "@babel/helper-replace-supers" "^7.10.1" "@babel/helper-split-export-declaration" "^7.10.1" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz#59aa399064429d64dce5cf76ef9b90b7245ebd07" - integrity sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ== +"@babel/plugin-transform-computed-properties@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.3.tgz#d3aa6eef67cb967150f76faff20f0abbf553757b" + integrity sha512-GWzhaBOsdbjVFav96drOz7FzrcEW6AP5nax0gLIpstiFaI3LOb2tAg06TimaWU6YKOfUACK3FVrxPJ4GSc5TgA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.3" "@babel/plugin-transform-destructuring@^7.10.1": version "7.10.1" @@ -814,14 +890,14 @@ "@babel/helper-simple-access" "^7.10.1" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz#9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6" - integrity sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA== +"@babel/plugin-transform-modules-systemjs@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.3.tgz#004ae727b122b7b146b150d50cba5ffbff4ac56b" + integrity sha512-GWXWQMmE1GH4ALc7YXW56BTh/AlzvDWhUNn9ArFF0+Cz5G8esYlVbXfdyHa1xaD1j+GnBoCeoQNlwtZTVdiG/A== dependencies: - "@babel/helper-hoist-variables" "^7.10.1" + "@babel/helper-hoist-variables" "^7.10.3" "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.3" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-umd@^7.10.1": @@ -832,10 +908,10 @@ "@babel/helper-module-transforms" "^7.10.1" "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" - integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.3.tgz#a4f8444d1c5a46f35834a410285f2c901c007ca6" + integrity sha512-I3EH+RMFyVi8Iy/LekQm948Z4Lz4yKT7rK+vuCAeRm0kTa6Z5W7xuhRxDNJv0FPya/her6AUgrDITb70YHtTvA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.8.3" @@ -869,10 +945,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-regenerator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz#10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490" - integrity sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw== +"@babel/plugin-transform-regenerator@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.3.tgz#6ec680f140a5ceefd291c221cb7131f6d7e8cb6d" + integrity sha512-H5kNeW0u8mbk0qa1jVIVTeJJL6/TJ81ltD4oyPx0P499DhMJrTmmIFCmJ3QloGpQG8K9symccB7S7SJpCKLwtw== dependencies: regenerator-transform "^0.14.2" @@ -905,13 +981,13 @@ "@babel/helper-plugin-utils" "^7.10.1" "@babel/helper-regex" "^7.10.1" -"@babel/plugin-transform-template-literals@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz#914c7b7f4752c570ea00553b4284dad8070e8628" - integrity sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg== +"@babel/plugin-transform-template-literals@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.3.tgz#69d39b3d44b31e7b4864173322565894ce939b25" + integrity sha512-yaBn9OpxQra/bk0/CaA4wr41O0/Whkg6nqjqApcinxM7pro51ojhX6fv1pimAnVjVfDy14K0ULoRL70CA9jWWA== dependencies: "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.3" "@babel/plugin-transform-typeof-symbol@^7.10.1": version "7.10.1" @@ -943,24 +1019,24 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@7.10.2": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.2.tgz#715930f2cf8573b0928005ee562bed52fb65fdfb" - integrity sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA== +"@babel/preset-env@7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.3.tgz#3e58c9861bbd93b6a679987c7e4bd365c56c80c9" + integrity sha512-jHaSUgiewTmly88bJtMHbOd1bJf2ocYxb5BWKSDQIP5tmgFuS/n0gl+nhSrYDhT33m0vPxp+rP8oYYgPgMNQlg== dependencies: - "@babel/compat-data" "^7.10.1" + "@babel/compat-data" "^7.10.3" "@babel/helper-compilation-targets" "^7.10.2" - "@babel/helper-module-imports" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-proposal-async-generator-functions" "^7.10.1" + "@babel/helper-module-imports" "^7.10.3" + "@babel/helper-plugin-utils" "^7.10.3" + "@babel/plugin-proposal-async-generator-functions" "^7.10.3" "@babel/plugin-proposal-class-properties" "^7.10.1" "@babel/plugin-proposal-dynamic-import" "^7.10.1" "@babel/plugin-proposal-json-strings" "^7.10.1" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" "@babel/plugin-proposal-numeric-separator" "^7.10.1" - "@babel/plugin-proposal-object-rest-spread" "^7.10.1" + "@babel/plugin-proposal-object-rest-spread" "^7.10.3" "@babel/plugin-proposal-optional-catch-binding" "^7.10.1" - "@babel/plugin-proposal-optional-chaining" "^7.10.1" + "@babel/plugin-proposal-optional-chaining" "^7.10.3" "@babel/plugin-proposal-private-methods" "^7.10.1" "@babel/plugin-proposal-unicode-property-regex" "^7.10.1" "@babel/plugin-syntax-async-generators" "^7.8.0" @@ -977,8 +1053,8 @@ "@babel/plugin-transform-async-to-generator" "^7.10.1" "@babel/plugin-transform-block-scoped-functions" "^7.10.1" "@babel/plugin-transform-block-scoping" "^7.10.1" - "@babel/plugin-transform-classes" "^7.10.1" - "@babel/plugin-transform-computed-properties" "^7.10.1" + "@babel/plugin-transform-classes" "^7.10.3" + "@babel/plugin-transform-computed-properties" "^7.10.3" "@babel/plugin-transform-destructuring" "^7.10.1" "@babel/plugin-transform-dotall-regex" "^7.10.1" "@babel/plugin-transform-duplicate-keys" "^7.10.1" @@ -989,24 +1065,24 @@ "@babel/plugin-transform-member-expression-literals" "^7.10.1" "@babel/plugin-transform-modules-amd" "^7.10.1" "@babel/plugin-transform-modules-commonjs" "^7.10.1" - "@babel/plugin-transform-modules-systemjs" "^7.10.1" + "@babel/plugin-transform-modules-systemjs" "^7.10.3" "@babel/plugin-transform-modules-umd" "^7.10.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.3" "@babel/plugin-transform-new-target" "^7.10.1" "@babel/plugin-transform-object-super" "^7.10.1" "@babel/plugin-transform-parameters" "^7.10.1" "@babel/plugin-transform-property-literals" "^7.10.1" - "@babel/plugin-transform-regenerator" "^7.10.1" + "@babel/plugin-transform-regenerator" "^7.10.3" "@babel/plugin-transform-reserved-words" "^7.10.1" "@babel/plugin-transform-shorthand-properties" "^7.10.1" "@babel/plugin-transform-spread" "^7.10.1" "@babel/plugin-transform-sticky-regex" "^7.10.1" - "@babel/plugin-transform-template-literals" "^7.10.1" + "@babel/plugin-transform-template-literals" "^7.10.3" "@babel/plugin-transform-typeof-symbol" "^7.10.1" "@babel/plugin-transform-unicode-escapes" "^7.10.1" "@babel/plugin-transform-unicode-regex" "^7.10.1" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.10.2" + "@babel/types" "^7.10.3" browserslist "^4.12.0" core-js-compat "^3.6.2" invariant "^2.2.2" @@ -1024,10 +1100,10 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/register@7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.1.tgz#b6567c5cb5049f44bbf8c35d6ff68ca3c43238ed" - integrity sha512-sl96+kB3IA2B9EzpwwBmYadOT14vw3KaXOknGDbJaZCOj52GDA4Tivudq9doCJcB+bEIKCEARZYwRgBBsCGXyg== +"@babel/register@7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.3.tgz#b49b6603fc8d214cd2f77a6ed2256bd198b5994b" + integrity sha512-s1il0vdd02HCGwV1iocGJEzcbTNouZqMolSXKXFAiTNJSudPas9jdLQwyPPyAJxdNL6KGJ8pwWIOpKmgO/JWqg== dependencies: find-cache-dir "^2.0.0" lodash "^4.17.13" @@ -1051,6 +1127,15 @@ "@babel/parser" "^7.10.1" "@babel/types" "^7.10.1" +"@babel/template@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.3.tgz#4d13bc8e30bf95b0ce9d175d30306f42a2c9a7b8" + integrity sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA== + dependencies: + "@babel/code-frame" "^7.10.3" + "@babel/parser" "^7.10.3" + "@babel/types" "^7.10.3" + "@babel/template@^7.8.3", "@babel/template@^7.8.6": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" @@ -1075,6 +1160,21 @@ globals "^11.1.0" lodash "^4.17.13" +"@babel/traverse@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.3.tgz#0b01731794aa7b77b214bcd96661f18281155d7e" + integrity sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug== + dependencies: + "@babel/code-frame" "^7.10.3" + "@babel/generator" "^7.10.3" + "@babel/helper-function-name" "^7.10.3" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/parser" "^7.10.3" + "@babel/types" "^7.10.3" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/traverse@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" @@ -1099,12 +1199,12 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@babel/types@^7.10.2": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d" - integrity sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng== +"@babel/types@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.3.tgz#6535e3b79fea86a6b09e012ea8528f935099de8e" + integrity sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA== dependencies: - "@babel/helper-validator-identifier" "^7.10.1" + "@babel/helper-validator-identifier" "^7.10.3" lodash "^4.17.13" to-fast-properties "^2.0.0" From f84abc79b77306b096cc59d0dc695ed00c3297c3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 27 Jun 2020 20:00:59 +0000 Subject: [PATCH 09/23] Update dependency np to v6.2.5 --- package.json | 2 +- yarn.lock | 198 ++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 164 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index f8ba27b..a90a69d 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "esdoc-inject-script-plugin": "1.0.0", "esdoc-inject-style-plugin": "1.0.0", "esdoc-standard-plugin": "1.0.0", - "np": "6.2.4", + "np": "6.2.5", "nyc": "15.1.0" }, "files": [ diff --git a/yarn.lock b/yarn.lock index b899ee2..9302b7e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1272,6 +1272,11 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sindresorhus/is@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-2.1.1.tgz#ceff6a28a5b4867c2dd4a1ba513de278ccbe8bb1" + integrity sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg== + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -1279,6 +1284,23 @@ dependencies: defer-to-connect "^1.0.1" +"@szmarczak/http-timer@^4.0.0": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152" + integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ== + dependencies: + defer-to-connect "^2.0.0" + +"@types/cacheable-request@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976" + integrity sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" @@ -1298,6 +1320,18 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/http-cache-semantics@*": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" + integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A== + +"@types/keyv@*", "@types/keyv@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" + integrity sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw== + dependencies: + "@types/node" "*" + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -1323,6 +1357,13 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/responselike@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + abab@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" @@ -1861,6 +1902,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-lookup@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz#87be64a18b925234875e10a9bb1ebca4adce6b38" + integrity sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg== + dependencies: + "@types/keyv" "^3.1.1" + keyv "^4.0.0" + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -1874,6 +1923,19 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" +cacheable-request@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.1.tgz#062031c2856232782ed694a257fa35da93942a58" + integrity sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^2.0.0" + caching-transform@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" @@ -2411,6 +2473,13 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +decompress-response@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-5.0.0.tgz#7849396e80e3d1eba8cb2f75ef4930f76461cb0f" + integrity sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw== + dependencies: + mimic-response "^2.0.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -2440,6 +2509,11 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +defer-to-connect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.0.tgz#83d6b199db041593ac84d781b5222308ccf4c2c1" + integrity sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg== + define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -3259,6 +3333,27 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +got@^10.6.0: + version "10.7.0" + resolved "https://registry.yarnpkg.com/got/-/got-10.7.0.tgz#62889dbcd6cca32cd6a154cc2d0c6895121d091f" + integrity sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg== + dependencies: + "@sindresorhus/is" "^2.0.0" + "@szmarczak/http-timer" "^4.0.0" + "@types/cacheable-request" "^6.0.1" + cacheable-lookup "^2.0.0" + cacheable-request "^7.0.1" + decompress-response "^5.0.0" + duplexer3 "^0.1.4" + get-stream "^5.0.0" + lowercase-keys "^2.0.0" + mimic-response "^2.1.0" + p-cancelable "^2.0.0" + p-event "^4.0.0" + responselike "^2.0.0" + to-readable-stream "^2.0.0" + type-fest "^0.10.0" + got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -3557,11 +3652,6 @@ invariant@^2.2.2, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ip-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.1.0.tgz#5ad62f685a14edb421abebc2fff8db94df67b455" - integrity sha512-pKnZpbgCTfH/1NLIlOduP/V+WRXzC2MOz3Qo8xmxk8C5GudJLgK5QyLVXOSWy3ParAH7Eemurl3xjv/WXYFvMA== - irregular-plurals@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.2.0.tgz#b19c490a0723798db51b235d7e39add44dab0822" @@ -3824,12 +3914,10 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-url-superb@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-3.0.0.tgz#b9a1da878a1ac73659047d1e6f4ef22c209d3e25" - integrity sha512-3faQP+wHCGDQT1qReM5zCPx2mxoal6DzbzquFlCYJLWyy4WPTved33ea2xFbX37z4NoriEwZGIYhFtx8RUB5wQ== - dependencies: - url-regex "^5.0.0" +is-url-superb@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-4.0.0.tgz#b54d1d2499bb16792748ac967aa3ecb41a33a8c2" + integrity sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA== is-windows@^1.0.2: version "1.0.2" @@ -4020,6 +4108,11 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -4078,6 +4171,13 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +keyv@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.1.tgz#9fe703cb4a94d6d11729d320af033307efd02ee6" + integrity sha512-xz6Jv6oNkbhrFCvCP7HQa8AaII8y8LRpoSm661NOKLr4uHuBwhX4epXrPQgF3+xdJnN4Esm5X0xwY4bOlALOtw== + dependencies: + json-buffer "3.0.1" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -4527,6 +4627,11 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^2.0.0, mimic-response@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + min-indent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.0.tgz#cfc45c37e9ec0d8f0a0ec3dd4ef7f7c3abe39256" @@ -4658,10 +4763,10 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== -np@6.2.4: - version "6.2.4" - resolved "https://registry.yarnpkg.com/np/-/np-6.2.4.tgz#1cab1188b9764ae7794ec740a6881c52910337d9" - integrity sha512-3ChpSEnrQQGSH5kU8qei/vfmQRI8mggPjDvrIvGUBkAjCO0u3b3xTuraefJADZps0dGsblzcSXc5ZrAWcQAbaQ== +np@6.2.5: + version "6.2.5" + resolved "https://registry.yarnpkg.com/np/-/np-6.2.5.tgz#63eb54905415f04114bfd883cb1f99ee7012cfab" + integrity sha512-oDGzbDFPae7O2fxitPAIHFFu7nfyhp//NZ4fs41IYq/k24IzRWSOFhnVjEBKjZSI3MsaH7gcW3dNy868S8KgyQ== dependencies: "@samverschueren/stream-to-observable" "^0.3.0" any-observable "^0.5.0" @@ -4684,7 +4789,7 @@ np@6.2.4: log-symbols "^3.0.0" meow "^6.0.0" new-github-release-url "^1.0.0" - npm-name "^5.4.0" + npm-name "^6.0.0" onetime "^5.1.0" open "^7.0.0" ow "^0.15.0" @@ -4699,15 +4804,17 @@ np@6.2.4: terminal-link "^2.0.0" update-notifier "^4.0.0" -npm-name@^5.4.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/npm-name/-/npm-name-5.5.0.tgz#3a73adbcb0488a41a44ff820ed51dcc32c72bd09" - integrity sha512-l7/uyVfEi2e3ho+ovaJZC0xlbwzXNUz3RxkxpfcnLuoGKAuYoo9YoJ/uy18PsTD8IziugGHks4t/mGmBJEZ4Qg== +npm-name@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/npm-name/-/npm-name-6.0.1.tgz#73e05b4cb6332766a6727b2635e247bb4107255b" + integrity sha512-fhKRvUAxaYzMEUZim4mXWyfFbVS+M1CbrCLdAo3txWzrctxKka/h+KaBW0O9Cz5uOM00Nldn2JLWhuwnyW3SUw== dependencies: - got "^9.6.0" + got "^10.6.0" is-scoped "^2.1.0" - is-url-superb "^3.0.0" + is-url-superb "^4.0.0" lodash.zip "^4.2.0" + org-regex "^1.0.0" + p-map "^3.0.0" registry-auth-token "^4.0.0" registry-url "^5.1.0" validate-npm-package-name "^3.0.0" @@ -4872,6 +4979,11 @@ ora@^4.0.4: strip-ansi "^6.0.0" wcwidth "^1.0.1" +org-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/org-regex/-/org-regex-1.0.0.tgz#67ebb9ab3cb124fea5841289d60b59434f041a59" + integrity sha512-7bqkxkEJwzJQUAlyYniqEZ3Ilzjh0yoa62c7gL6Ijxj5bEpPL+8IE1Z0PFj0ywjjXQcdrwR51g9MIcLezR0hKQ== + os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -4889,11 +5001,23 @@ p-cancelable@^1.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-cancelable@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.0.0.tgz#4a3740f5bdaf5ed5d7c3e34882c6fb5d6b266a6e" + integrity sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg== + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= +p-event@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" + integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== + dependencies: + p-timeout "^3.1.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -5508,6 +5632,13 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" +responselike@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" + integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== + dependencies: + lowercase-keys "^2.0.0" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -6040,11 +6171,6 @@ time-zone@^1.0.0: resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" integrity sha1-mcW/VZWJZq9tBtg73zgA3IL67F0= -tlds@^1.203.0: - version "1.207.0" - resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.207.0.tgz#459264e644cf63ddc0965fece3898913286b1afd" - integrity sha512-k7d7Q1LqjtAvhtEOs3yN14EabsNO8ZCoY6RESSJDB9lst3bTx3as/m1UuAeCKzYxiyhR1qq72ZPhpSf+qlqiwg== - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -6074,6 +6200,11 @@ to-readable-stream@^1.0.0: resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== +to-readable-stream@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-2.1.0.tgz#82880316121bea662cdc226adb30addb50cb06e8" + integrity sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w== + to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -6151,6 +6282,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.10.0.tgz#7f06b2b9fbfc581068d1341ffabd0349ceafc642" + integrity sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw== + type-fest@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" @@ -6284,14 +6420,6 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" -url-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-5.0.0.tgz#8f5456ab83d898d18b2f91753a702649b873273a" - integrity sha512-O08GjTiAFNsSlrUWfqF1jH0H1W3m35ZyadHrGv5krdnmPPoxP27oDTqux/579PtaroiSGm5yma6KT1mHFH6Y/g== - dependencies: - ip-regex "^4.1.0" - tlds "^1.203.0" - use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" From 388af4d74d80d81895d8fabaa69521d4c911ce6f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 30 Jun 2020 13:39:33 +0000 Subject: [PATCH 10/23] Update babel monorepo to v7.10.4 --- package.json | 10 +- yarn.lock | 1190 ++++++++++++++++++++++---------------------------- 2 files changed, 538 insertions(+), 662 deletions(-) diff --git a/package.json b/package.json index a90a69d..2be2b7e 100644 --- a/package.json +++ b/package.json @@ -38,11 +38,11 @@ "@aureooms/js-operator": "1.0.2", "@aureooms/js-random": "2.0.0", "@aureooms/js-string": "0.2.0", - "@babel/cli": "7.10.3", - "@babel/core": "7.10.3", - "@babel/polyfill": "7.10.1", - "@babel/preset-env": "7.10.3", - "@babel/register": "7.10.3", + "@babel/cli": "7.10.4", + "@babel/core": "7.10.4", + "@babel/polyfill": "7.10.4", + "@babel/preset-env": "7.10.4", + "@babel/register": "7.10.4", "ava": "3.9.0", "coveralls": "3.1.0", "esdoc": "1.1.0", diff --git a/yarn.lock b/yarn.lock index 9302b7e..c24602f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,10 +52,10 @@ resolved "https://registry.yarnpkg.com/@aureooms/js-string/-/js-string-0.2.0.tgz#ed5f9216c256ccb43b4c895424239d4c891d87d8" integrity sha1-7V+SFsJWzLQ7TIlUJCOdTIkdh9g= -"@babel/cli@7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.3.tgz#4ea83bd997d2a41c78d07263ada3ec466fb3764b" - integrity sha512-lWB3yH5/fWY8pi2Kj5/fA+17guJ9feSBw5DNjTju3/nRi9sXnl1JPh7aKQOSvdNbiDbkzzoGYtsr46M8dGmXDQ== +"@babel/cli@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.4.tgz#ba38ad6d0b4b772a67b106934b7c33d656031896" + integrity sha512-xX99K4V1BzGJdQANK5cwK+EpF1vP9gvqhn+iWvG+TubCjecplW7RSQimJ2jcCvu6fnK5pY6mZMdu6EWTj32QVA== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" @@ -75,51 +75,35 @@ dependencies: "@babel/highlight" "^7.8.3" -"@babel/code-frame@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff" - integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw== +"@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== dependencies: - "@babel/highlight" "^7.10.1" + "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.3.tgz#324bcfd8d35cd3d47dae18cde63d752086435e9a" - integrity sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg== - dependencies: - "@babel/highlight" "^7.10.3" - -"@babel/compat-data@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz#b1085ffe72cd17bf2c0ee790fc09f9626011b2db" - integrity sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw== +"@babel/compat-data@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.4.tgz#706a6484ee6f910b719b696a9194f8da7d7ac241" + integrity sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw== dependencies: browserslist "^4.12.0" invariant "^2.2.4" semver "^5.5.0" -"@babel/compat-data@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.3.tgz#9af3e033f36e8e2d6e47570db91e64a846f5d382" - integrity sha512-BDIfJ9uNZuI0LajPfoYV28lX8kyCPMHY6uY4WH1lJdcicmAfxCK5ASzaeV0D/wsUaRH/cLk+amuxtC37sZ8TUg== - dependencies: - browserslist "^4.12.0" - invariant "^2.2.4" - semver "^5.5.0" - -"@babel/core@7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.3.tgz#73b0e8ddeec1e3fdd7a2de587a60e17c440ec77e" - integrity sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w== - dependencies: - "@babel/code-frame" "^7.10.3" - "@babel/generator" "^7.10.3" - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helpers" "^7.10.1" - "@babel/parser" "^7.10.3" - "@babel/template" "^7.10.3" - "@babel/traverse" "^7.10.3" - "@babel/types" "^7.10.3" +"@babel/core@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.4.tgz#780e8b83e496152f8dd7df63892b2e052bf1d51d" + integrity sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" @@ -151,22 +135,12 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.1.tgz#4d14458e539bcb04ffe34124143f5c489f2dbca9" - integrity sha512-AT0YPLQw9DI21tliuJIdplVfLHya6mcGa8ctkv7n4Qv+hYacJrKmNWIteAK1P9iyLikFIAkwqJ7HAOqIDLFfgA== +"@babel/generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.4.tgz#e49eeed9fe114b62fa5b181856a43a5e32f5f243" + integrity sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng== dependencies: - "@babel/types" "^7.10.1" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/generator@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.3.tgz#32b9a0d963a71d7a54f5f6c15659c3dbc2a523a5" - integrity sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA== - dependencies: - "@babel/types" "^7.10.3" + "@babel/types" "^7.10.4" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" @@ -181,12 +155,12 @@ lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz#f6d08acc6f70bbd59b436262553fb2e259a1a268" - integrity sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw== +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== dependencies: - "@babel/types" "^7.10.1" + "@babel/types" "^7.10.4" "@babel/helper-annotate-as-pure@^7.8.3": version "7.8.3" @@ -195,44 +169,44 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz#0ec7d9be8174934532661f87783eb18d72290059" - integrity sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== dependencies: - "@babel/helper-explode-assignable-expression" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helper-compilation-targets@^7.10.2": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz#a17d9723b6e2c750299d2a14d4637c76936d8285" - integrity sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA== +"@babel/helper-compilation-targets@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" + integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== dependencies: - "@babel/compat-data" "^7.10.1" + "@babel/compat-data" "^7.10.4" browserslist "^4.12.0" invariant "^2.2.4" levenary "^1.1.1" semver "^5.5.0" -"@babel/helper-create-class-features-plugin@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.1.tgz#6d8a45aafe492378d0e6fc0b33e5dea132eae21c" - integrity sha512-bwhdehBJZt84HuPUcP1HaTLuc/EywVS8rc3FgsEPDcivg+DCW+SHuLHVkYOmcBA1ZfI+Z/oZjQc/+bPmIO7uAA== - dependencies: - "@babel/helper-function-name" "^7.10.1" - "@babel/helper-member-expression-to-functions" "^7.10.1" - "@babel/helper-optimise-call-expression" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-replace-supers" "^7.10.1" - "@babel/helper-split-export-declaration" "^7.10.1" - -"@babel/helper-create-regexp-features-plugin@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd" - integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-regex" "^7.10.1" +"@babel/helper-create-class-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz#2d4015d0136bd314103a70d84a7183e4b344a355" + integrity sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" + integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" regexpu-core "^4.7.0" "@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": @@ -244,40 +218,31 @@ "@babel/helper-regex" "^7.8.3" regexpu-core "^4.7.0" -"@babel/helper-define-map@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.3.tgz#d27120a5e57c84727b30944549b2dfeca62401a8" - integrity sha512-bxRzDi4Sin/k0drWCczppOhov1sBSdBvXJObM1NLHQzjhXhwRtn7aRWGvLJWCYbuu2qUk3EKs6Ci9C9ps8XokQ== +"@babel/helper-define-map@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz#f037ad794264f729eda1889f4ee210b870999092" + integrity sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA== dependencies: - "@babel/helper-function-name" "^7.10.3" - "@babel/types" "^7.10.3" + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.4" lodash "^4.17.13" -"@babel/helper-explode-assignable-expression@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz#e9d76305ee1162ca467357ae25df94f179af2b7e" - integrity sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg== - dependencies: - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/helper-function-name@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz#92bd63829bfc9215aca9d9defa85f56b539454f4" - integrity sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ== +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" + integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== dependencies: - "@babel/helper-get-function-arity" "^7.10.1" - "@babel/template" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helper-function-name@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz#79316cd75a9fa25ba9787ff54544307ed444f197" - integrity sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw== +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== dependencies: - "@babel/helper-get-function-arity" "^7.10.3" - "@babel/template" "^7.10.3" - "@babel/types" "^7.10.3" + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" "@babel/helper-function-name@^7.9.5": version "7.9.5" @@ -288,19 +253,12 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.9.5" -"@babel/helper-get-function-arity@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz#7303390a81ba7cb59613895a192b93850e373f7d" - integrity sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw== - dependencies: - "@babel/types" "^7.10.1" - -"@babel/helper-get-function-arity@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz#3a28f7b28ccc7719eacd9223b659fdf162e4c45e" - integrity sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg== +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== dependencies: - "@babel/types" "^7.10.3" + "@babel/types" "^7.10.4" "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" @@ -309,19 +267,19 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-hoist-variables@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.3.tgz#d554f52baf1657ffbd7e5137311abc993bb3f068" - integrity sha512-9JyafKoBt5h20Yv1+BXQMdcXXavozI1vt401KBiRc2qzUepbVnd7ogVNymY1xkQN9fekGwfxtotH2Yf5xsGzgg== +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== dependencies: - "@babel/types" "^7.10.3" + "@babel/types" "^7.10.4" -"@babel/helper-member-expression-to-functions@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz#432967fd7e12a4afef66c4687d4ca22bc0456f15" - integrity sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g== +"@babel/helper-member-expression-to-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz#7cd04b57dfcf82fce9aeae7d4e4452fa31b8c7c4" + integrity sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A== dependencies: - "@babel/types" "^7.10.1" + "@babel/types" "^7.10.4" "@babel/helper-member-expression-to-functions@^7.8.3": version "7.8.3" @@ -330,19 +288,12 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-module-imports@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz#dd331bd45bccc566ce77004e9d05fe17add13876" - integrity sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg== +"@babel/helper-module-imports@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== dependencies: - "@babel/types" "^7.10.1" - -"@babel/helper-module-imports@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz#766fa1d57608e53e5676f23ae498ec7a95e1b11a" - integrity sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w== - dependencies: - "@babel/types" "^7.10.3" + "@babel/types" "^7.10.4" "@babel/helper-module-imports@^7.8.3": version "7.8.3" @@ -351,17 +302,17 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-module-transforms@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622" - integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg== - dependencies: - "@babel/helper-module-imports" "^7.10.1" - "@babel/helper-replace-supers" "^7.10.1" - "@babel/helper-simple-access" "^7.10.1" - "@babel/helper-split-export-declaration" "^7.10.1" - "@babel/template" "^7.10.1" - "@babel/types" "^7.10.1" +"@babel/helper-module-transforms@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz#ca1f01fdb84e48c24d7506bb818c961f1da8805d" + integrity sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" lodash "^4.17.13" "@babel/helper-module-transforms@^7.9.0": @@ -377,19 +328,12 @@ "@babel/types" "^7.9.0" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz#b4a1f2561870ce1247ceddb02a3860fa96d72543" - integrity sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg== +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== dependencies: - "@babel/types" "^7.10.1" - -"@babel/helper-optimise-call-expression@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz#f53c4b6783093195b0f69330439908841660c530" - integrity sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg== - dependencies: - "@babel/types" "^7.10.3" + "@babel/types" "^7.10.4" "@babel/helper-optimise-call-expression@^7.8.3": version "7.8.3" @@ -403,20 +347,15 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== -"@babel/helper-plugin-utils@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127" - integrity sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA== - -"@babel/helper-plugin-utils@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz#aac45cccf8bc1873b99a85f34bceef3beb5d3244" - integrity sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g== +"@babel/helper-plugin-utils@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-regex@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96" - integrity sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g== +"@babel/helper-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.4.tgz#59b373daaf3458e5747dece71bbaf45f9676af6d" + integrity sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ== dependencies: lodash "^4.17.13" @@ -427,37 +366,26 @@ dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz#bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432" - integrity sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-wrap-function" "^7.10.1" - "@babel/template" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/helper-remap-async-to-generator@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.3.tgz#18564f8a6748be466970195b876e8bba3bccf442" - integrity sha512-sLB7666ARbJUGDO60ZormmhQOyqMX/shKBXZ7fy937s+3ID8gSrneMvKSSb+8xIM5V7Vn6uNVtOY1vIm26XLtA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-wrap-function" "^7.10.1" - "@babel/template" "^7.10.3" - "@babel/traverse" "^7.10.3" - "@babel/types" "^7.10.3" - -"@babel/helper-replace-supers@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d" - integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.10.1" - "@babel/helper-optimise-call-expression" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" + integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" "@babel/helper-replace-supers@^7.8.6": version "7.9.6" @@ -469,13 +397,13 @@ "@babel/traverse" "^7.9.6" "@babel/types" "^7.9.6" -"@babel/helper-simple-access@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e" - integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw== +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== dependencies: - "@babel/template" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" "@babel/helper-simple-access@^7.8.3": version "7.8.3" @@ -485,12 +413,12 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-split-export-declaration@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f" - integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g== +"@babel/helper-split-export-declaration@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1" + integrity sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg== dependencies: - "@babel/types" "^7.10.1" + "@babel/types" "^7.10.4" "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" @@ -499,39 +427,34 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-validator-identifier@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5" - integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw== - -"@babel/helper-validator-identifier@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz#60d9847f98c4cea1b279e005fdb7c28be5412d15" - integrity sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw== +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== "@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== -"@babel/helper-wrap-function@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9" - integrity sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ== +"@babel/helper-wrap-function@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" + integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== dependencies: - "@babel/helper-function-name" "^7.10.1" - "@babel/template" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helpers@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973" - integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw== +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== dependencies: - "@babel/template" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" "@babel/helpers@^7.9.6": version "7.9.6" @@ -542,21 +465,12 @@ "@babel/traverse" "^7.9.6" "@babel/types" "^7.9.6" -"@babel/highlight@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0" - integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg== - dependencies: - "@babel/helper-validator-identifier" "^7.10.1" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.3.tgz#c633bb34adf07c5c13156692f5922c81ec53f28d" - integrity sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw== +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== dependencies: - "@babel/helper-validator-identifier" "^7.10.3" + "@babel/helper-validator-identifier" "^7.10.4" chalk "^2.0.0" js-tokens "^4.0.0" @@ -569,110 +483,105 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.1.tgz#2e142c27ca58aa2c7b119d09269b702c8bbad28c" - integrity sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg== - -"@babel/parser@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.3.tgz#7e71d892b0d6e7d04a1af4c3c79d72c1f10f5315" - integrity sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA== +"@babel/parser@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64" + integrity sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA== "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q== -"@babel/plugin-proposal-async-generator-functions@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.3.tgz#5a02453d46e5362e2073c7278beab2e53ad7d939" - integrity sha512-WUUWM7YTOudF4jZBAJIW9D7aViYC/Fn0Pln4RIHlQALyno3sXSjqmTA4Zy1TKC2D49RCR8Y/Pn4OIUtEypK3CA== +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz#4b65abb3d9bacc6c657aaa413e56696f9f170fc6" + integrity sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg== dependencies: - "@babel/helper-plugin-utils" "^7.10.3" - "@babel/helper-remap-async-to-generator" "^7.10.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-class-properties@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz#046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01" - integrity sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw== +"@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-dynamic-import@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz#e36979dc1dc3b73f6d6816fc4951da2363488ef0" - integrity sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA== +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" + integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-json-strings@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz#b1e691ee24c651b5a5e32213222b2379734aff09" - integrity sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg== +"@babel/plugin-proposal-json-strings@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" + integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz#02dca21673842ff2fe763ac253777f235e9bbf78" - integrity sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" + integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-numeric-separator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz#a9a38bc34f78bdfd981e791c27c6fdcec478c123" - integrity sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA== +"@babel/plugin-proposal-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" + integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-numeric-separator" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.3.tgz#b8d0d22f70afa34ad84b7a200ff772f9b9fce474" - integrity sha512-ZZh5leCIlH9lni5bU/wB/UcjtcVLgR8gc+FAgW2OOY+m9h1II3ItTO1/cewNUcsIDZSYcSaz/rYVls+Fb0ExVQ== +"@babel/plugin-proposal-object-rest-spread@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz#50129ac216b9a6a55b3853fdd923e74bf553a4c0" + integrity sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA== dependencies: - "@babel/helper-plugin-utils" "^7.10.3" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.10.1" + "@babel/plugin-transform-parameters" "^7.10.4" -"@babel/plugin-proposal-optional-catch-binding@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz#c9f86d99305f9fa531b568ff5ab8c964b8b223d2" - integrity sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA== +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" + integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.3.tgz#9a726f94622b653c0a3a7a59cdce94730f526f7c" - integrity sha512-yyG3n9dJ1vZ6v5sfmIlMMZ8azQoqx/5/nZTSWX1td6L1H1bsjzA8TInDChpafCZiJkeOFzp/PtrfigAQXxI1Ng== +"@babel/plugin-proposal-optional-chaining@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz#750f1255e930a1f82d8cdde45031f81a0d0adff7" + integrity sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.3" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-private-methods@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz#ed85e8058ab0fe309c3f448e5e1b73ca89cdb598" - integrity sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg== +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-unicode-property-regex@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f" - integrity sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ== +"@babel/plugin-proposal-unicode-property-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" + integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.8.8" @@ -689,12 +598,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5" - integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ== +"@babel/plugin-syntax-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" @@ -717,12 +626,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99" - integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg== +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" @@ -745,79 +654,79 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz#8b8733f8c57397b3eaa47ddba8841586dcaef362" - integrity sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ== +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" + integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz#cb5ee3a36f0863c06ead0b409b4cc43a889b295b" - integrity sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA== +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz#e5153eb1a3e028f79194ed8a7a4bf55f862b2062" - integrity sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg== +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" + integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== dependencies: - "@babel/helper-module-imports" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-remap-async-to-generator" "^7.10.1" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" -"@babel/plugin-transform-block-scoped-functions@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz#146856e756d54b20fff14b819456b3e01820b85d" - integrity sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q== +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" + integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz#47092d89ca345811451cd0dc5d91605982705d5e" - integrity sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw== +"@babel/plugin-transform-block-scoping@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz#a670d1364bb5019a621b9ea2001482876d734787" + integrity sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.3.tgz#8d9a656bc3d01f3ff69e1fccb354b0f9d72ac544" - integrity sha512-irEX0ChJLaZVC7FvvRoSIxJlmk0IczFLcwaRXUArBKYHCHbOhe57aG8q3uw/fJsoSXvZhjRX960hyeAGlVBXZw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-define-map" "^7.10.3" - "@babel/helper-function-name" "^7.10.3" - "@babel/helper-optimise-call-expression" "^7.10.3" - "@babel/helper-plugin-utils" "^7.10.3" - "@babel/helper-replace-supers" "^7.10.1" - "@babel/helper-split-export-declaration" "^7.10.1" +"@babel/plugin-transform-classes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" + integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.3.tgz#d3aa6eef67cb967150f76faff20f0abbf553757b" - integrity sha512-GWzhaBOsdbjVFav96drOz7FzrcEW6AP5nax0gLIpstiFaI3LOb2tAg06TimaWU6YKOfUACK3FVrxPJ4GSc5TgA== +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" + integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== dependencies: - "@babel/helper-plugin-utils" "^7.10.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz#abd58e51337815ca3a22a336b85f62b998e71907" - integrity sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA== +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" + integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-dotall-regex@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee" - integrity sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA== +"@babel/plugin-transform-dotall-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" + integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.8.3" @@ -827,262 +736,262 @@ "@babel/helper-create-regexp-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-duplicate-keys@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz#c900a793beb096bc9d4d0a9d0cde19518ffc83b9" - integrity sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA== +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" + integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz#279c3116756a60dd6e6f5e488ba7957db9c59eb3" - integrity sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA== +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" + integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-for-of@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz#ff01119784eb0ee32258e8646157ba2501fcfda5" - integrity sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w== +"@babel/plugin-transform-for-of@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" + integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-function-name@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz#4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d" - integrity sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw== +"@babel/plugin-transform-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" + integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== dependencies: - "@babel/helper-function-name" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz#5794f8da82846b22e4e6631ea1658bce708eb46a" - integrity sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw== +"@babel/plugin-transform-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" + integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz#90347cba31bca6f394b3f7bd95d2bbfd9fce2f39" - integrity sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA== +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" + integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-amd@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz#65950e8e05797ebd2fe532b96e19fc5482a1d52a" - integrity sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw== +"@babel/plugin-transform-modules-amd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz#cb407c68b862e4c1d13a2fc738c7ec5ed75fc520" + integrity sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA== dependencies: - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz#d5ff4b4413ed97ffded99961056e1fb980fb9301" - integrity sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg== +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== dependencies: - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-simple-access" "^7.10.1" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.3.tgz#004ae727b122b7b146b150d50cba5ffbff4ac56b" - integrity sha512-GWXWQMmE1GH4ALc7YXW56BTh/AlzvDWhUNn9ArFF0+Cz5G8esYlVbXfdyHa1xaD1j+GnBoCeoQNlwtZTVdiG/A== +"@babel/plugin-transform-modules-systemjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz#8f576afd943ac2f789b35ded0a6312f929c633f9" + integrity sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ== dependencies: - "@babel/helper-hoist-variables" "^7.10.3" - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.3" + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz#ea080911ffc6eb21840a5197a39ede4ee67b1595" - integrity sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA== +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" + integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== dependencies: - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-named-capturing-groups-regex@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.3.tgz#a4f8444d1c5a46f35834a410285f2c901c007ca6" - integrity sha512-I3EH+RMFyVi8Iy/LekQm948Z4Lz4yKT7rK+vuCAeRm0kTa6Z5W7xuhRxDNJv0FPya/her6AUgrDITb70YHtTvA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" + integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.10.4" -"@babel/plugin-transform-new-target@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz#6ee41a5e648da7632e22b6fb54012e87f612f324" - integrity sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw== +"@babel/plugin-transform-new-target@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" + integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-object-super@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz#2e3016b0adbf262983bf0d5121d676a5ed9c4fde" - integrity sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw== +"@babel/plugin-transform-object-super@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" + integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" -"@babel/plugin-transform-parameters@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz#b25938a3c5fae0354144a720b07b32766f683ddd" - integrity sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg== +"@babel/plugin-transform-parameters@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz#7b4d137c87ea7adc2a0f3ebf53266871daa6fced" + integrity sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ== dependencies: - "@babel/helper-get-function-arity" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-property-literals@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz#cffc7315219230ed81dc53e4625bf86815b6050d" - integrity sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA== +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" + integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-regenerator@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.3.tgz#6ec680f140a5ceefd291c221cb7131f6d7e8cb6d" - integrity sha512-H5kNeW0u8mbk0qa1jVIVTeJJL6/TJ81ltD4oyPx0P499DhMJrTmmIFCmJ3QloGpQG8K9symccB7S7SJpCKLwtw== +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" + integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz#0fc1027312b4d1c3276a57890c8ae3bcc0b64a86" - integrity sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ== +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" + integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-shorthand-properties@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz#e8b54f238a1ccbae482c4dce946180ae7b3143f3" - integrity sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g== +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" + integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-spread@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz#0c6d618a0c4461a274418460a28c9ccf5239a7c8" - integrity sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw== +"@babel/plugin-transform-spread@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz#4e2c85ea0d6abaee1b24dcfbbae426fe8d674cff" + integrity sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-sticky-regex@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz#90fc89b7526228bed9842cff3588270a7a393b00" - integrity sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA== +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" + integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-regex" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" -"@babel/plugin-transform-template-literals@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.3.tgz#69d39b3d44b31e7b4864173322565894ce939b25" - integrity sha512-yaBn9OpxQra/bk0/CaA4wr41O0/Whkg6nqjqApcinxM7pro51ojhX6fv1pimAnVjVfDy14K0ULoRL70CA9jWWA== +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz#e6375407b30fcb7fcfdbba3bb98ef3e9d36df7bc" + integrity sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.3" + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz#60c0239b69965d166b80a84de7315c1bc7e0bb0e" - integrity sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g== +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" + integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-escapes@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz#add0f8483dab60570d9e03cecef6c023aa8c9940" - integrity sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw== +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-regex@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz#6b58f2aea7b68df37ac5025d9c88752443a6b43f" - integrity sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw== +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" + integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/polyfill@7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.10.1.tgz#d56d4c8be8dd6ec4dce2649474e9b707089f739f" - integrity sha512-TviueJ4PBW5p48ra8IMtLXVkDucrlOZAIZ+EXqS3Ot4eukHbWiqcn7DcqpA1k5PcKtmJ4Xl9xwdv6yQvvcA+3g== +"@babel/polyfill@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.10.4.tgz#915e5bfe61490ac0199008e35ca9d7d151a8e45a" + integrity sha512-8BYcnVqQ5kMD2HXoHInBH7H1b/uP3KdnwCYXOqFnXqguOyuu443WXusbIUbWEfY3Z0Txk0M1uG/8YuAMhNl6zg== dependencies: core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.3.tgz#3e58c9861bbd93b6a679987c7e4bd365c56c80c9" - integrity sha512-jHaSUgiewTmly88bJtMHbOd1bJf2ocYxb5BWKSDQIP5tmgFuS/n0gl+nhSrYDhT33m0vPxp+rP8oYYgPgMNQlg== - dependencies: - "@babel/compat-data" "^7.10.3" - "@babel/helper-compilation-targets" "^7.10.2" - "@babel/helper-module-imports" "^7.10.3" - "@babel/helper-plugin-utils" "^7.10.3" - "@babel/plugin-proposal-async-generator-functions" "^7.10.3" - "@babel/plugin-proposal-class-properties" "^7.10.1" - "@babel/plugin-proposal-dynamic-import" "^7.10.1" - "@babel/plugin-proposal-json-strings" "^7.10.1" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" - "@babel/plugin-proposal-numeric-separator" "^7.10.1" - "@babel/plugin-proposal-object-rest-spread" "^7.10.3" - "@babel/plugin-proposal-optional-catch-binding" "^7.10.1" - "@babel/plugin-proposal-optional-chaining" "^7.10.3" - "@babel/plugin-proposal-private-methods" "^7.10.1" - "@babel/plugin-proposal-unicode-property-regex" "^7.10.1" +"@babel/preset-env@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.4.tgz#fbf57f9a803afd97f4f32e4f798bb62e4b2bef5f" + integrity sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw== + dependencies: + "@babel/compat-data" "^7.10.4" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.10.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.10.4" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-class-properties" "^7.10.1" + "@babel/plugin-syntax-class-properties" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-syntax-json-strings" "^7.8.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.1" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.10.1" - "@babel/plugin-transform-arrow-functions" "^7.10.1" - "@babel/plugin-transform-async-to-generator" "^7.10.1" - "@babel/plugin-transform-block-scoped-functions" "^7.10.1" - "@babel/plugin-transform-block-scoping" "^7.10.1" - "@babel/plugin-transform-classes" "^7.10.3" - "@babel/plugin-transform-computed-properties" "^7.10.3" - "@babel/plugin-transform-destructuring" "^7.10.1" - "@babel/plugin-transform-dotall-regex" "^7.10.1" - "@babel/plugin-transform-duplicate-keys" "^7.10.1" - "@babel/plugin-transform-exponentiation-operator" "^7.10.1" - "@babel/plugin-transform-for-of" "^7.10.1" - "@babel/plugin-transform-function-name" "^7.10.1" - "@babel/plugin-transform-literals" "^7.10.1" - "@babel/plugin-transform-member-expression-literals" "^7.10.1" - "@babel/plugin-transform-modules-amd" "^7.10.1" - "@babel/plugin-transform-modules-commonjs" "^7.10.1" - "@babel/plugin-transform-modules-systemjs" "^7.10.3" - "@babel/plugin-transform-modules-umd" "^7.10.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.3" - "@babel/plugin-transform-new-target" "^7.10.1" - "@babel/plugin-transform-object-super" "^7.10.1" - "@babel/plugin-transform-parameters" "^7.10.1" - "@babel/plugin-transform-property-literals" "^7.10.1" - "@babel/plugin-transform-regenerator" "^7.10.3" - "@babel/plugin-transform-reserved-words" "^7.10.1" - "@babel/plugin-transform-shorthand-properties" "^7.10.1" - "@babel/plugin-transform-spread" "^7.10.1" - "@babel/plugin-transform-sticky-regex" "^7.10.1" - "@babel/plugin-transform-template-literals" "^7.10.3" - "@babel/plugin-transform-typeof-symbol" "^7.10.1" - "@babel/plugin-transform-unicode-escapes" "^7.10.1" - "@babel/plugin-transform-unicode-regex" "^7.10.1" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.10.4" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.10.3" + "@babel/types" "^7.10.4" browserslist "^4.12.0" core-js-compat "^3.6.2" invariant "^2.2.2" @@ -1100,10 +1009,10 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/register@7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.3.tgz#b49b6603fc8d214cd2f77a6ed2256bd198b5994b" - integrity sha512-s1il0vdd02HCGwV1iocGJEzcbTNouZqMolSXKXFAiTNJSudPas9jdLQwyPPyAJxdNL6KGJ8pwWIOpKmgO/JWqg== +"@babel/register@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.4.tgz#53004ba8b04c4af3cbd84508e03ad150669746e4" + integrity sha512-whHmgGiWNVyTVnYTSawtDWhaeYsc+noeU8Rmi+MPnbGhDYmr5QpEDMrQcIA07D2RUv0BlThPcN89XcHCqq/O4g== dependencies: find-cache-dir "^2.0.0" lodash "^4.17.13" @@ -1118,23 +1027,14 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811" - integrity sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig== +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== dependencies: - "@babel/code-frame" "^7.10.1" - "@babel/parser" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/template@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.3.tgz#4d13bc8e30bf95b0ce9d175d30306f42a2c9a7b8" - integrity sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA== - dependencies: - "@babel/code-frame" "^7.10.3" - "@babel/parser" "^7.10.3" - "@babel/types" "^7.10.3" + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" "@babel/template@^7.8.3", "@babel/template@^7.8.6": version "7.8.6" @@ -1145,32 +1045,17 @@ "@babel/parser" "^7.8.6" "@babel/types" "^7.8.6" -"@babel/traverse@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz#bbcef3031e4152a6c0b50147f4958df54ca0dd27" - integrity sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ== - dependencies: - "@babel/code-frame" "^7.10.1" - "@babel/generator" "^7.10.1" - "@babel/helper-function-name" "^7.10.1" - "@babel/helper-split-export-declaration" "^7.10.1" - "@babel/parser" "^7.10.1" - "@babel/types" "^7.10.1" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/traverse@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.3.tgz#0b01731794aa7b77b214bcd96661f18281155d7e" - integrity sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug== - dependencies: - "@babel/code-frame" "^7.10.3" - "@babel/generator" "^7.10.3" - "@babel/helper-function-name" "^7.10.3" - "@babel/helper-split-export-declaration" "^7.10.1" - "@babel/parser" "^7.10.3" - "@babel/types" "^7.10.3" +"@babel/traverse@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.4.tgz#e642e5395a3b09cc95c8e74a27432b484b697818" + integrity sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" @@ -1190,21 +1075,12 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.1.tgz#6886724d31c8022160a7db895e6731ca33483921" - integrity sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.1" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.3.tgz#6535e3b79fea86a6b09e012ea8528f935099de8e" - integrity sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA== +"@babel/types@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee" + integrity sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg== dependencies: - "@babel/helper-validator-identifier" "^7.10.3" + "@babel/helper-validator-identifier" "^7.10.4" lodash "^4.17.13" to-fast-properties "^2.0.0" From cbe7411fbcd5a017e94c9e291bac48334da636c2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 4 Jul 2020 13:59:37 +0000 Subject: [PATCH 11/23] Update dependency js-big-integer to v3.0.5 --- _benchmark/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_benchmark/package.json b/_benchmark/package.json index 5b903fb..581bc1d 100644 --- a/_benchmark/package.json +++ b/_benchmark/package.json @@ -14,7 +14,7 @@ "biginteger": "1.0.3", "bn.js": "^5.1.1", "eccjs": "0.3.1", - "js-big-integer": "3.0.3", + "js-big-integer": "3.0.5", "jsbi": "^3.1.2", "xorshift.js": "^1.0.5" }, From 1df0751d4824f087fb965678080ad3a29817e200 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 7 Jul 2020 20:06:45 +0000 Subject: [PATCH 12/23] Update dependency np to v6.3.1 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2be2b7e..411cd10 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "esdoc-inject-script-plugin": "1.0.0", "esdoc-inject-style-plugin": "1.0.0", "esdoc-standard-plugin": "1.0.0", - "np": "6.2.5", + "np": "6.3.1", "nyc": "15.1.0" }, "files": [ diff --git a/yarn.lock b/yarn.lock index c24602f..8c6b67d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4639,10 +4639,10 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== -np@6.2.5: - version "6.2.5" - resolved "https://registry.yarnpkg.com/np/-/np-6.2.5.tgz#63eb54905415f04114bfd883cb1f99ee7012cfab" - integrity sha512-oDGzbDFPae7O2fxitPAIHFFu7nfyhp//NZ4fs41IYq/k24IzRWSOFhnVjEBKjZSI3MsaH7gcW3dNy868S8KgyQ== +np@6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/np/-/np-6.3.1.tgz#e859b6d2a0ccf016390655627cb02f8e67f0170b" + integrity sha512-vLCqfM/r/GeJLhdiodeOPzY3ZKuaLb+qLA5M9XXSRuyu513punk2DWtswMha1qCa56CvTQPmxgwEyP93XQlgQg== dependencies: "@samverschueren/stream-to-observable" "^0.3.0" any-observable "^0.5.0" From 9e01767adc09a5c27ebfd5a468f4f7b6a2676a2e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 11 Jul 2020 11:09:00 +0000 Subject: [PATCH 13/23] Update dependency np to v6.3.2 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 411cd10..85768d7 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "esdoc-inject-script-plugin": "1.0.0", "esdoc-inject-style-plugin": "1.0.0", "esdoc-standard-plugin": "1.0.0", - "np": "6.3.1", + "np": "6.3.2", "nyc": "15.1.0" }, "files": [ diff --git a/yarn.lock b/yarn.lock index 8c6b67d..2b4cb15 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4639,10 +4639,10 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== -np@6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/np/-/np-6.3.1.tgz#e859b6d2a0ccf016390655627cb02f8e67f0170b" - integrity sha512-vLCqfM/r/GeJLhdiodeOPzY3ZKuaLb+qLA5M9XXSRuyu513punk2DWtswMha1qCa56CvTQPmxgwEyP93XQlgQg== +np@6.3.2: + version "6.3.2" + resolved "https://registry.yarnpkg.com/np/-/np-6.3.2.tgz#1d7793274ee4cd466af376331a1f3154bf02f6f1" + integrity sha512-8+w+cHLGHM01BfTvIqw2Q61geLPA7HEOeN54jJPQrH/cXHaUWdugKSNV6JiXhpbFKg+fj3JWNKq0d7a/gU0WeQ== dependencies: "@samverschueren/stream-to-observable" "^0.3.0" any-observable "^0.5.0" From 3e93884a63d2f0fa5dd84b974996a0a932f0d9ca Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 14 Jul 2020 18:42:26 +0000 Subject: [PATCH 14/23] Update babel monorepo to v7.10.5 --- package.json | 6 ++-- yarn.lock | 96 +++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 79 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 85768d7..514c0c0 100644 --- a/package.json +++ b/package.json @@ -38,11 +38,11 @@ "@aureooms/js-operator": "1.0.2", "@aureooms/js-random": "2.0.0", "@aureooms/js-string": "0.2.0", - "@babel/cli": "7.10.4", - "@babel/core": "7.10.4", + "@babel/cli": "7.10.5", + "@babel/core": "7.10.5", "@babel/polyfill": "7.10.4", "@babel/preset-env": "7.10.4", - "@babel/register": "7.10.4", + "@babel/register": "7.10.5", "ava": "3.9.0", "coveralls": "3.1.0", "esdoc": "1.1.0", diff --git a/yarn.lock b/yarn.lock index 2b4cb15..5ef33a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,16 +52,16 @@ resolved "https://registry.yarnpkg.com/@aureooms/js-string/-/js-string-0.2.0.tgz#ed5f9216c256ccb43b4c895424239d4c891d87d8" integrity sha1-7V+SFsJWzLQ7TIlUJCOdTIkdh9g= -"@babel/cli@7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.4.tgz#ba38ad6d0b4b772a67b106934b7c33d656031896" - integrity sha512-xX99K4V1BzGJdQANK5cwK+EpF1vP9gvqhn+iWvG+TubCjecplW7RSQimJ2jcCvu6fnK5pY6mZMdu6EWTj32QVA== +"@babel/cli@7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.5.tgz#57df2987c8cf89d0fc7d4b157ec59d7619f1b77a" + integrity sha512-j9H9qSf3kLdM0Ao3aGPbGZ73mEA9XazuupcS6cDGWuiyAcANoguhP0r2Lx32H5JGw4sSSoHG3x/mxVnHgvOoyA== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" fs-readdir-recursive "^1.1.0" glob "^7.0.0" - lodash "^4.17.13" + lodash "^4.17.19" make-dir "^2.1.0" slash "^2.0.0" source-map "^0.5.0" @@ -91,24 +91,24 @@ invariant "^2.2.4" semver "^5.5.0" -"@babel/core@7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.4.tgz#780e8b83e496152f8dd7df63892b2e052bf1d51d" - integrity sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA== +"@babel/core@7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.5.tgz#1f15e2cca8ad9a1d78a38ddba612f5e7cdbbd330" + integrity sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.10.4" - "@babel/helper-module-transforms" "^7.10.4" + "@babel/generator" "^7.10.5" + "@babel/helper-module-transforms" "^7.10.5" "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.10.4" + "@babel/parser" "^7.10.5" "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/traverse" "^7.10.5" + "@babel/types" "^7.10.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" json5 "^2.1.2" - lodash "^4.17.13" + lodash "^4.17.19" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" @@ -145,6 +145,15 @@ lodash "^4.17.13" source-map "^0.5.0" +"@babel/generator@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.5.tgz#1b903554bc8c583ee8d25f1e8969732e6b829a69" + integrity sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig== + dependencies: + "@babel/types" "^7.10.5" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/generator@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" @@ -315,6 +324,19 @@ "@babel/types" "^7.10.4" lodash "^4.17.13" +"@babel/helper-module-transforms@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz#120c271c0b3353673fcdfd8c053db3c544a260d6" + integrity sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + "@babel/helper-module-transforms@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" @@ -488,6 +510,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64" integrity sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA== +"@babel/parser@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b" + integrity sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ== + "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" @@ -1009,13 +1036,13 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/register@7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.4.tgz#53004ba8b04c4af3cbd84508e03ad150669746e4" - integrity sha512-whHmgGiWNVyTVnYTSawtDWhaeYsc+noeU8Rmi+MPnbGhDYmr5QpEDMrQcIA07D2RUv0BlThPcN89XcHCqq/O4g== +"@babel/register@7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.5.tgz#354f3574895f1307f79efe37a51525e52fd38d89" + integrity sha512-eYHdLv43nyvmPn9bfNfrcC4+iYNwdQ8Pxk1MFJuU/U5LpSYl/PH4dFMazCYZDFVi8ueG3shvO+AQfLrxpYulQw== dependencies: find-cache-dir "^2.0.0" - lodash "^4.17.13" + lodash "^4.17.19" make-dir "^2.1.0" pirates "^4.0.0" source-map-support "^0.5.16" @@ -1060,6 +1087,21 @@ globals "^11.1.0" lodash "^4.17.13" +"@babel/traverse@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564" + integrity sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/parser" "^7.10.5" + "@babel/types" "^7.10.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + "@babel/traverse@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" @@ -1084,6 +1126,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15" + integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7" @@ -4285,6 +4336,11 @@ lodash@^4.1.0, lodash@^4.15.0, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.15 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.19: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + log-driver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" From 55623eb8659ecb86e81f228336d63c7f2c40b312 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 14 Jul 2020 21:14:32 +0000 Subject: [PATCH 15/23] Update dependency ava to v3.10.1 --- package.json | 2 +- yarn.lock | 78 +++++++++++++++++++++++++++++----------------------- 2 files changed, 45 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index 514c0c0..76fd54b 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@babel/polyfill": "7.10.4", "@babel/preset-env": "7.10.4", "@babel/register": "7.10.5", - "ava": "3.9.0", + "ava": "3.10.1", "coveralls": "3.1.0", "esdoc": "1.1.0", "esdoc-inject-script-plugin": "1.0.0", diff --git a/yarn.lock b/yarn.lock index 5ef33a6..bc57286 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1303,10 +1303,10 @@ acorn-globals@^1.0.4: dependencies: acorn "^2.1.0" -acorn-walk@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" - integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== +acorn-walk@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== acorn@^2.1.0, acorn@^2.4.0: version "2.7.0" @@ -1539,14 +1539,14 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -ava@3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ava/-/ava-3.9.0.tgz#ac91eac980555fcc6c1b91872ac6923ff4c0ffae" - integrity sha512-EnK5I/AX1U5nF4X1YG3QQYg2+jWnpvMW3z2y096DBvbwITkq9rB7Gu1j5clWcuizAJUlYbvcX6YfP+zkRFgC8Q== +ava@3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/ava/-/ava-3.10.1.tgz#a4e68b1a2bb248fa0d96529d23dd83f57082e944" + integrity sha512-+w86ZHyFHIGCABi7NUrn/WJMyC+fDj0BSIlFNVS45WDKAD5vxbIiDWeclctxOOc2KDPfQD7tFOURSBz0FBLD0A== dependencies: "@concordance/react" "^2.0.0" acorn "^7.3.1" - acorn-walk "^7.1.1" + acorn-walk "^7.2.0" ansi-styles "^4.2.1" arrgv "^1.0.2" arrify "^2.0.1" @@ -1555,11 +1555,11 @@ ava@3.9.0: chokidar "^3.4.0" chunkd "^2.0.1" ci-info "^2.0.0" - ci-parallel-vars "^1.0.0" + ci-parallel-vars "^1.0.1" clean-yaml-object "^0.1.0" cli-cursor "^3.1.0" cli-truncate "^2.1.0" - code-excerpt "^2.1.1" + code-excerpt "^3.0.0" common-path-prefix "^3.0.0" concordance "^5.0.0" convert-source-map "^1.7.0" @@ -1574,7 +1574,7 @@ ava@3.9.0: import-local "^3.0.2" indent-string "^4.0.0" is-error "^2.2.2" - is-plain-object "^3.0.0" + is-plain-object "^3.0.1" is-promise "^4.0.0" lodash "^4.17.15" matcher "^3.0.0" @@ -1598,7 +1598,7 @@ ava@3.9.0: trim-off-newlines "^1.0.1" update-notifier "^4.1.0" write-file-atomic "^3.0.3" - yargs "^15.3.1" + yargs "^15.4.0" aws-sign2@~0.7.0: version "0.7.0" @@ -2034,10 +2034,10 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -ci-parallel-vars@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ci-parallel-vars/-/ci-parallel-vars-1.0.0.tgz#af97729ed1c7381911ca37bcea263d62638701b3" - integrity sha512-u6dx20FBXm+apMi+5x7UVm6EH7BL1gc4XrcnQewjcB7HWRcor/V5qWc3RG2HwpgDJ26gIi2DSEu3B7sXynAw/g== +ci-parallel-vars@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz#e87ff0625ccf9d286985b29b4ada8485ca9ffbc2" + integrity sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg== class-utils@^0.3.5: version "0.3.6" @@ -2125,10 +2125,10 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -code-excerpt@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/code-excerpt/-/code-excerpt-2.1.1.tgz#5fe3057bfbb71a5f300f659ef2cc0a47651ba77c" - integrity sha512-tJLhH3EpFm/1x7heIW0hemXJTUU5EWl2V0EIX558jp05Mt1U6DVryCgkp3l37cxqs+DNbNgxG43SkwJXpQ14Jw== +code-excerpt@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/code-excerpt/-/code-excerpt-3.0.0.tgz#fcfb6748c03dba8431c19f5474747fad3f250f10" + integrity sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw== dependencies: convert-to-spaces "^1.0.1" @@ -3802,12 +3802,10 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-plain-object@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" - integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== - dependencies: - isobject "^4.0.0" +is-plain-object@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" + integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== is-promise@^2.1.0: version "2.2.2" @@ -3890,11 +3888,6 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -6498,7 +6491,7 @@ yaml@^1.7.2: dependencies: "@babel/runtime" "^7.9.2" -yargs-parser@^18.1.1, yargs-parser@^18.1.3: +yargs-parser@^18.1.1, yargs-parser@^18.1.2, yargs-parser@^18.1.3: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== @@ -6506,7 +6499,7 @@ yargs-parser@^18.1.1, yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^15.0.2, yargs@^15.3.1: +yargs@^15.0.2: version "15.3.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== @@ -6522,3 +6515,20 @@ yargs@^15.0.2, yargs@^15.3.1: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^18.1.1" + +yargs@^15.4.0: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" From 8ae527eeefcdb057191a54020385d6d5acb79f7d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 27 Jul 2020 08:08:08 +0000 Subject: [PATCH 16/23] Update dependency ava to v3.11.0 --- package.json | 2 +- yarn.lock | 54 ++++++++++++++++++++++++++-------------------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index 76fd54b..4116fb4 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@babel/polyfill": "7.10.4", "@babel/preset-env": "7.10.4", "@babel/register": "7.10.5", - "ava": "3.10.1", + "ava": "3.11.0", "coveralls": "3.1.0", "esdoc": "1.1.0", "esdoc-inject-script-plugin": "1.0.0", diff --git a/yarn.lock b/yarn.lock index bc57286..990dc83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1539,10 +1539,10 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -ava@3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/ava/-/ava-3.10.1.tgz#a4e68b1a2bb248fa0d96529d23dd83f57082e944" - integrity sha512-+w86ZHyFHIGCABi7NUrn/WJMyC+fDj0BSIlFNVS45WDKAD5vxbIiDWeclctxOOc2KDPfQD7tFOURSBz0FBLD0A== +ava@3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/ava/-/ava-3.11.0.tgz#484f25efa7cf6ec354defd75f19c3cc28fcf0141" + integrity sha512-y5U8BGeSRjs/OypsC4CJxr+L1KtLKU5kUyHr5hcghXn7HNr2f4LE/4gvl0Q5lNkLX1obdRW1oODphNdU/glwmA== dependencies: "@concordance/react" "^2.0.0" acorn "^7.3.1" @@ -1552,7 +1552,7 @@ ava@3.10.1: arrify "^2.0.1" callsites "^3.1.0" chalk "^4.1.0" - chokidar "^3.4.0" + chokidar "^3.4.1" chunkd "^2.0.1" ci-info "^2.0.0" ci-parallel-vars "^1.0.1" @@ -1566,7 +1566,7 @@ ava@3.10.1: currently-unhandled "^0.4.1" debug "^4.1.1" del "^5.1.0" - emittery "^0.7.0" + emittery "^0.7.1" equal-length "^1.0.0" figures "^3.2.0" globby "^11.0.1" @@ -1574,14 +1574,14 @@ ava@3.10.1: import-local "^3.0.2" indent-string "^4.0.0" is-error "^2.2.2" - is-plain-object "^3.0.1" + is-plain-object "^4.1.1" is-promise "^4.0.0" - lodash "^4.17.15" + lodash "^4.17.19" matcher "^3.0.0" md5-hex "^3.0.1" mem "^6.1.0" ms "^2.1.2" - ora "^4.0.4" + ora "^4.0.5" p-map "^4.0.0" picomatch "^2.2.2" pkg-conf "^3.1.0" @@ -1598,7 +1598,7 @@ ava@3.10.1: trim-off-newlines "^1.0.1" update-notifier "^4.1.0" write-file-atomic "^3.0.3" - yargs "^15.4.0" + yargs "^15.4.1" aws-sign2@~0.7.0: version "0.7.0" @@ -2009,10 +2009,10 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" - integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== +chokidar@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" + integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -2611,10 +2611,10 @@ elegant-spinner@^1.0.1: resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= -emittery@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.0.tgz#0f0789ea90e03f3de7865feb806e4f0916d16c93" - integrity sha512-/kshvS+tZaggOPQDLGzXopumRRIzxciGILDlYTGIU+PmqbSfhn4wDVphFPry4H+2TNl2QxLduexPhxcWLULA5A== +emittery@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.1.tgz#c02375a927a40948c0345cc903072597f5270451" + integrity sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ== emoji-regex@^7.0.1: version "7.0.3" @@ -3802,10 +3802,10 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-plain-object@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" - integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== +is-plain-object@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-4.1.1.tgz#1a14d6452cbd50790edc7fdaa0aed5a40a35ebb5" + integrity sha512-5Aw8LLVsDlZsETVMhoMXzqsXwQqr/0vlnBYzIXJbYo2F4yYlhLHs+Ez7Bod7IIQKWkJbJfxrWD7pA1Dw1TKrwA== is-promise@^2.1.0: version "2.2.2" @@ -4890,10 +4890,10 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -ora@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.4.tgz#e8da697cc5b6a47266655bf68e0fb588d29a545d" - integrity sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww== +ora@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.5.tgz#7410b5cc2d99fa637fd5099bbb9f02bfbb5a361e" + integrity sha512-jCDgm9DqvRcNIAEv2wZPrh7E5PcQiDUnbnWbAfu4NGAE2ZNqPFbDixmWldy1YG2QfLeQhuiu6/h5VRrk6cG50w== dependencies: chalk "^3.0.0" cli-cursor "^3.1.0" @@ -6516,7 +6516,7 @@ yargs@^15.0.2: y18n "^4.0.0" yargs-parser "^18.1.1" -yargs@^15.4.0: +yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== From 731a322e575ab58d03d21236a4350cf5f66af481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 30 Jul 2020 12:50:58 +0200 Subject: [PATCH 17/23] :mag: test: Add more generated tests. --- test/generate.py | 75 ++++++----- test/src/integer/arithmetic/add.js | 69 ++++++++++ test/src/integer/arithmetic/addn.js | 67 ++++++++++ test/src/integer/arithmetic/div.js | 34 +++++ test/src/integer/arithmetic/divmod.js | 34 +++++ test/src/integer/arithmetic/divmodn.js | 32 +++++ test/src/integer/arithmetic/divn.js | 32 +++++ test/src/integer/arithmetic/iadd.js | 69 ++++++++++ test/src/integer/arithmetic/iaddn.js | 67 ++++++++++ test/src/integer/arithmetic/idiv.js | 34 +++++ test/src/integer/arithmetic/idivmod.js | 34 +++++ test/src/integer/arithmetic/idivmodn.js | 32 +++++ test/src/integer/arithmetic/idivn.js | 32 +++++ test/src/integer/arithmetic/imod.js | 34 +++++ test/src/integer/arithmetic/imodn.js | 32 +++++ test/src/integer/arithmetic/imul.js | 69 ++++++++++ test/src/integer/arithmetic/imuln.js | 67 ++++++++++ test/src/integer/arithmetic/ipow.js | 167 ++++++++++++++++++++++++ test/src/integer/arithmetic/ipown.js | 167 ++++++++++++++++++++++++ test/src/integer/arithmetic/isub.js | 69 ++++++++++ test/src/integer/arithmetic/isubn.js | 67 ++++++++++ test/src/integer/arithmetic/mod.js | 34 +++++ test/src/integer/arithmetic/modn.js | 32 +++++ test/src/integer/arithmetic/mul.js | 69 ++++++++++ test/src/integer/arithmetic/muln.js | 67 ++++++++++ test/src/integer/arithmetic/pow.js | 167 ++++++++++++++++++++++++ test/src/integer/arithmetic/pown.js | 167 ++++++++++++++++++++++++ test/src/integer/arithmetic/sub.js | 69 ++++++++++ test/src/integer/arithmetic/subn.js | 67 ++++++++++ 29 files changed, 1923 insertions(+), 32 deletions(-) diff --git a/test/generate.py b/test/generate.py index 148a287..ee8e21a 100644 --- a/test/generate.py +++ b/test/generate.py @@ -24,45 +24,51 @@ smallnumbers = sorted([ 1 , 3 , 7 , 9 , 11 , 17 , 22 , 24 , 27 , 29 , 1234 , 5678 ]) +zero = [0] + arithmetic = { 'add' : { - 'numbers' : smallnumbers + hugenumbers , + 'numbers' : zero + smallnumbers + hugenumbers , 'apply' : lambda a,b: (a+b,) , 'str' : '+' } , 'sub' : { - 'numbers' : smallnumbers + hugenumbers , + 'numbers' : zero + smallnumbers + hugenumbers , 'apply' : lambda a,b: (a-b,) , 'str' : '-' } , 'mul' : { - 'numbers' : smallnumbers + hugenumbers , + 'numbers' : zero + smallnumbers + hugenumbers , 'apply' : lambda a,b: (a*b,) , 'str' : '*' } , 'pow' : { - 'numbers' : smallnumbers , + 'left' : zero + smallnumbers + hugenumbers , + 'right' : zero + smallnumbers , 'apply' : lambda a,b: (a**b,) , 'str' : '^' } , 'div' : { - 'numbers' : smallnumbers + hugenumbers , + 'left' : zero + smallnumbers + hugenumbers , + 'right' : smallnumbers + hugenumbers , 'apply' : lambda a,b: (a//b,) , 'str' : '/' } , 'mod' : { - 'numbers' : smallnumbers + hugenumbers , + 'left' : zero + smallnumbers + hugenumbers , + 'right' : smallnumbers + hugenumbers , 'apply' : lambda a,b: (a%b,) , 'str' : '%' } , 'divmod' : { - 'numbers' : smallnumbers + hugenumbers , + 'left' : zero + smallnumbers + hugenumbers , + 'right' : smallnumbers + hugenumbers , 'apply' : lambda a, b: (a // b, a % b) , 'str' : '/%' } , } -def write ( f , numbers , name , t , ispow = False , isn = False , isi = False) : +def write ( f , left, right , name , t , ispow = False , isn = False , isi = False) : outputsize = 2 if 'divmod' in name else 1 @@ -134,9 +140,9 @@ def write ( f , numbers , name , t , ispow = False , isn = False , isi = False) else: LINE = "test( macro , '{}' , '{}' , '{}' ) ;\n" - for a in numbers : + for a in left : - for b in numbers : + for b in right : x = a y = b @@ -144,42 +150,47 @@ def write ( f , numbers , name , t , ispow = False , isn = False , isi = False) if not isn or MIN_NUMBER <= y <= MAX_NUMBER: f.write(LINE.format(x,y,*c)) - x = -a - y = b - c = t( x , y ) - if not isn or MIN_NUMBER <= y <= MAX_NUMBER: - f.write(LINE.format(x,y,*c)) - - if not ispow: - - x = a - y = -b - c = t( x , y ) - if not isn or MIN_NUMBER <= y <= MAX_NUMBER: - f.write(LINE.format(x,y,*c)) - + if a != 0: x = -a - y = -b + y = b c = t( x , y ) if not isn or MIN_NUMBER <= y <= MAX_NUMBER: f.write(LINE.format(x,y,*c)) -def open_and_write ( opname , t , nb , **kwargs ) : + if not ispow: + + if b != 0: + x = a + y = -b + c = t( x , y ) + if not isn or MIN_NUMBER <= y <= MAX_NUMBER: + f.write(LINE.format(x,y,*c)) + + if a != 0: + x = -a + y = -b + c = t( x , y ) + if not isn or MIN_NUMBER <= y <= MAX_NUMBER: + f.write(LINE.format(x,y,*c)) + +def open_and_write ( opname , t , left , right , **kwargs ) : with open( 'test/src/integer/arithmetic/{}.js'.format(opname) , 'w' ) as f : - write( f , nb , opname , t , **kwargs ) + write( f , left , right , opname , t , **kwargs ) for name , op in arithmetic.items(): t = op['apply'] - nb = op['numbers'] + + left = op.get('left', op.get('numbers')) + right = op.get('right', op.get('numbers')) ispow = name == 'pow' # standard op - open_and_write( name , t , nb , ispow = ispow ) + open_and_write( name , t , left , right , ispow = ispow ) # in-place op - open_and_write( 'i' + name , t , nb , isi = True , ispow = ispow ) + open_and_write( 'i' + name , t , left , right , isi = True , ispow = ispow ) # standard op with number arg - open_and_write( name + 'n' , t , nb , isn = True , ispow = ispow ) + open_and_write( name + 'n' , t , left , right , isn = True , ispow = ispow ) # in-place op with number arg - open_and_write( 'i' + name + 'n' , t , nb , isi = True , isn = True , ispow = ispow ) + open_and_write( 'i' + name + 'n' , t , left , right , isi = True , isn = True , ispow = ispow ) diff --git a/test/src/integer/arithmetic/add.js b/test/src/integer/arithmetic/add.js index aa24f33..dd74815 100644 --- a/test/src/integer/arithmetic/add.js +++ b/test/src/integer/arithmetic/add.js @@ -12,6 +12,43 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `add(${A},${B}) = ${C}` ; +test( macro , '0' , '0' , '0' ) ; +test( macro , '0' , '1' , '1' ) ; +test( macro , '0' , '-1' , '-1' ) ; +test( macro , '0' , '3' , '3' ) ; +test( macro , '0' , '-3' , '-3' ) ; +test( macro , '0' , '7' , '7' ) ; +test( macro , '0' , '-7' , '-7' ) ; +test( macro , '0' , '9' , '9' ) ; +test( macro , '0' , '-9' , '-9' ) ; +test( macro , '0' , '11' , '11' ) ; +test( macro , '0' , '-11' , '-11' ) ; +test( macro , '0' , '17' , '17' ) ; +test( macro , '0' , '-17' , '-17' ) ; +test( macro , '0' , '22' , '22' ) ; +test( macro , '0' , '-22' , '-22' ) ; +test( macro , '0' , '24' , '24' ) ; +test( macro , '0' , '-24' , '-24' ) ; +test( macro , '0' , '27' , '27' ) ; +test( macro , '0' , '-27' , '-27' ) ; +test( macro , '0' , '29' , '29' ) ; +test( macro , '0' , '-29' , '-29' ) ; +test( macro , '0' , '1234' , '1234' ) ; +test( macro , '0' , '-1234' , '-1234' ) ; +test( macro , '0' , '5678' , '5678' ) ; +test( macro , '0' , '-5678' , '-5678' ) ; +test( macro , '0' , '94906265' , '94906265' ) ; +test( macro , '0' , '-94906265' , '-94906265' ) ; +test( macro , '0' , '94906266' , '94906266' ) ; +test( macro , '0' , '-94906266' , '-94906266' ) ; +test( macro , '0' , '1073741824' , '1073741824' ) ; +test( macro , '0' , '-1073741824' , '-1073741824' ) ; +test( macro , '0' , '51676101935731' , '51676101935731' ) ; +test( macro , '0' , '-51676101935731' , '-51676101935731' ) ; +test( macro , '0' , '717897987691852588770249' , '717897987691852588770249' ) ; +test( macro , '0' , '-717897987691852588770249' , '-717897987691852588770249' ) ; +test( macro , '1' , '0' , '1' ) ; +test( macro , '-1' , '0' , '-1' ) ; test( macro , '1' , '1' , '2' ) ; test( macro , '-1' , '1' , '0' ) ; test( macro , '1' , '-1' , '0' ) ; @@ -80,6 +117,8 @@ test( macro , '1' , '717897987691852588770249' , '717897987691852588770250' ) ; test( macro , '-1' , '717897987691852588770249' , '717897987691852588770248' ) ; test( macro , '1' , '-717897987691852588770249' , '-717897987691852588770248' ) ; test( macro , '-1' , '-717897987691852588770249' , '-717897987691852588770250' ) ; +test( macro , '3' , '0' , '3' ) ; +test( macro , '-3' , '0' , '-3' ) ; test( macro , '3' , '1' , '4' ) ; test( macro , '-3' , '1' , '-2' ) ; test( macro , '3' , '-1' , '2' ) ; @@ -148,6 +187,8 @@ test( macro , '3' , '717897987691852588770249' , '717897987691852588770252' ) ; test( macro , '-3' , '717897987691852588770249' , '717897987691852588770246' ) ; test( macro , '3' , '-717897987691852588770249' , '-717897987691852588770246' ) ; test( macro , '-3' , '-717897987691852588770249' , '-717897987691852588770252' ) ; +test( macro , '7' , '0' , '7' ) ; +test( macro , '-7' , '0' , '-7' ) ; test( macro , '7' , '1' , '8' ) ; test( macro , '-7' , '1' , '-6' ) ; test( macro , '7' , '-1' , '6' ) ; @@ -216,6 +257,8 @@ test( macro , '7' , '717897987691852588770249' , '717897987691852588770256' ) ; test( macro , '-7' , '717897987691852588770249' , '717897987691852588770242' ) ; test( macro , '7' , '-717897987691852588770249' , '-717897987691852588770242' ) ; test( macro , '-7' , '-717897987691852588770249' , '-717897987691852588770256' ) ; +test( macro , '9' , '0' , '9' ) ; +test( macro , '-9' , '0' , '-9' ) ; test( macro , '9' , '1' , '10' ) ; test( macro , '-9' , '1' , '-8' ) ; test( macro , '9' , '-1' , '8' ) ; @@ -284,6 +327,8 @@ test( macro , '9' , '717897987691852588770249' , '717897987691852588770258' ) ; test( macro , '-9' , '717897987691852588770249' , '717897987691852588770240' ) ; test( macro , '9' , '-717897987691852588770249' , '-717897987691852588770240' ) ; test( macro , '-9' , '-717897987691852588770249' , '-717897987691852588770258' ) ; +test( macro , '11' , '0' , '11' ) ; +test( macro , '-11' , '0' , '-11' ) ; test( macro , '11' , '1' , '12' ) ; test( macro , '-11' , '1' , '-10' ) ; test( macro , '11' , '-1' , '10' ) ; @@ -352,6 +397,8 @@ test( macro , '11' , '717897987691852588770249' , '717897987691852588770260' ) ; test( macro , '-11' , '717897987691852588770249' , '717897987691852588770238' ) ; test( macro , '11' , '-717897987691852588770249' , '-717897987691852588770238' ) ; test( macro , '-11' , '-717897987691852588770249' , '-717897987691852588770260' ) ; +test( macro , '17' , '0' , '17' ) ; +test( macro , '-17' , '0' , '-17' ) ; test( macro , '17' , '1' , '18' ) ; test( macro , '-17' , '1' , '-16' ) ; test( macro , '17' , '-1' , '16' ) ; @@ -420,6 +467,8 @@ test( macro , '17' , '717897987691852588770249' , '717897987691852588770266' ) ; test( macro , '-17' , '717897987691852588770249' , '717897987691852588770232' ) ; test( macro , '17' , '-717897987691852588770249' , '-717897987691852588770232' ) ; test( macro , '-17' , '-717897987691852588770249' , '-717897987691852588770266' ) ; +test( macro , '22' , '0' , '22' ) ; +test( macro , '-22' , '0' , '-22' ) ; test( macro , '22' , '1' , '23' ) ; test( macro , '-22' , '1' , '-21' ) ; test( macro , '22' , '-1' , '21' ) ; @@ -488,6 +537,8 @@ test( macro , '22' , '717897987691852588770249' , '717897987691852588770271' ) ; test( macro , '-22' , '717897987691852588770249' , '717897987691852588770227' ) ; test( macro , '22' , '-717897987691852588770249' , '-717897987691852588770227' ) ; test( macro , '-22' , '-717897987691852588770249' , '-717897987691852588770271' ) ; +test( macro , '24' , '0' , '24' ) ; +test( macro , '-24' , '0' , '-24' ) ; test( macro , '24' , '1' , '25' ) ; test( macro , '-24' , '1' , '-23' ) ; test( macro , '24' , '-1' , '23' ) ; @@ -556,6 +607,8 @@ test( macro , '24' , '717897987691852588770249' , '717897987691852588770273' ) ; test( macro , '-24' , '717897987691852588770249' , '717897987691852588770225' ) ; test( macro , '24' , '-717897987691852588770249' , '-717897987691852588770225' ) ; test( macro , '-24' , '-717897987691852588770249' , '-717897987691852588770273' ) ; +test( macro , '27' , '0' , '27' ) ; +test( macro , '-27' , '0' , '-27' ) ; test( macro , '27' , '1' , '28' ) ; test( macro , '-27' , '1' , '-26' ) ; test( macro , '27' , '-1' , '26' ) ; @@ -624,6 +677,8 @@ test( macro , '27' , '717897987691852588770249' , '717897987691852588770276' ) ; test( macro , '-27' , '717897987691852588770249' , '717897987691852588770222' ) ; test( macro , '27' , '-717897987691852588770249' , '-717897987691852588770222' ) ; test( macro , '-27' , '-717897987691852588770249' , '-717897987691852588770276' ) ; +test( macro , '29' , '0' , '29' ) ; +test( macro , '-29' , '0' , '-29' ) ; test( macro , '29' , '1' , '30' ) ; test( macro , '-29' , '1' , '-28' ) ; test( macro , '29' , '-1' , '28' ) ; @@ -692,6 +747,8 @@ test( macro , '29' , '717897987691852588770249' , '717897987691852588770278' ) ; test( macro , '-29' , '717897987691852588770249' , '717897987691852588770220' ) ; test( macro , '29' , '-717897987691852588770249' , '-717897987691852588770220' ) ; test( macro , '-29' , '-717897987691852588770249' , '-717897987691852588770278' ) ; +test( macro , '1234' , '0' , '1234' ) ; +test( macro , '-1234' , '0' , '-1234' ) ; test( macro , '1234' , '1' , '1235' ) ; test( macro , '-1234' , '1' , '-1233' ) ; test( macro , '1234' , '-1' , '1233' ) ; @@ -760,6 +817,8 @@ test( macro , '1234' , '717897987691852588770249' , '717897987691852588771483' ) test( macro , '-1234' , '717897987691852588770249' , '717897987691852588769015' ) ; test( macro , '1234' , '-717897987691852588770249' , '-717897987691852588769015' ) ; test( macro , '-1234' , '-717897987691852588770249' , '-717897987691852588771483' ) ; +test( macro , '5678' , '0' , '5678' ) ; +test( macro , '-5678' , '0' , '-5678' ) ; test( macro , '5678' , '1' , '5679' ) ; test( macro , '-5678' , '1' , '-5677' ) ; test( macro , '5678' , '-1' , '5677' ) ; @@ -828,6 +887,8 @@ test( macro , '5678' , '717897987691852588770249' , '717897987691852588775927' ) test( macro , '-5678' , '717897987691852588770249' , '717897987691852588764571' ) ; test( macro , '5678' , '-717897987691852588770249' , '-717897987691852588764571' ) ; test( macro , '-5678' , '-717897987691852588770249' , '-717897987691852588775927' ) ; +test( macro , '94906265' , '0' , '94906265' ) ; +test( macro , '-94906265' , '0' , '-94906265' ) ; test( macro , '94906265' , '1' , '94906266' ) ; test( macro , '-94906265' , '1' , '-94906264' ) ; test( macro , '94906265' , '-1' , '94906264' ) ; @@ -896,6 +957,8 @@ test( macro , '94906265' , '717897987691852588770249' , '71789798769185268367651 test( macro , '-94906265' , '717897987691852588770249' , '717897987691852493863984' ) ; test( macro , '94906265' , '-717897987691852588770249' , '-717897987691852493863984' ) ; test( macro , '-94906265' , '-717897987691852588770249' , '-717897987691852683676514' ) ; +test( macro , '94906266' , '0' , '94906266' ) ; +test( macro , '-94906266' , '0' , '-94906266' ) ; test( macro , '94906266' , '1' , '94906267' ) ; test( macro , '-94906266' , '1' , '-94906265' ) ; test( macro , '94906266' , '-1' , '94906265' ) ; @@ -964,6 +1027,8 @@ test( macro , '94906266' , '717897987691852588770249' , '71789798769185268367651 test( macro , '-94906266' , '717897987691852588770249' , '717897987691852493863983' ) ; test( macro , '94906266' , '-717897987691852588770249' , '-717897987691852493863983' ) ; test( macro , '-94906266' , '-717897987691852588770249' , '-717897987691852683676515' ) ; +test( macro , '1073741824' , '0' , '1073741824' ) ; +test( macro , '-1073741824' , '0' , '-1073741824' ) ; test( macro , '1073741824' , '1' , '1073741825' ) ; test( macro , '-1073741824' , '1' , '-1073741823' ) ; test( macro , '1073741824' , '-1' , '1073741823' ) ; @@ -1032,6 +1097,8 @@ test( macro , '1073741824' , '717897987691852588770249' , '717897987691853662512 test( macro , '-1073741824' , '717897987691852588770249' , '717897987691851515028425' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '-717897987691851515028425' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '-717897987691853662512073' ) ; +test( macro , '51676101935731' , '0' , '51676101935731' ) ; +test( macro , '-51676101935731' , '0' , '-51676101935731' ) ; test( macro , '51676101935731' , '1' , '51676101935732' ) ; test( macro , '-51676101935731' , '1' , '-51676101935730' ) ; test( macro , '51676101935731' , '-1' , '51676101935730' ) ; @@ -1100,6 +1167,8 @@ test( macro , '51676101935731' , '717897987691852588770249' , '71789798774352869 test( macro , '-51676101935731' , '717897987691852588770249' , '717897987640176486834518' ) ; test( macro , '51676101935731' , '-717897987691852588770249' , '-717897987640176486834518' ) ; test( macro , '-51676101935731' , '-717897987691852588770249' , '-717897987743528690705980' ) ; +test( macro , '717897987691852588770249' , '0' , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , '0' , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770250' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770248' ) ; test( macro , '717897987691852588770249' , '-1' , '717897987691852588770248' ) ; diff --git a/test/src/integer/arithmetic/addn.js b/test/src/integer/arithmetic/addn.js index eb282c8..5de4de2 100644 --- a/test/src/integer/arithmetic/addn.js +++ b/test/src/integer/arithmetic/addn.js @@ -10,6 +10,41 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `addn(${A},${B}) = ${C}` ; +test( macro , '0' , 0 , '0' ) ; +test( macro , '0' , 1 , '1' ) ; +test( macro , '0' , -1 , '-1' ) ; +test( macro , '0' , 3 , '3' ) ; +test( macro , '0' , -3 , '-3' ) ; +test( macro , '0' , 7 , '7' ) ; +test( macro , '0' , -7 , '-7' ) ; +test( macro , '0' , 9 , '9' ) ; +test( macro , '0' , -9 , '-9' ) ; +test( macro , '0' , 11 , '11' ) ; +test( macro , '0' , -11 , '-11' ) ; +test( macro , '0' , 17 , '17' ) ; +test( macro , '0' , -17 , '-17' ) ; +test( macro , '0' , 22 , '22' ) ; +test( macro , '0' , -22 , '-22' ) ; +test( macro , '0' , 24 , '24' ) ; +test( macro , '0' , -24 , '-24' ) ; +test( macro , '0' , 27 , '27' ) ; +test( macro , '0' , -27 , '-27' ) ; +test( macro , '0' , 29 , '29' ) ; +test( macro , '0' , -29 , '-29' ) ; +test( macro , '0' , 1234 , '1234' ) ; +test( macro , '0' , -1234 , '-1234' ) ; +test( macro , '0' , 5678 , '5678' ) ; +test( macro , '0' , -5678 , '-5678' ) ; +test( macro , '0' , 94906265 , '94906265' ) ; +test( macro , '0' , -94906265 , '-94906265' ) ; +test( macro , '0' , 94906266 , '94906266' ) ; +test( macro , '0' , -94906266 , '-94906266' ) ; +test( macro , '0' , 1073741824 , '1073741824' ) ; +test( macro , '0' , -1073741824 , '-1073741824' ) ; +test( macro , '0' , 51676101935731 , '51676101935731' ) ; +test( macro , '0' , -51676101935731 , '-51676101935731' ) ; +test( macro , '1' , 0 , '1' ) ; +test( macro , '-1' , 0 , '-1' ) ; test( macro , '1' , 1 , '2' ) ; test( macro , '-1' , 1 , '0' ) ; test( macro , '1' , -1 , '0' ) ; @@ -74,6 +109,8 @@ test( macro , '1' , 51676101935731 , '51676101935732' ) ; test( macro , '-1' , 51676101935731 , '51676101935730' ) ; test( macro , '1' , -51676101935731 , '-51676101935730' ) ; test( macro , '-1' , -51676101935731 , '-51676101935732' ) ; +test( macro , '3' , 0 , '3' ) ; +test( macro , '-3' , 0 , '-3' ) ; test( macro , '3' , 1 , '4' ) ; test( macro , '-3' , 1 , '-2' ) ; test( macro , '3' , -1 , '2' ) ; @@ -138,6 +175,8 @@ test( macro , '3' , 51676101935731 , '51676101935734' ) ; test( macro , '-3' , 51676101935731 , '51676101935728' ) ; test( macro , '3' , -51676101935731 , '-51676101935728' ) ; test( macro , '-3' , -51676101935731 , '-51676101935734' ) ; +test( macro , '7' , 0 , '7' ) ; +test( macro , '-7' , 0 , '-7' ) ; test( macro , '7' , 1 , '8' ) ; test( macro , '-7' , 1 , '-6' ) ; test( macro , '7' , -1 , '6' ) ; @@ -202,6 +241,8 @@ test( macro , '7' , 51676101935731 , '51676101935738' ) ; test( macro , '-7' , 51676101935731 , '51676101935724' ) ; test( macro , '7' , -51676101935731 , '-51676101935724' ) ; test( macro , '-7' , -51676101935731 , '-51676101935738' ) ; +test( macro , '9' , 0 , '9' ) ; +test( macro , '-9' , 0 , '-9' ) ; test( macro , '9' , 1 , '10' ) ; test( macro , '-9' , 1 , '-8' ) ; test( macro , '9' , -1 , '8' ) ; @@ -266,6 +307,8 @@ test( macro , '9' , 51676101935731 , '51676101935740' ) ; test( macro , '-9' , 51676101935731 , '51676101935722' ) ; test( macro , '9' , -51676101935731 , '-51676101935722' ) ; test( macro , '-9' , -51676101935731 , '-51676101935740' ) ; +test( macro , '11' , 0 , '11' ) ; +test( macro , '-11' , 0 , '-11' ) ; test( macro , '11' , 1 , '12' ) ; test( macro , '-11' , 1 , '-10' ) ; test( macro , '11' , -1 , '10' ) ; @@ -330,6 +373,8 @@ test( macro , '11' , 51676101935731 , '51676101935742' ) ; test( macro , '-11' , 51676101935731 , '51676101935720' ) ; test( macro , '11' , -51676101935731 , '-51676101935720' ) ; test( macro , '-11' , -51676101935731 , '-51676101935742' ) ; +test( macro , '17' , 0 , '17' ) ; +test( macro , '-17' , 0 , '-17' ) ; test( macro , '17' , 1 , '18' ) ; test( macro , '-17' , 1 , '-16' ) ; test( macro , '17' , -1 , '16' ) ; @@ -394,6 +439,8 @@ test( macro , '17' , 51676101935731 , '51676101935748' ) ; test( macro , '-17' , 51676101935731 , '51676101935714' ) ; test( macro , '17' , -51676101935731 , '-51676101935714' ) ; test( macro , '-17' , -51676101935731 , '-51676101935748' ) ; +test( macro , '22' , 0 , '22' ) ; +test( macro , '-22' , 0 , '-22' ) ; test( macro , '22' , 1 , '23' ) ; test( macro , '-22' , 1 , '-21' ) ; test( macro , '22' , -1 , '21' ) ; @@ -458,6 +505,8 @@ test( macro , '22' , 51676101935731 , '51676101935753' ) ; test( macro , '-22' , 51676101935731 , '51676101935709' ) ; test( macro , '22' , -51676101935731 , '-51676101935709' ) ; test( macro , '-22' , -51676101935731 , '-51676101935753' ) ; +test( macro , '24' , 0 , '24' ) ; +test( macro , '-24' , 0 , '-24' ) ; test( macro , '24' , 1 , '25' ) ; test( macro , '-24' , 1 , '-23' ) ; test( macro , '24' , -1 , '23' ) ; @@ -522,6 +571,8 @@ test( macro , '24' , 51676101935731 , '51676101935755' ) ; test( macro , '-24' , 51676101935731 , '51676101935707' ) ; test( macro , '24' , -51676101935731 , '-51676101935707' ) ; test( macro , '-24' , -51676101935731 , '-51676101935755' ) ; +test( macro , '27' , 0 , '27' ) ; +test( macro , '-27' , 0 , '-27' ) ; test( macro , '27' , 1 , '28' ) ; test( macro , '-27' , 1 , '-26' ) ; test( macro , '27' , -1 , '26' ) ; @@ -586,6 +637,8 @@ test( macro , '27' , 51676101935731 , '51676101935758' ) ; test( macro , '-27' , 51676101935731 , '51676101935704' ) ; test( macro , '27' , -51676101935731 , '-51676101935704' ) ; test( macro , '-27' , -51676101935731 , '-51676101935758' ) ; +test( macro , '29' , 0 , '29' ) ; +test( macro , '-29' , 0 , '-29' ) ; test( macro , '29' , 1 , '30' ) ; test( macro , '-29' , 1 , '-28' ) ; test( macro , '29' , -1 , '28' ) ; @@ -650,6 +703,8 @@ test( macro , '29' , 51676101935731 , '51676101935760' ) ; test( macro , '-29' , 51676101935731 , '51676101935702' ) ; test( macro , '29' , -51676101935731 , '-51676101935702' ) ; test( macro , '-29' , -51676101935731 , '-51676101935760' ) ; +test( macro , '1234' , 0 , '1234' ) ; +test( macro , '-1234' , 0 , '-1234' ) ; test( macro , '1234' , 1 , '1235' ) ; test( macro , '-1234' , 1 , '-1233' ) ; test( macro , '1234' , -1 , '1233' ) ; @@ -714,6 +769,8 @@ test( macro , '1234' , 51676101935731 , '51676101936965' ) ; test( macro , '-1234' , 51676101935731 , '51676101934497' ) ; test( macro , '1234' , -51676101935731 , '-51676101934497' ) ; test( macro , '-1234' , -51676101935731 , '-51676101936965' ) ; +test( macro , '5678' , 0 , '5678' ) ; +test( macro , '-5678' , 0 , '-5678' ) ; test( macro , '5678' , 1 , '5679' ) ; test( macro , '-5678' , 1 , '-5677' ) ; test( macro , '5678' , -1 , '5677' ) ; @@ -778,6 +835,8 @@ test( macro , '5678' , 51676101935731 , '51676101941409' ) ; test( macro , '-5678' , 51676101935731 , '51676101930053' ) ; test( macro , '5678' , -51676101935731 , '-51676101930053' ) ; test( macro , '-5678' , -51676101935731 , '-51676101941409' ) ; +test( macro , '94906265' , 0 , '94906265' ) ; +test( macro , '-94906265' , 0 , '-94906265' ) ; test( macro , '94906265' , 1 , '94906266' ) ; test( macro , '-94906265' , 1 , '-94906264' ) ; test( macro , '94906265' , -1 , '94906264' ) ; @@ -842,6 +901,8 @@ test( macro , '94906265' , 51676101935731 , '51676196841996' ) ; test( macro , '-94906265' , 51676101935731 , '51676007029466' ) ; test( macro , '94906265' , -51676101935731 , '-51676007029466' ) ; test( macro , '-94906265' , -51676101935731 , '-51676196841996' ) ; +test( macro , '94906266' , 0 , '94906266' ) ; +test( macro , '-94906266' , 0 , '-94906266' ) ; test( macro , '94906266' , 1 , '94906267' ) ; test( macro , '-94906266' , 1 , '-94906265' ) ; test( macro , '94906266' , -1 , '94906265' ) ; @@ -906,6 +967,8 @@ test( macro , '94906266' , 51676101935731 , '51676196841997' ) ; test( macro , '-94906266' , 51676101935731 , '51676007029465' ) ; test( macro , '94906266' , -51676101935731 , '-51676007029465' ) ; test( macro , '-94906266' , -51676101935731 , '-51676196841997' ) ; +test( macro , '1073741824' , 0 , '1073741824' ) ; +test( macro , '-1073741824' , 0 , '-1073741824' ) ; test( macro , '1073741824' , 1 , '1073741825' ) ; test( macro , '-1073741824' , 1 , '-1073741823' ) ; test( macro , '1073741824' , -1 , '1073741823' ) ; @@ -970,6 +1033,8 @@ test( macro , '1073741824' , 51676101935731 , '51677175677555' ) ; test( macro , '-1073741824' , 51676101935731 , '51675028193907' ) ; test( macro , '1073741824' , -51676101935731 , '-51675028193907' ) ; test( macro , '-1073741824' , -51676101935731 , '-51677175677555' ) ; +test( macro , '51676101935731' , 0 , '51676101935731' ) ; +test( macro , '-51676101935731' , 0 , '-51676101935731' ) ; test( macro , '51676101935731' , 1 , '51676101935732' ) ; test( macro , '-51676101935731' , 1 , '-51676101935730' ) ; test( macro , '51676101935731' , -1 , '51676101935730' ) ; @@ -1034,6 +1099,8 @@ test( macro , '51676101935731' , 51676101935731 , '103352203871462' ) ; test( macro , '-51676101935731' , 51676101935731 , '0' ) ; test( macro , '51676101935731' , -51676101935731 , '0' ) ; test( macro , '-51676101935731' , -51676101935731 , '-103352203871462' ) ; +test( macro , '717897987691852588770249' , 0 , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , 0 , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , 1 , '717897987691852588770250' ) ; test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770248' ) ; test( macro , '717897987691852588770249' , -1 , '717897987691852588770248' ) ; diff --git a/test/src/integer/arithmetic/div.js b/test/src/integer/arithmetic/div.js index e67e605..f77986d 100644 --- a/test/src/integer/arithmetic/div.js +++ b/test/src/integer/arithmetic/div.js @@ -12,6 +12,40 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `div(${A},${B}) = ${C}` ; +test( macro , '0' , '1' , '0' ) ; +test( macro , '0' , '-1' , '0' ) ; +test( macro , '0' , '3' , '0' ) ; +test( macro , '0' , '-3' , '0' ) ; +test( macro , '0' , '7' , '0' ) ; +test( macro , '0' , '-7' , '0' ) ; +test( macro , '0' , '9' , '0' ) ; +test( macro , '0' , '-9' , '0' ) ; +test( macro , '0' , '11' , '0' ) ; +test( macro , '0' , '-11' , '0' ) ; +test( macro , '0' , '17' , '0' ) ; +test( macro , '0' , '-17' , '0' ) ; +test( macro , '0' , '22' , '0' ) ; +test( macro , '0' , '-22' , '0' ) ; +test( macro , '0' , '24' , '0' ) ; +test( macro , '0' , '-24' , '0' ) ; +test( macro , '0' , '27' , '0' ) ; +test( macro , '0' , '-27' , '0' ) ; +test( macro , '0' , '29' , '0' ) ; +test( macro , '0' , '-29' , '0' ) ; +test( macro , '0' , '1234' , '0' ) ; +test( macro , '0' , '-1234' , '0' ) ; +test( macro , '0' , '5678' , '0' ) ; +test( macro , '0' , '-5678' , '0' ) ; +test( macro , '0' , '94906265' , '0' ) ; +test( macro , '0' , '-94906265' , '0' ) ; +test( macro , '0' , '94906266' , '0' ) ; +test( macro , '0' , '-94906266' , '0' ) ; +test( macro , '0' , '1073741824' , '0' ) ; +test( macro , '0' , '-1073741824' , '0' ) ; +test( macro , '0' , '51676101935731' , '0' ) ; +test( macro , '0' , '-51676101935731' , '0' ) ; +test( macro , '0' , '717897987691852588770249' , '0' ) ; +test( macro , '0' , '-717897987691852588770249' , '0' ) ; test( macro , '1' , '1' , '1' ) ; test( macro , '-1' , '1' , '-1' ) ; test( macro , '1' , '-1' , '-1' ) ; diff --git a/test/src/integer/arithmetic/divmod.js b/test/src/integer/arithmetic/divmod.js index 1bf9ae6..0faa4b1 100644 --- a/test/src/integer/arithmetic/divmod.js +++ b/test/src/integer/arithmetic/divmod.js @@ -13,6 +13,40 @@ function macro ( t , A , B , C , D ) { macro.title = ( _ , A , B , C , D ) => `divmod(${A},${B}) = [${C},${D}]` ; +test( macro , '0' , '1' , '0' , '0' ) ; +test( macro , '0' , '-1' , '0' , '0' ) ; +test( macro , '0' , '3' , '0' , '0' ) ; +test( macro , '0' , '-3' , '0' , '0' ) ; +test( macro , '0' , '7' , '0' , '0' ) ; +test( macro , '0' , '-7' , '0' , '0' ) ; +test( macro , '0' , '9' , '0' , '0' ) ; +test( macro , '0' , '-9' , '0' , '0' ) ; +test( macro , '0' , '11' , '0' , '0' ) ; +test( macro , '0' , '-11' , '0' , '0' ) ; +test( macro , '0' , '17' , '0' , '0' ) ; +test( macro , '0' , '-17' , '0' , '0' ) ; +test( macro , '0' , '22' , '0' , '0' ) ; +test( macro , '0' , '-22' , '0' , '0' ) ; +test( macro , '0' , '24' , '0' , '0' ) ; +test( macro , '0' , '-24' , '0' , '0' ) ; +test( macro , '0' , '27' , '0' , '0' ) ; +test( macro , '0' , '-27' , '0' , '0' ) ; +test( macro , '0' , '29' , '0' , '0' ) ; +test( macro , '0' , '-29' , '0' , '0' ) ; +test( macro , '0' , '1234' , '0' , '0' ) ; +test( macro , '0' , '-1234' , '0' , '0' ) ; +test( macro , '0' , '5678' , '0' , '0' ) ; +test( macro , '0' , '-5678' , '0' , '0' ) ; +test( macro , '0' , '94906265' , '0' , '0' ) ; +test( macro , '0' , '-94906265' , '0' , '0' ) ; +test( macro , '0' , '94906266' , '0' , '0' ) ; +test( macro , '0' , '-94906266' , '0' , '0' ) ; +test( macro , '0' , '1073741824' , '0' , '0' ) ; +test( macro , '0' , '-1073741824' , '0' , '0' ) ; +test( macro , '0' , '51676101935731' , '0' , '0' ) ; +test( macro , '0' , '-51676101935731' , '0' , '0' ) ; +test( macro , '0' , '717897987691852588770249' , '0' , '0' ) ; +test( macro , '0' , '-717897987691852588770249' , '0' , '0' ) ; test( macro , '1' , '1' , '1' , '0' ) ; test( macro , '-1' , '1' , '-1' , '0' ) ; test( macro , '1' , '-1' , '-1' , '0' ) ; diff --git a/test/src/integer/arithmetic/divmodn.js b/test/src/integer/arithmetic/divmodn.js index 8ad08f8..44d41d9 100644 --- a/test/src/integer/arithmetic/divmodn.js +++ b/test/src/integer/arithmetic/divmodn.js @@ -11,6 +11,38 @@ function macro ( t , A , B , C , D ) { macro.title = ( _ , A , B , C , D ) => `divmodn(${A},${B}) = [${C},${D}]` ; +test( macro , '0' , 1 , '0' , '0' ) ; +test( macro , '0' , -1 , '0' , '0' ) ; +test( macro , '0' , 3 , '0' , '0' ) ; +test( macro , '0' , -3 , '0' , '0' ) ; +test( macro , '0' , 7 , '0' , '0' ) ; +test( macro , '0' , -7 , '0' , '0' ) ; +test( macro , '0' , 9 , '0' , '0' ) ; +test( macro , '0' , -9 , '0' , '0' ) ; +test( macro , '0' , 11 , '0' , '0' ) ; +test( macro , '0' , -11 , '0' , '0' ) ; +test( macro , '0' , 17 , '0' , '0' ) ; +test( macro , '0' , -17 , '0' , '0' ) ; +test( macro , '0' , 22 , '0' , '0' ) ; +test( macro , '0' , -22 , '0' , '0' ) ; +test( macro , '0' , 24 , '0' , '0' ) ; +test( macro , '0' , -24 , '0' , '0' ) ; +test( macro , '0' , 27 , '0' , '0' ) ; +test( macro , '0' , -27 , '0' , '0' ) ; +test( macro , '0' , 29 , '0' , '0' ) ; +test( macro , '0' , -29 , '0' , '0' ) ; +test( macro , '0' , 1234 , '0' , '0' ) ; +test( macro , '0' , -1234 , '0' , '0' ) ; +test( macro , '0' , 5678 , '0' , '0' ) ; +test( macro , '0' , -5678 , '0' , '0' ) ; +test( macro , '0' , 94906265 , '0' , '0' ) ; +test( macro , '0' , -94906265 , '0' , '0' ) ; +test( macro , '0' , 94906266 , '0' , '0' ) ; +test( macro , '0' , -94906266 , '0' , '0' ) ; +test( macro , '0' , 1073741824 , '0' , '0' ) ; +test( macro , '0' , -1073741824 , '0' , '0' ) ; +test( macro , '0' , 51676101935731 , '0' , '0' ) ; +test( macro , '0' , -51676101935731 , '0' , '0' ) ; test( macro , '1' , 1 , '1' , '0' ) ; test( macro , '-1' , 1 , '-1' , '0' ) ; test( macro , '1' , -1 , '-1' , '0' ) ; diff --git a/test/src/integer/arithmetic/divn.js b/test/src/integer/arithmetic/divn.js index 97ee48e..2a79924 100644 --- a/test/src/integer/arithmetic/divn.js +++ b/test/src/integer/arithmetic/divn.js @@ -10,6 +10,38 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `divn(${A},${B}) = ${C}` ; +test( macro , '0' , 1 , '0' ) ; +test( macro , '0' , -1 , '0' ) ; +test( macro , '0' , 3 , '0' ) ; +test( macro , '0' , -3 , '0' ) ; +test( macro , '0' , 7 , '0' ) ; +test( macro , '0' , -7 , '0' ) ; +test( macro , '0' , 9 , '0' ) ; +test( macro , '0' , -9 , '0' ) ; +test( macro , '0' , 11 , '0' ) ; +test( macro , '0' , -11 , '0' ) ; +test( macro , '0' , 17 , '0' ) ; +test( macro , '0' , -17 , '0' ) ; +test( macro , '0' , 22 , '0' ) ; +test( macro , '0' , -22 , '0' ) ; +test( macro , '0' , 24 , '0' ) ; +test( macro , '0' , -24 , '0' ) ; +test( macro , '0' , 27 , '0' ) ; +test( macro , '0' , -27 , '0' ) ; +test( macro , '0' , 29 , '0' ) ; +test( macro , '0' , -29 , '0' ) ; +test( macro , '0' , 1234 , '0' ) ; +test( macro , '0' , -1234 , '0' ) ; +test( macro , '0' , 5678 , '0' ) ; +test( macro , '0' , -5678 , '0' ) ; +test( macro , '0' , 94906265 , '0' ) ; +test( macro , '0' , -94906265 , '0' ) ; +test( macro , '0' , 94906266 , '0' ) ; +test( macro , '0' , -94906266 , '0' ) ; +test( macro , '0' , 1073741824 , '0' ) ; +test( macro , '0' , -1073741824 , '0' ) ; +test( macro , '0' , 51676101935731 , '0' ) ; +test( macro , '0' , -51676101935731 , '0' ) ; test( macro , '1' , 1 , '1' ) ; test( macro , '-1' , 1 , '-1' ) ; test( macro , '1' , -1 , '-1' ) ; diff --git a/test/src/integer/arithmetic/iadd.js b/test/src/integer/arithmetic/iadd.js index 14c6ee5..41d48e8 100644 --- a/test/src/integer/arithmetic/iadd.js +++ b/test/src/integer/arithmetic/iadd.js @@ -12,6 +12,43 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `iadd(${A},${B}) = ${C}` ; +test( macro , '0' , '0' , '0' ) ; +test( macro , '0' , '1' , '1' ) ; +test( macro , '0' , '-1' , '-1' ) ; +test( macro , '0' , '3' , '3' ) ; +test( macro , '0' , '-3' , '-3' ) ; +test( macro , '0' , '7' , '7' ) ; +test( macro , '0' , '-7' , '-7' ) ; +test( macro , '0' , '9' , '9' ) ; +test( macro , '0' , '-9' , '-9' ) ; +test( macro , '0' , '11' , '11' ) ; +test( macro , '0' , '-11' , '-11' ) ; +test( macro , '0' , '17' , '17' ) ; +test( macro , '0' , '-17' , '-17' ) ; +test( macro , '0' , '22' , '22' ) ; +test( macro , '0' , '-22' , '-22' ) ; +test( macro , '0' , '24' , '24' ) ; +test( macro , '0' , '-24' , '-24' ) ; +test( macro , '0' , '27' , '27' ) ; +test( macro , '0' , '-27' , '-27' ) ; +test( macro , '0' , '29' , '29' ) ; +test( macro , '0' , '-29' , '-29' ) ; +test( macro , '0' , '1234' , '1234' ) ; +test( macro , '0' , '-1234' , '-1234' ) ; +test( macro , '0' , '5678' , '5678' ) ; +test( macro , '0' , '-5678' , '-5678' ) ; +test( macro , '0' , '94906265' , '94906265' ) ; +test( macro , '0' , '-94906265' , '-94906265' ) ; +test( macro , '0' , '94906266' , '94906266' ) ; +test( macro , '0' , '-94906266' , '-94906266' ) ; +test( macro , '0' , '1073741824' , '1073741824' ) ; +test( macro , '0' , '-1073741824' , '-1073741824' ) ; +test( macro , '0' , '51676101935731' , '51676101935731' ) ; +test( macro , '0' , '-51676101935731' , '-51676101935731' ) ; +test( macro , '0' , '717897987691852588770249' , '717897987691852588770249' ) ; +test( macro , '0' , '-717897987691852588770249' , '-717897987691852588770249' ) ; +test( macro , '1' , '0' , '1' ) ; +test( macro , '-1' , '0' , '-1' ) ; test( macro , '1' , '1' , '2' ) ; test( macro , '-1' , '1' , '0' ) ; test( macro , '1' , '-1' , '0' ) ; @@ -80,6 +117,8 @@ test( macro , '1' , '717897987691852588770249' , '717897987691852588770250' ) ; test( macro , '-1' , '717897987691852588770249' , '717897987691852588770248' ) ; test( macro , '1' , '-717897987691852588770249' , '-717897987691852588770248' ) ; test( macro , '-1' , '-717897987691852588770249' , '-717897987691852588770250' ) ; +test( macro , '3' , '0' , '3' ) ; +test( macro , '-3' , '0' , '-3' ) ; test( macro , '3' , '1' , '4' ) ; test( macro , '-3' , '1' , '-2' ) ; test( macro , '3' , '-1' , '2' ) ; @@ -148,6 +187,8 @@ test( macro , '3' , '717897987691852588770249' , '717897987691852588770252' ) ; test( macro , '-3' , '717897987691852588770249' , '717897987691852588770246' ) ; test( macro , '3' , '-717897987691852588770249' , '-717897987691852588770246' ) ; test( macro , '-3' , '-717897987691852588770249' , '-717897987691852588770252' ) ; +test( macro , '7' , '0' , '7' ) ; +test( macro , '-7' , '0' , '-7' ) ; test( macro , '7' , '1' , '8' ) ; test( macro , '-7' , '1' , '-6' ) ; test( macro , '7' , '-1' , '6' ) ; @@ -216,6 +257,8 @@ test( macro , '7' , '717897987691852588770249' , '717897987691852588770256' ) ; test( macro , '-7' , '717897987691852588770249' , '717897987691852588770242' ) ; test( macro , '7' , '-717897987691852588770249' , '-717897987691852588770242' ) ; test( macro , '-7' , '-717897987691852588770249' , '-717897987691852588770256' ) ; +test( macro , '9' , '0' , '9' ) ; +test( macro , '-9' , '0' , '-9' ) ; test( macro , '9' , '1' , '10' ) ; test( macro , '-9' , '1' , '-8' ) ; test( macro , '9' , '-1' , '8' ) ; @@ -284,6 +327,8 @@ test( macro , '9' , '717897987691852588770249' , '717897987691852588770258' ) ; test( macro , '-9' , '717897987691852588770249' , '717897987691852588770240' ) ; test( macro , '9' , '-717897987691852588770249' , '-717897987691852588770240' ) ; test( macro , '-9' , '-717897987691852588770249' , '-717897987691852588770258' ) ; +test( macro , '11' , '0' , '11' ) ; +test( macro , '-11' , '0' , '-11' ) ; test( macro , '11' , '1' , '12' ) ; test( macro , '-11' , '1' , '-10' ) ; test( macro , '11' , '-1' , '10' ) ; @@ -352,6 +397,8 @@ test( macro , '11' , '717897987691852588770249' , '717897987691852588770260' ) ; test( macro , '-11' , '717897987691852588770249' , '717897987691852588770238' ) ; test( macro , '11' , '-717897987691852588770249' , '-717897987691852588770238' ) ; test( macro , '-11' , '-717897987691852588770249' , '-717897987691852588770260' ) ; +test( macro , '17' , '0' , '17' ) ; +test( macro , '-17' , '0' , '-17' ) ; test( macro , '17' , '1' , '18' ) ; test( macro , '-17' , '1' , '-16' ) ; test( macro , '17' , '-1' , '16' ) ; @@ -420,6 +467,8 @@ test( macro , '17' , '717897987691852588770249' , '717897987691852588770266' ) ; test( macro , '-17' , '717897987691852588770249' , '717897987691852588770232' ) ; test( macro , '17' , '-717897987691852588770249' , '-717897987691852588770232' ) ; test( macro , '-17' , '-717897987691852588770249' , '-717897987691852588770266' ) ; +test( macro , '22' , '0' , '22' ) ; +test( macro , '-22' , '0' , '-22' ) ; test( macro , '22' , '1' , '23' ) ; test( macro , '-22' , '1' , '-21' ) ; test( macro , '22' , '-1' , '21' ) ; @@ -488,6 +537,8 @@ test( macro , '22' , '717897987691852588770249' , '717897987691852588770271' ) ; test( macro , '-22' , '717897987691852588770249' , '717897987691852588770227' ) ; test( macro , '22' , '-717897987691852588770249' , '-717897987691852588770227' ) ; test( macro , '-22' , '-717897987691852588770249' , '-717897987691852588770271' ) ; +test( macro , '24' , '0' , '24' ) ; +test( macro , '-24' , '0' , '-24' ) ; test( macro , '24' , '1' , '25' ) ; test( macro , '-24' , '1' , '-23' ) ; test( macro , '24' , '-1' , '23' ) ; @@ -556,6 +607,8 @@ test( macro , '24' , '717897987691852588770249' , '717897987691852588770273' ) ; test( macro , '-24' , '717897987691852588770249' , '717897987691852588770225' ) ; test( macro , '24' , '-717897987691852588770249' , '-717897987691852588770225' ) ; test( macro , '-24' , '-717897987691852588770249' , '-717897987691852588770273' ) ; +test( macro , '27' , '0' , '27' ) ; +test( macro , '-27' , '0' , '-27' ) ; test( macro , '27' , '1' , '28' ) ; test( macro , '-27' , '1' , '-26' ) ; test( macro , '27' , '-1' , '26' ) ; @@ -624,6 +677,8 @@ test( macro , '27' , '717897987691852588770249' , '717897987691852588770276' ) ; test( macro , '-27' , '717897987691852588770249' , '717897987691852588770222' ) ; test( macro , '27' , '-717897987691852588770249' , '-717897987691852588770222' ) ; test( macro , '-27' , '-717897987691852588770249' , '-717897987691852588770276' ) ; +test( macro , '29' , '0' , '29' ) ; +test( macro , '-29' , '0' , '-29' ) ; test( macro , '29' , '1' , '30' ) ; test( macro , '-29' , '1' , '-28' ) ; test( macro , '29' , '-1' , '28' ) ; @@ -692,6 +747,8 @@ test( macro , '29' , '717897987691852588770249' , '717897987691852588770278' ) ; test( macro , '-29' , '717897987691852588770249' , '717897987691852588770220' ) ; test( macro , '29' , '-717897987691852588770249' , '-717897987691852588770220' ) ; test( macro , '-29' , '-717897987691852588770249' , '-717897987691852588770278' ) ; +test( macro , '1234' , '0' , '1234' ) ; +test( macro , '-1234' , '0' , '-1234' ) ; test( macro , '1234' , '1' , '1235' ) ; test( macro , '-1234' , '1' , '-1233' ) ; test( macro , '1234' , '-1' , '1233' ) ; @@ -760,6 +817,8 @@ test( macro , '1234' , '717897987691852588770249' , '717897987691852588771483' ) test( macro , '-1234' , '717897987691852588770249' , '717897987691852588769015' ) ; test( macro , '1234' , '-717897987691852588770249' , '-717897987691852588769015' ) ; test( macro , '-1234' , '-717897987691852588770249' , '-717897987691852588771483' ) ; +test( macro , '5678' , '0' , '5678' ) ; +test( macro , '-5678' , '0' , '-5678' ) ; test( macro , '5678' , '1' , '5679' ) ; test( macro , '-5678' , '1' , '-5677' ) ; test( macro , '5678' , '-1' , '5677' ) ; @@ -828,6 +887,8 @@ test( macro , '5678' , '717897987691852588770249' , '717897987691852588775927' ) test( macro , '-5678' , '717897987691852588770249' , '717897987691852588764571' ) ; test( macro , '5678' , '-717897987691852588770249' , '-717897987691852588764571' ) ; test( macro , '-5678' , '-717897987691852588770249' , '-717897987691852588775927' ) ; +test( macro , '94906265' , '0' , '94906265' ) ; +test( macro , '-94906265' , '0' , '-94906265' ) ; test( macro , '94906265' , '1' , '94906266' ) ; test( macro , '-94906265' , '1' , '-94906264' ) ; test( macro , '94906265' , '-1' , '94906264' ) ; @@ -896,6 +957,8 @@ test( macro , '94906265' , '717897987691852588770249' , '71789798769185268367651 test( macro , '-94906265' , '717897987691852588770249' , '717897987691852493863984' ) ; test( macro , '94906265' , '-717897987691852588770249' , '-717897987691852493863984' ) ; test( macro , '-94906265' , '-717897987691852588770249' , '-717897987691852683676514' ) ; +test( macro , '94906266' , '0' , '94906266' ) ; +test( macro , '-94906266' , '0' , '-94906266' ) ; test( macro , '94906266' , '1' , '94906267' ) ; test( macro , '-94906266' , '1' , '-94906265' ) ; test( macro , '94906266' , '-1' , '94906265' ) ; @@ -964,6 +1027,8 @@ test( macro , '94906266' , '717897987691852588770249' , '71789798769185268367651 test( macro , '-94906266' , '717897987691852588770249' , '717897987691852493863983' ) ; test( macro , '94906266' , '-717897987691852588770249' , '-717897987691852493863983' ) ; test( macro , '-94906266' , '-717897987691852588770249' , '-717897987691852683676515' ) ; +test( macro , '1073741824' , '0' , '1073741824' ) ; +test( macro , '-1073741824' , '0' , '-1073741824' ) ; test( macro , '1073741824' , '1' , '1073741825' ) ; test( macro , '-1073741824' , '1' , '-1073741823' ) ; test( macro , '1073741824' , '-1' , '1073741823' ) ; @@ -1032,6 +1097,8 @@ test( macro , '1073741824' , '717897987691852588770249' , '717897987691853662512 test( macro , '-1073741824' , '717897987691852588770249' , '717897987691851515028425' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '-717897987691851515028425' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '-717897987691853662512073' ) ; +test( macro , '51676101935731' , '0' , '51676101935731' ) ; +test( macro , '-51676101935731' , '0' , '-51676101935731' ) ; test( macro , '51676101935731' , '1' , '51676101935732' ) ; test( macro , '-51676101935731' , '1' , '-51676101935730' ) ; test( macro , '51676101935731' , '-1' , '51676101935730' ) ; @@ -1100,6 +1167,8 @@ test( macro , '51676101935731' , '717897987691852588770249' , '71789798774352869 test( macro , '-51676101935731' , '717897987691852588770249' , '717897987640176486834518' ) ; test( macro , '51676101935731' , '-717897987691852588770249' , '-717897987640176486834518' ) ; test( macro , '-51676101935731' , '-717897987691852588770249' , '-717897987743528690705980' ) ; +test( macro , '717897987691852588770249' , '0' , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , '0' , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770250' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770248' ) ; test( macro , '717897987691852588770249' , '-1' , '717897987691852588770248' ) ; diff --git a/test/src/integer/arithmetic/iaddn.js b/test/src/integer/arithmetic/iaddn.js index 107faf4..b614755 100644 --- a/test/src/integer/arithmetic/iaddn.js +++ b/test/src/integer/arithmetic/iaddn.js @@ -10,6 +10,41 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `iaddn(${A},${B}) = ${C}` ; +test( macro , '0' , 0 , '0' ) ; +test( macro , '0' , 1 , '1' ) ; +test( macro , '0' , -1 , '-1' ) ; +test( macro , '0' , 3 , '3' ) ; +test( macro , '0' , -3 , '-3' ) ; +test( macro , '0' , 7 , '7' ) ; +test( macro , '0' , -7 , '-7' ) ; +test( macro , '0' , 9 , '9' ) ; +test( macro , '0' , -9 , '-9' ) ; +test( macro , '0' , 11 , '11' ) ; +test( macro , '0' , -11 , '-11' ) ; +test( macro , '0' , 17 , '17' ) ; +test( macro , '0' , -17 , '-17' ) ; +test( macro , '0' , 22 , '22' ) ; +test( macro , '0' , -22 , '-22' ) ; +test( macro , '0' , 24 , '24' ) ; +test( macro , '0' , -24 , '-24' ) ; +test( macro , '0' , 27 , '27' ) ; +test( macro , '0' , -27 , '-27' ) ; +test( macro , '0' , 29 , '29' ) ; +test( macro , '0' , -29 , '-29' ) ; +test( macro , '0' , 1234 , '1234' ) ; +test( macro , '0' , -1234 , '-1234' ) ; +test( macro , '0' , 5678 , '5678' ) ; +test( macro , '0' , -5678 , '-5678' ) ; +test( macro , '0' , 94906265 , '94906265' ) ; +test( macro , '0' , -94906265 , '-94906265' ) ; +test( macro , '0' , 94906266 , '94906266' ) ; +test( macro , '0' , -94906266 , '-94906266' ) ; +test( macro , '0' , 1073741824 , '1073741824' ) ; +test( macro , '0' , -1073741824 , '-1073741824' ) ; +test( macro , '0' , 51676101935731 , '51676101935731' ) ; +test( macro , '0' , -51676101935731 , '-51676101935731' ) ; +test( macro , '1' , 0 , '1' ) ; +test( macro , '-1' , 0 , '-1' ) ; test( macro , '1' , 1 , '2' ) ; test( macro , '-1' , 1 , '0' ) ; test( macro , '1' , -1 , '0' ) ; @@ -74,6 +109,8 @@ test( macro , '1' , 51676101935731 , '51676101935732' ) ; test( macro , '-1' , 51676101935731 , '51676101935730' ) ; test( macro , '1' , -51676101935731 , '-51676101935730' ) ; test( macro , '-1' , -51676101935731 , '-51676101935732' ) ; +test( macro , '3' , 0 , '3' ) ; +test( macro , '-3' , 0 , '-3' ) ; test( macro , '3' , 1 , '4' ) ; test( macro , '-3' , 1 , '-2' ) ; test( macro , '3' , -1 , '2' ) ; @@ -138,6 +175,8 @@ test( macro , '3' , 51676101935731 , '51676101935734' ) ; test( macro , '-3' , 51676101935731 , '51676101935728' ) ; test( macro , '3' , -51676101935731 , '-51676101935728' ) ; test( macro , '-3' , -51676101935731 , '-51676101935734' ) ; +test( macro , '7' , 0 , '7' ) ; +test( macro , '-7' , 0 , '-7' ) ; test( macro , '7' , 1 , '8' ) ; test( macro , '-7' , 1 , '-6' ) ; test( macro , '7' , -1 , '6' ) ; @@ -202,6 +241,8 @@ test( macro , '7' , 51676101935731 , '51676101935738' ) ; test( macro , '-7' , 51676101935731 , '51676101935724' ) ; test( macro , '7' , -51676101935731 , '-51676101935724' ) ; test( macro , '-7' , -51676101935731 , '-51676101935738' ) ; +test( macro , '9' , 0 , '9' ) ; +test( macro , '-9' , 0 , '-9' ) ; test( macro , '9' , 1 , '10' ) ; test( macro , '-9' , 1 , '-8' ) ; test( macro , '9' , -1 , '8' ) ; @@ -266,6 +307,8 @@ test( macro , '9' , 51676101935731 , '51676101935740' ) ; test( macro , '-9' , 51676101935731 , '51676101935722' ) ; test( macro , '9' , -51676101935731 , '-51676101935722' ) ; test( macro , '-9' , -51676101935731 , '-51676101935740' ) ; +test( macro , '11' , 0 , '11' ) ; +test( macro , '-11' , 0 , '-11' ) ; test( macro , '11' , 1 , '12' ) ; test( macro , '-11' , 1 , '-10' ) ; test( macro , '11' , -1 , '10' ) ; @@ -330,6 +373,8 @@ test( macro , '11' , 51676101935731 , '51676101935742' ) ; test( macro , '-11' , 51676101935731 , '51676101935720' ) ; test( macro , '11' , -51676101935731 , '-51676101935720' ) ; test( macro , '-11' , -51676101935731 , '-51676101935742' ) ; +test( macro , '17' , 0 , '17' ) ; +test( macro , '-17' , 0 , '-17' ) ; test( macro , '17' , 1 , '18' ) ; test( macro , '-17' , 1 , '-16' ) ; test( macro , '17' , -1 , '16' ) ; @@ -394,6 +439,8 @@ test( macro , '17' , 51676101935731 , '51676101935748' ) ; test( macro , '-17' , 51676101935731 , '51676101935714' ) ; test( macro , '17' , -51676101935731 , '-51676101935714' ) ; test( macro , '-17' , -51676101935731 , '-51676101935748' ) ; +test( macro , '22' , 0 , '22' ) ; +test( macro , '-22' , 0 , '-22' ) ; test( macro , '22' , 1 , '23' ) ; test( macro , '-22' , 1 , '-21' ) ; test( macro , '22' , -1 , '21' ) ; @@ -458,6 +505,8 @@ test( macro , '22' , 51676101935731 , '51676101935753' ) ; test( macro , '-22' , 51676101935731 , '51676101935709' ) ; test( macro , '22' , -51676101935731 , '-51676101935709' ) ; test( macro , '-22' , -51676101935731 , '-51676101935753' ) ; +test( macro , '24' , 0 , '24' ) ; +test( macro , '-24' , 0 , '-24' ) ; test( macro , '24' , 1 , '25' ) ; test( macro , '-24' , 1 , '-23' ) ; test( macro , '24' , -1 , '23' ) ; @@ -522,6 +571,8 @@ test( macro , '24' , 51676101935731 , '51676101935755' ) ; test( macro , '-24' , 51676101935731 , '51676101935707' ) ; test( macro , '24' , -51676101935731 , '-51676101935707' ) ; test( macro , '-24' , -51676101935731 , '-51676101935755' ) ; +test( macro , '27' , 0 , '27' ) ; +test( macro , '-27' , 0 , '-27' ) ; test( macro , '27' , 1 , '28' ) ; test( macro , '-27' , 1 , '-26' ) ; test( macro , '27' , -1 , '26' ) ; @@ -586,6 +637,8 @@ test( macro , '27' , 51676101935731 , '51676101935758' ) ; test( macro , '-27' , 51676101935731 , '51676101935704' ) ; test( macro , '27' , -51676101935731 , '-51676101935704' ) ; test( macro , '-27' , -51676101935731 , '-51676101935758' ) ; +test( macro , '29' , 0 , '29' ) ; +test( macro , '-29' , 0 , '-29' ) ; test( macro , '29' , 1 , '30' ) ; test( macro , '-29' , 1 , '-28' ) ; test( macro , '29' , -1 , '28' ) ; @@ -650,6 +703,8 @@ test( macro , '29' , 51676101935731 , '51676101935760' ) ; test( macro , '-29' , 51676101935731 , '51676101935702' ) ; test( macro , '29' , -51676101935731 , '-51676101935702' ) ; test( macro , '-29' , -51676101935731 , '-51676101935760' ) ; +test( macro , '1234' , 0 , '1234' ) ; +test( macro , '-1234' , 0 , '-1234' ) ; test( macro , '1234' , 1 , '1235' ) ; test( macro , '-1234' , 1 , '-1233' ) ; test( macro , '1234' , -1 , '1233' ) ; @@ -714,6 +769,8 @@ test( macro , '1234' , 51676101935731 , '51676101936965' ) ; test( macro , '-1234' , 51676101935731 , '51676101934497' ) ; test( macro , '1234' , -51676101935731 , '-51676101934497' ) ; test( macro , '-1234' , -51676101935731 , '-51676101936965' ) ; +test( macro , '5678' , 0 , '5678' ) ; +test( macro , '-5678' , 0 , '-5678' ) ; test( macro , '5678' , 1 , '5679' ) ; test( macro , '-5678' , 1 , '-5677' ) ; test( macro , '5678' , -1 , '5677' ) ; @@ -778,6 +835,8 @@ test( macro , '5678' , 51676101935731 , '51676101941409' ) ; test( macro , '-5678' , 51676101935731 , '51676101930053' ) ; test( macro , '5678' , -51676101935731 , '-51676101930053' ) ; test( macro , '-5678' , -51676101935731 , '-51676101941409' ) ; +test( macro , '94906265' , 0 , '94906265' ) ; +test( macro , '-94906265' , 0 , '-94906265' ) ; test( macro , '94906265' , 1 , '94906266' ) ; test( macro , '-94906265' , 1 , '-94906264' ) ; test( macro , '94906265' , -1 , '94906264' ) ; @@ -842,6 +901,8 @@ test( macro , '94906265' , 51676101935731 , '51676196841996' ) ; test( macro , '-94906265' , 51676101935731 , '51676007029466' ) ; test( macro , '94906265' , -51676101935731 , '-51676007029466' ) ; test( macro , '-94906265' , -51676101935731 , '-51676196841996' ) ; +test( macro , '94906266' , 0 , '94906266' ) ; +test( macro , '-94906266' , 0 , '-94906266' ) ; test( macro , '94906266' , 1 , '94906267' ) ; test( macro , '-94906266' , 1 , '-94906265' ) ; test( macro , '94906266' , -1 , '94906265' ) ; @@ -906,6 +967,8 @@ test( macro , '94906266' , 51676101935731 , '51676196841997' ) ; test( macro , '-94906266' , 51676101935731 , '51676007029465' ) ; test( macro , '94906266' , -51676101935731 , '-51676007029465' ) ; test( macro , '-94906266' , -51676101935731 , '-51676196841997' ) ; +test( macro , '1073741824' , 0 , '1073741824' ) ; +test( macro , '-1073741824' , 0 , '-1073741824' ) ; test( macro , '1073741824' , 1 , '1073741825' ) ; test( macro , '-1073741824' , 1 , '-1073741823' ) ; test( macro , '1073741824' , -1 , '1073741823' ) ; @@ -970,6 +1033,8 @@ test( macro , '1073741824' , 51676101935731 , '51677175677555' ) ; test( macro , '-1073741824' , 51676101935731 , '51675028193907' ) ; test( macro , '1073741824' , -51676101935731 , '-51675028193907' ) ; test( macro , '-1073741824' , -51676101935731 , '-51677175677555' ) ; +test( macro , '51676101935731' , 0 , '51676101935731' ) ; +test( macro , '-51676101935731' , 0 , '-51676101935731' ) ; test( macro , '51676101935731' , 1 , '51676101935732' ) ; test( macro , '-51676101935731' , 1 , '-51676101935730' ) ; test( macro , '51676101935731' , -1 , '51676101935730' ) ; @@ -1034,6 +1099,8 @@ test( macro , '51676101935731' , 51676101935731 , '103352203871462' ) ; test( macro , '-51676101935731' , 51676101935731 , '0' ) ; test( macro , '51676101935731' , -51676101935731 , '0' ) ; test( macro , '-51676101935731' , -51676101935731 , '-103352203871462' ) ; +test( macro , '717897987691852588770249' , 0 , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , 0 , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , 1 , '717897987691852588770250' ) ; test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770248' ) ; test( macro , '717897987691852588770249' , -1 , '717897987691852588770248' ) ; diff --git a/test/src/integer/arithmetic/idiv.js b/test/src/integer/arithmetic/idiv.js index 8d48dd1..d28cacf 100644 --- a/test/src/integer/arithmetic/idiv.js +++ b/test/src/integer/arithmetic/idiv.js @@ -12,6 +12,40 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `idiv(${A},${B}) = ${C}` ; +test( macro , '0' , '1' , '0' ) ; +test( macro , '0' , '-1' , '0' ) ; +test( macro , '0' , '3' , '0' ) ; +test( macro , '0' , '-3' , '0' ) ; +test( macro , '0' , '7' , '0' ) ; +test( macro , '0' , '-7' , '0' ) ; +test( macro , '0' , '9' , '0' ) ; +test( macro , '0' , '-9' , '0' ) ; +test( macro , '0' , '11' , '0' ) ; +test( macro , '0' , '-11' , '0' ) ; +test( macro , '0' , '17' , '0' ) ; +test( macro , '0' , '-17' , '0' ) ; +test( macro , '0' , '22' , '0' ) ; +test( macro , '0' , '-22' , '0' ) ; +test( macro , '0' , '24' , '0' ) ; +test( macro , '0' , '-24' , '0' ) ; +test( macro , '0' , '27' , '0' ) ; +test( macro , '0' , '-27' , '0' ) ; +test( macro , '0' , '29' , '0' ) ; +test( macro , '0' , '-29' , '0' ) ; +test( macro , '0' , '1234' , '0' ) ; +test( macro , '0' , '-1234' , '0' ) ; +test( macro , '0' , '5678' , '0' ) ; +test( macro , '0' , '-5678' , '0' ) ; +test( macro , '0' , '94906265' , '0' ) ; +test( macro , '0' , '-94906265' , '0' ) ; +test( macro , '0' , '94906266' , '0' ) ; +test( macro , '0' , '-94906266' , '0' ) ; +test( macro , '0' , '1073741824' , '0' ) ; +test( macro , '0' , '-1073741824' , '0' ) ; +test( macro , '0' , '51676101935731' , '0' ) ; +test( macro , '0' , '-51676101935731' , '0' ) ; +test( macro , '0' , '717897987691852588770249' , '0' ) ; +test( macro , '0' , '-717897987691852588770249' , '0' ) ; test( macro , '1' , '1' , '1' ) ; test( macro , '-1' , '1' , '-1' ) ; test( macro , '1' , '-1' , '-1' ) ; diff --git a/test/src/integer/arithmetic/idivmod.js b/test/src/integer/arithmetic/idivmod.js index f6ad5a2..9aedd31 100644 --- a/test/src/integer/arithmetic/idivmod.js +++ b/test/src/integer/arithmetic/idivmod.js @@ -13,6 +13,40 @@ function macro ( t , A , B , C , D ) { macro.title = ( _ , A , B , C , D ) => `idivmod(${A},${B}) = [${C},${D}]` ; +test( macro , '0' , '1' , '0' , '0' ) ; +test( macro , '0' , '-1' , '0' , '0' ) ; +test( macro , '0' , '3' , '0' , '0' ) ; +test( macro , '0' , '-3' , '0' , '0' ) ; +test( macro , '0' , '7' , '0' , '0' ) ; +test( macro , '0' , '-7' , '0' , '0' ) ; +test( macro , '0' , '9' , '0' , '0' ) ; +test( macro , '0' , '-9' , '0' , '0' ) ; +test( macro , '0' , '11' , '0' , '0' ) ; +test( macro , '0' , '-11' , '0' , '0' ) ; +test( macro , '0' , '17' , '0' , '0' ) ; +test( macro , '0' , '-17' , '0' , '0' ) ; +test( macro , '0' , '22' , '0' , '0' ) ; +test( macro , '0' , '-22' , '0' , '0' ) ; +test( macro , '0' , '24' , '0' , '0' ) ; +test( macro , '0' , '-24' , '0' , '0' ) ; +test( macro , '0' , '27' , '0' , '0' ) ; +test( macro , '0' , '-27' , '0' , '0' ) ; +test( macro , '0' , '29' , '0' , '0' ) ; +test( macro , '0' , '-29' , '0' , '0' ) ; +test( macro , '0' , '1234' , '0' , '0' ) ; +test( macro , '0' , '-1234' , '0' , '0' ) ; +test( macro , '0' , '5678' , '0' , '0' ) ; +test( macro , '0' , '-5678' , '0' , '0' ) ; +test( macro , '0' , '94906265' , '0' , '0' ) ; +test( macro , '0' , '-94906265' , '0' , '0' ) ; +test( macro , '0' , '94906266' , '0' , '0' ) ; +test( macro , '0' , '-94906266' , '0' , '0' ) ; +test( macro , '0' , '1073741824' , '0' , '0' ) ; +test( macro , '0' , '-1073741824' , '0' , '0' ) ; +test( macro , '0' , '51676101935731' , '0' , '0' ) ; +test( macro , '0' , '-51676101935731' , '0' , '0' ) ; +test( macro , '0' , '717897987691852588770249' , '0' , '0' ) ; +test( macro , '0' , '-717897987691852588770249' , '0' , '0' ) ; test( macro , '1' , '1' , '1' , '0' ) ; test( macro , '-1' , '1' , '-1' , '0' ) ; test( macro , '1' , '-1' , '-1' , '0' ) ; diff --git a/test/src/integer/arithmetic/idivmodn.js b/test/src/integer/arithmetic/idivmodn.js index 0fa47dc..c1b2ee8 100644 --- a/test/src/integer/arithmetic/idivmodn.js +++ b/test/src/integer/arithmetic/idivmodn.js @@ -11,6 +11,38 @@ function macro ( t , A , B , C , D ) { macro.title = ( _ , A , B , C , D ) => `idivmodn(${A},${B}) = [${C},${D}]` ; +test( macro , '0' , 1 , '0' , '0' ) ; +test( macro , '0' , -1 , '0' , '0' ) ; +test( macro , '0' , 3 , '0' , '0' ) ; +test( macro , '0' , -3 , '0' , '0' ) ; +test( macro , '0' , 7 , '0' , '0' ) ; +test( macro , '0' , -7 , '0' , '0' ) ; +test( macro , '0' , 9 , '0' , '0' ) ; +test( macro , '0' , -9 , '0' , '0' ) ; +test( macro , '0' , 11 , '0' , '0' ) ; +test( macro , '0' , -11 , '0' , '0' ) ; +test( macro , '0' , 17 , '0' , '0' ) ; +test( macro , '0' , -17 , '0' , '0' ) ; +test( macro , '0' , 22 , '0' , '0' ) ; +test( macro , '0' , -22 , '0' , '0' ) ; +test( macro , '0' , 24 , '0' , '0' ) ; +test( macro , '0' , -24 , '0' , '0' ) ; +test( macro , '0' , 27 , '0' , '0' ) ; +test( macro , '0' , -27 , '0' , '0' ) ; +test( macro , '0' , 29 , '0' , '0' ) ; +test( macro , '0' , -29 , '0' , '0' ) ; +test( macro , '0' , 1234 , '0' , '0' ) ; +test( macro , '0' , -1234 , '0' , '0' ) ; +test( macro , '0' , 5678 , '0' , '0' ) ; +test( macro , '0' , -5678 , '0' , '0' ) ; +test( macro , '0' , 94906265 , '0' , '0' ) ; +test( macro , '0' , -94906265 , '0' , '0' ) ; +test( macro , '0' , 94906266 , '0' , '0' ) ; +test( macro , '0' , -94906266 , '0' , '0' ) ; +test( macro , '0' , 1073741824 , '0' , '0' ) ; +test( macro , '0' , -1073741824 , '0' , '0' ) ; +test( macro , '0' , 51676101935731 , '0' , '0' ) ; +test( macro , '0' , -51676101935731 , '0' , '0' ) ; test( macro , '1' , 1 , '1' , '0' ) ; test( macro , '-1' , 1 , '-1' , '0' ) ; test( macro , '1' , -1 , '-1' , '0' ) ; diff --git a/test/src/integer/arithmetic/idivn.js b/test/src/integer/arithmetic/idivn.js index d987c4f..6c13ef1 100644 --- a/test/src/integer/arithmetic/idivn.js +++ b/test/src/integer/arithmetic/idivn.js @@ -10,6 +10,38 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `idivn(${A},${B}) = ${C}` ; +test( macro , '0' , 1 , '0' ) ; +test( macro , '0' , -1 , '0' ) ; +test( macro , '0' , 3 , '0' ) ; +test( macro , '0' , -3 , '0' ) ; +test( macro , '0' , 7 , '0' ) ; +test( macro , '0' , -7 , '0' ) ; +test( macro , '0' , 9 , '0' ) ; +test( macro , '0' , -9 , '0' ) ; +test( macro , '0' , 11 , '0' ) ; +test( macro , '0' , -11 , '0' ) ; +test( macro , '0' , 17 , '0' ) ; +test( macro , '0' , -17 , '0' ) ; +test( macro , '0' , 22 , '0' ) ; +test( macro , '0' , -22 , '0' ) ; +test( macro , '0' , 24 , '0' ) ; +test( macro , '0' , -24 , '0' ) ; +test( macro , '0' , 27 , '0' ) ; +test( macro , '0' , -27 , '0' ) ; +test( macro , '0' , 29 , '0' ) ; +test( macro , '0' , -29 , '0' ) ; +test( macro , '0' , 1234 , '0' ) ; +test( macro , '0' , -1234 , '0' ) ; +test( macro , '0' , 5678 , '0' ) ; +test( macro , '0' , -5678 , '0' ) ; +test( macro , '0' , 94906265 , '0' ) ; +test( macro , '0' , -94906265 , '0' ) ; +test( macro , '0' , 94906266 , '0' ) ; +test( macro , '0' , -94906266 , '0' ) ; +test( macro , '0' , 1073741824 , '0' ) ; +test( macro , '0' , -1073741824 , '0' ) ; +test( macro , '0' , 51676101935731 , '0' ) ; +test( macro , '0' , -51676101935731 , '0' ) ; test( macro , '1' , 1 , '1' ) ; test( macro , '-1' , 1 , '-1' ) ; test( macro , '1' , -1 , '-1' ) ; diff --git a/test/src/integer/arithmetic/imod.js b/test/src/integer/arithmetic/imod.js index 6daec58..48cf031 100644 --- a/test/src/integer/arithmetic/imod.js +++ b/test/src/integer/arithmetic/imod.js @@ -12,6 +12,40 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `imod(${A},${B}) = ${C}` ; +test( macro , '0' , '1' , '0' ) ; +test( macro , '0' , '-1' , '0' ) ; +test( macro , '0' , '3' , '0' ) ; +test( macro , '0' , '-3' , '0' ) ; +test( macro , '0' , '7' , '0' ) ; +test( macro , '0' , '-7' , '0' ) ; +test( macro , '0' , '9' , '0' ) ; +test( macro , '0' , '-9' , '0' ) ; +test( macro , '0' , '11' , '0' ) ; +test( macro , '0' , '-11' , '0' ) ; +test( macro , '0' , '17' , '0' ) ; +test( macro , '0' , '-17' , '0' ) ; +test( macro , '0' , '22' , '0' ) ; +test( macro , '0' , '-22' , '0' ) ; +test( macro , '0' , '24' , '0' ) ; +test( macro , '0' , '-24' , '0' ) ; +test( macro , '0' , '27' , '0' ) ; +test( macro , '0' , '-27' , '0' ) ; +test( macro , '0' , '29' , '0' ) ; +test( macro , '0' , '-29' , '0' ) ; +test( macro , '0' , '1234' , '0' ) ; +test( macro , '0' , '-1234' , '0' ) ; +test( macro , '0' , '5678' , '0' ) ; +test( macro , '0' , '-5678' , '0' ) ; +test( macro , '0' , '94906265' , '0' ) ; +test( macro , '0' , '-94906265' , '0' ) ; +test( macro , '0' , '94906266' , '0' ) ; +test( macro , '0' , '-94906266' , '0' ) ; +test( macro , '0' , '1073741824' , '0' ) ; +test( macro , '0' , '-1073741824' , '0' ) ; +test( macro , '0' , '51676101935731' , '0' ) ; +test( macro , '0' , '-51676101935731' , '0' ) ; +test( macro , '0' , '717897987691852588770249' , '0' ) ; +test( macro , '0' , '-717897987691852588770249' , '0' ) ; test( macro , '1' , '1' , '0' ) ; test( macro , '-1' , '1' , '0' ) ; test( macro , '1' , '-1' , '0' ) ; diff --git a/test/src/integer/arithmetic/imodn.js b/test/src/integer/arithmetic/imodn.js index 55ae7e6..7d142af 100644 --- a/test/src/integer/arithmetic/imodn.js +++ b/test/src/integer/arithmetic/imodn.js @@ -10,6 +10,38 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `imodn(${A},${B}) = ${C}` ; +test( macro , '0' , 1 , '0' ) ; +test( macro , '0' , -1 , '0' ) ; +test( macro , '0' , 3 , '0' ) ; +test( macro , '0' , -3 , '0' ) ; +test( macro , '0' , 7 , '0' ) ; +test( macro , '0' , -7 , '0' ) ; +test( macro , '0' , 9 , '0' ) ; +test( macro , '0' , -9 , '0' ) ; +test( macro , '0' , 11 , '0' ) ; +test( macro , '0' , -11 , '0' ) ; +test( macro , '0' , 17 , '0' ) ; +test( macro , '0' , -17 , '0' ) ; +test( macro , '0' , 22 , '0' ) ; +test( macro , '0' , -22 , '0' ) ; +test( macro , '0' , 24 , '0' ) ; +test( macro , '0' , -24 , '0' ) ; +test( macro , '0' , 27 , '0' ) ; +test( macro , '0' , -27 , '0' ) ; +test( macro , '0' , 29 , '0' ) ; +test( macro , '0' , -29 , '0' ) ; +test( macro , '0' , 1234 , '0' ) ; +test( macro , '0' , -1234 , '0' ) ; +test( macro , '0' , 5678 , '0' ) ; +test( macro , '0' , -5678 , '0' ) ; +test( macro , '0' , 94906265 , '0' ) ; +test( macro , '0' , -94906265 , '0' ) ; +test( macro , '0' , 94906266 , '0' ) ; +test( macro , '0' , -94906266 , '0' ) ; +test( macro , '0' , 1073741824 , '0' ) ; +test( macro , '0' , -1073741824 , '0' ) ; +test( macro , '0' , 51676101935731 , '0' ) ; +test( macro , '0' , -51676101935731 , '0' ) ; test( macro , '1' , 1 , '0' ) ; test( macro , '-1' , 1 , '0' ) ; test( macro , '1' , -1 , '0' ) ; diff --git a/test/src/integer/arithmetic/imul.js b/test/src/integer/arithmetic/imul.js index f8b8b83..4ea3cd4 100644 --- a/test/src/integer/arithmetic/imul.js +++ b/test/src/integer/arithmetic/imul.js @@ -12,6 +12,43 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `imul(${A},${B}) = ${C}` ; +test( macro , '0' , '0' , '0' ) ; +test( macro , '0' , '1' , '0' ) ; +test( macro , '0' , '-1' , '0' ) ; +test( macro , '0' , '3' , '0' ) ; +test( macro , '0' , '-3' , '0' ) ; +test( macro , '0' , '7' , '0' ) ; +test( macro , '0' , '-7' , '0' ) ; +test( macro , '0' , '9' , '0' ) ; +test( macro , '0' , '-9' , '0' ) ; +test( macro , '0' , '11' , '0' ) ; +test( macro , '0' , '-11' , '0' ) ; +test( macro , '0' , '17' , '0' ) ; +test( macro , '0' , '-17' , '0' ) ; +test( macro , '0' , '22' , '0' ) ; +test( macro , '0' , '-22' , '0' ) ; +test( macro , '0' , '24' , '0' ) ; +test( macro , '0' , '-24' , '0' ) ; +test( macro , '0' , '27' , '0' ) ; +test( macro , '0' , '-27' , '0' ) ; +test( macro , '0' , '29' , '0' ) ; +test( macro , '0' , '-29' , '0' ) ; +test( macro , '0' , '1234' , '0' ) ; +test( macro , '0' , '-1234' , '0' ) ; +test( macro , '0' , '5678' , '0' ) ; +test( macro , '0' , '-5678' , '0' ) ; +test( macro , '0' , '94906265' , '0' ) ; +test( macro , '0' , '-94906265' , '0' ) ; +test( macro , '0' , '94906266' , '0' ) ; +test( macro , '0' , '-94906266' , '0' ) ; +test( macro , '0' , '1073741824' , '0' ) ; +test( macro , '0' , '-1073741824' , '0' ) ; +test( macro , '0' , '51676101935731' , '0' ) ; +test( macro , '0' , '-51676101935731' , '0' ) ; +test( macro , '0' , '717897987691852588770249' , '0' ) ; +test( macro , '0' , '-717897987691852588770249' , '0' ) ; +test( macro , '1' , '0' , '0' ) ; +test( macro , '-1' , '0' , '0' ) ; test( macro , '1' , '1' , '1' ) ; test( macro , '-1' , '1' , '-1' ) ; test( macro , '1' , '-1' , '-1' ) ; @@ -80,6 +117,8 @@ test( macro , '1' , '717897987691852588770249' , '717897987691852588770249' ) ; test( macro , '-1' , '717897987691852588770249' , '-717897987691852588770249' ) ; test( macro , '1' , '-717897987691852588770249' , '-717897987691852588770249' ) ; test( macro , '-1' , '-717897987691852588770249' , '717897987691852588770249' ) ; +test( macro , '3' , '0' , '0' ) ; +test( macro , '-3' , '0' , '0' ) ; test( macro , '3' , '1' , '3' ) ; test( macro , '-3' , '1' , '-3' ) ; test( macro , '3' , '-1' , '-3' ) ; @@ -148,6 +187,8 @@ test( macro , '3' , '717897987691852588770249' , '2153693963075557766310747' ) ; test( macro , '-3' , '717897987691852588770249' , '-2153693963075557766310747' ) ; test( macro , '3' , '-717897987691852588770249' , '-2153693963075557766310747' ) ; test( macro , '-3' , '-717897987691852588770249' , '2153693963075557766310747' ) ; +test( macro , '7' , '0' , '0' ) ; +test( macro , '-7' , '0' , '0' ) ; test( macro , '7' , '1' , '7' ) ; test( macro , '-7' , '1' , '-7' ) ; test( macro , '7' , '-1' , '-7' ) ; @@ -216,6 +257,8 @@ test( macro , '7' , '717897987691852588770249' , '5025285913842968121391743' ) ; test( macro , '-7' , '717897987691852588770249' , '-5025285913842968121391743' ) ; test( macro , '7' , '-717897987691852588770249' , '-5025285913842968121391743' ) ; test( macro , '-7' , '-717897987691852588770249' , '5025285913842968121391743' ) ; +test( macro , '9' , '0' , '0' ) ; +test( macro , '-9' , '0' , '0' ) ; test( macro , '9' , '1' , '9' ) ; test( macro , '-9' , '1' , '-9' ) ; test( macro , '9' , '-1' , '-9' ) ; @@ -284,6 +327,8 @@ test( macro , '9' , '717897987691852588770249' , '6461081889226673298932241' ) ; test( macro , '-9' , '717897987691852588770249' , '-6461081889226673298932241' ) ; test( macro , '9' , '-717897987691852588770249' , '-6461081889226673298932241' ) ; test( macro , '-9' , '-717897987691852588770249' , '6461081889226673298932241' ) ; +test( macro , '11' , '0' , '0' ) ; +test( macro , '-11' , '0' , '0' ) ; test( macro , '11' , '1' , '11' ) ; test( macro , '-11' , '1' , '-11' ) ; test( macro , '11' , '-1' , '-11' ) ; @@ -352,6 +397,8 @@ test( macro , '11' , '717897987691852588770249' , '7896877864610378476472739' ) test( macro , '-11' , '717897987691852588770249' , '-7896877864610378476472739' ) ; test( macro , '11' , '-717897987691852588770249' , '-7896877864610378476472739' ) ; test( macro , '-11' , '-717897987691852588770249' , '7896877864610378476472739' ) ; +test( macro , '17' , '0' , '0' ) ; +test( macro , '-17' , '0' , '0' ) ; test( macro , '17' , '1' , '17' ) ; test( macro , '-17' , '1' , '-17' ) ; test( macro , '17' , '-1' , '-17' ) ; @@ -420,6 +467,8 @@ test( macro , '17' , '717897987691852588770249' , '12204265790761494009094233' ) test( macro , '-17' , '717897987691852588770249' , '-12204265790761494009094233' ) ; test( macro , '17' , '-717897987691852588770249' , '-12204265790761494009094233' ) ; test( macro , '-17' , '-717897987691852588770249' , '12204265790761494009094233' ) ; +test( macro , '22' , '0' , '0' ) ; +test( macro , '-22' , '0' , '0' ) ; test( macro , '22' , '1' , '22' ) ; test( macro , '-22' , '1' , '-22' ) ; test( macro , '22' , '-1' , '-22' ) ; @@ -488,6 +537,8 @@ test( macro , '22' , '717897987691852588770249' , '15793755729220756952945478' ) test( macro , '-22' , '717897987691852588770249' , '-15793755729220756952945478' ) ; test( macro , '22' , '-717897987691852588770249' , '-15793755729220756952945478' ) ; test( macro , '-22' , '-717897987691852588770249' , '15793755729220756952945478' ) ; +test( macro , '24' , '0' , '0' ) ; +test( macro , '-24' , '0' , '0' ) ; test( macro , '24' , '1' , '24' ) ; test( macro , '-24' , '1' , '-24' ) ; test( macro , '24' , '-1' , '-24' ) ; @@ -556,6 +607,8 @@ test( macro , '24' , '717897987691852588770249' , '17229551704604462130485976' ) test( macro , '-24' , '717897987691852588770249' , '-17229551704604462130485976' ) ; test( macro , '24' , '-717897987691852588770249' , '-17229551704604462130485976' ) ; test( macro , '-24' , '-717897987691852588770249' , '17229551704604462130485976' ) ; +test( macro , '27' , '0' , '0' ) ; +test( macro , '-27' , '0' , '0' ) ; test( macro , '27' , '1' , '27' ) ; test( macro , '-27' , '1' , '-27' ) ; test( macro , '27' , '-1' , '-27' ) ; @@ -624,6 +677,8 @@ test( macro , '27' , '717897987691852588770249' , '19383245667680019896796723' ) test( macro , '-27' , '717897987691852588770249' , '-19383245667680019896796723' ) ; test( macro , '27' , '-717897987691852588770249' , '-19383245667680019896796723' ) ; test( macro , '-27' , '-717897987691852588770249' , '19383245667680019896796723' ) ; +test( macro , '29' , '0' , '0' ) ; +test( macro , '-29' , '0' , '0' ) ; test( macro , '29' , '1' , '29' ) ; test( macro , '-29' , '1' , '-29' ) ; test( macro , '29' , '-1' , '-29' ) ; @@ -692,6 +747,8 @@ test( macro , '29' , '717897987691852588770249' , '20819041643063725074337221' ) test( macro , '-29' , '717897987691852588770249' , '-20819041643063725074337221' ) ; test( macro , '29' , '-717897987691852588770249' , '-20819041643063725074337221' ) ; test( macro , '-29' , '-717897987691852588770249' , '20819041643063725074337221' ) ; +test( macro , '1234' , '0' , '0' ) ; +test( macro , '-1234' , '0' , '0' ) ; test( macro , '1234' , '1' , '1234' ) ; test( macro , '-1234' , '1' , '-1234' ) ; test( macro , '1234' , '-1' , '-1234' ) ; @@ -760,6 +817,8 @@ test( macro , '1234' , '717897987691852588770249' , '885886116811746094542487266 test( macro , '-1234' , '717897987691852588770249' , '-885886116811746094542487266' ) ; test( macro , '1234' , '-717897987691852588770249' , '-885886116811746094542487266' ) ; test( macro , '-1234' , '-717897987691852588770249' , '885886116811746094542487266' ) ; +test( macro , '5678' , '0' , '0' ) ; +test( macro , '-5678' , '0' , '0' ) ; test( macro , '5678' , '1' , '5678' ) ; test( macro , '-5678' , '1' , '-5678' ) ; test( macro , '5678' , '-1' , '-5678' ) ; @@ -828,6 +887,8 @@ test( macro , '5678' , '717897987691852588770249' , '407622477411433899903747382 test( macro , '-5678' , '717897987691852588770249' , '-4076224774114338999037473822' ) ; test( macro , '5678' , '-717897987691852588770249' , '-4076224774114338999037473822' ) ; test( macro , '-5678' , '-717897987691852588770249' , '4076224774114338999037473822' ) ; +test( macro , '94906265' , '0' , '0' ) ; +test( macro , '-94906265' , '0' , '0' ) ; test( macro , '94906265' , '1' , '94906265' ) ; test( macro , '-94906265' , '1' , '-94906265' ) ; test( macro , '94906265' , '-1' , '-94906265' ) ; @@ -896,6 +957,8 @@ test( macro , '94906265' , '717897987691852588770249' , '68133016662849700130765 test( macro , '-94906265' , '717897987691852588770249' , '-68133016662849700130765275709985' ) ; test( macro , '94906265' , '-717897987691852588770249' , '-68133016662849700130765275709985' ) ; test( macro , '-94906265' , '-717897987691852588770249' , '68133016662849700130765275709985' ) ; +test( macro , '94906266' , '0' , '0' ) ; +test( macro , '-94906266' , '0' , '0' ) ; test( macro , '94906266' , '1' , '94906266' ) ; test( macro , '-94906266' , '1' , '-94906266' ) ; test( macro , '94906266' , '-1' , '-94906266' ) ; @@ -964,6 +1027,8 @@ test( macro , '94906266' , '717897987691852588770249' , '68133017380747687822617 test( macro , '-94906266' , '717897987691852588770249' , '-68133017380747687822617864480234' ) ; test( macro , '94906266' , '-717897987691852588770249' , '-68133017380747687822617864480234' ) ; test( macro , '-94906266' , '-717897987691852588770249' , '68133017380747687822617864480234' ) ; +test( macro , '1073741824' , '0' , '0' ) ; +test( macro , '-1073741824' , '0' , '0' ) ; test( macro , '1073741824' , '1' , '1073741824' ) ; test( macro , '-1073741824' , '1' , '-1073741824' ) ; test( macro , '1073741824' , '-1' , '-1073741824' ) ; @@ -1032,6 +1097,8 @@ test( macro , '1073741824' , '717897987691852588770249' , '770837094750179348605 test( macro , '-1073741824' , '717897987691852588770249' , '-770837094750179348605289078194176' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '-770837094750179348605289078194176' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '770837094750179348605289078194176' ) ; +test( macro , '51676101935731' , '0' , '0' ) ; +test( macro , '-51676101935731' , '0' , '0' ) ; test( macro , '51676101935731' , '1' , '51676101935731' ) ; test( macro , '-51676101935731' , '1' , '-51676101935731' ) ; test( macro , '51676101935731' , '-1' , '-51676101935731' ) ; @@ -1100,6 +1167,8 @@ test( macro , '51676101935731' , '717897987691852588770249' , '37098169591420333 test( macro , '-51676101935731' , '717897987691852588770249' , '-37098169591420333175287767861722867019' ) ; test( macro , '51676101935731' , '-717897987691852588770249' , '-37098169591420333175287767861722867019' ) ; test( macro , '-51676101935731' , '-717897987691852588770249' , '37098169591420333175287767861722867019' ) ; +test( macro , '717897987691852588770249' , '0' , '0' ) ; +test( macro , '-717897987691852588770249' , '0' , '0' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770249' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , '-1' , '-717897987691852588770249' ) ; diff --git a/test/src/integer/arithmetic/imuln.js b/test/src/integer/arithmetic/imuln.js index 1a962e7..cdcbc4c 100644 --- a/test/src/integer/arithmetic/imuln.js +++ b/test/src/integer/arithmetic/imuln.js @@ -10,6 +10,41 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `imuln(${A},${B}) = ${C}` ; +test( macro , '0' , 0 , '0' ) ; +test( macro , '0' , 1 , '0' ) ; +test( macro , '0' , -1 , '0' ) ; +test( macro , '0' , 3 , '0' ) ; +test( macro , '0' , -3 , '0' ) ; +test( macro , '0' , 7 , '0' ) ; +test( macro , '0' , -7 , '0' ) ; +test( macro , '0' , 9 , '0' ) ; +test( macro , '0' , -9 , '0' ) ; +test( macro , '0' , 11 , '0' ) ; +test( macro , '0' , -11 , '0' ) ; +test( macro , '0' , 17 , '0' ) ; +test( macro , '0' , -17 , '0' ) ; +test( macro , '0' , 22 , '0' ) ; +test( macro , '0' , -22 , '0' ) ; +test( macro , '0' , 24 , '0' ) ; +test( macro , '0' , -24 , '0' ) ; +test( macro , '0' , 27 , '0' ) ; +test( macro , '0' , -27 , '0' ) ; +test( macro , '0' , 29 , '0' ) ; +test( macro , '0' , -29 , '0' ) ; +test( macro , '0' , 1234 , '0' ) ; +test( macro , '0' , -1234 , '0' ) ; +test( macro , '0' , 5678 , '0' ) ; +test( macro , '0' , -5678 , '0' ) ; +test( macro , '0' , 94906265 , '0' ) ; +test( macro , '0' , -94906265 , '0' ) ; +test( macro , '0' , 94906266 , '0' ) ; +test( macro , '0' , -94906266 , '0' ) ; +test( macro , '0' , 1073741824 , '0' ) ; +test( macro , '0' , -1073741824 , '0' ) ; +test( macro , '0' , 51676101935731 , '0' ) ; +test( macro , '0' , -51676101935731 , '0' ) ; +test( macro , '1' , 0 , '0' ) ; +test( macro , '-1' , 0 , '0' ) ; test( macro , '1' , 1 , '1' ) ; test( macro , '-1' , 1 , '-1' ) ; test( macro , '1' , -1 , '-1' ) ; @@ -74,6 +109,8 @@ test( macro , '1' , 51676101935731 , '51676101935731' ) ; test( macro , '-1' , 51676101935731 , '-51676101935731' ) ; test( macro , '1' , -51676101935731 , '-51676101935731' ) ; test( macro , '-1' , -51676101935731 , '51676101935731' ) ; +test( macro , '3' , 0 , '0' ) ; +test( macro , '-3' , 0 , '0' ) ; test( macro , '3' , 1 , '3' ) ; test( macro , '-3' , 1 , '-3' ) ; test( macro , '3' , -1 , '-3' ) ; @@ -138,6 +175,8 @@ test( macro , '3' , 51676101935731 , '155028305807193' ) ; test( macro , '-3' , 51676101935731 , '-155028305807193' ) ; test( macro , '3' , -51676101935731 , '-155028305807193' ) ; test( macro , '-3' , -51676101935731 , '155028305807193' ) ; +test( macro , '7' , 0 , '0' ) ; +test( macro , '-7' , 0 , '0' ) ; test( macro , '7' , 1 , '7' ) ; test( macro , '-7' , 1 , '-7' ) ; test( macro , '7' , -1 , '-7' ) ; @@ -202,6 +241,8 @@ test( macro , '7' , 51676101935731 , '361732713550117' ) ; test( macro , '-7' , 51676101935731 , '-361732713550117' ) ; test( macro , '7' , -51676101935731 , '-361732713550117' ) ; test( macro , '-7' , -51676101935731 , '361732713550117' ) ; +test( macro , '9' , 0 , '0' ) ; +test( macro , '-9' , 0 , '0' ) ; test( macro , '9' , 1 , '9' ) ; test( macro , '-9' , 1 , '-9' ) ; test( macro , '9' , -1 , '-9' ) ; @@ -266,6 +307,8 @@ test( macro , '9' , 51676101935731 , '465084917421579' ) ; test( macro , '-9' , 51676101935731 , '-465084917421579' ) ; test( macro , '9' , -51676101935731 , '-465084917421579' ) ; test( macro , '-9' , -51676101935731 , '465084917421579' ) ; +test( macro , '11' , 0 , '0' ) ; +test( macro , '-11' , 0 , '0' ) ; test( macro , '11' , 1 , '11' ) ; test( macro , '-11' , 1 , '-11' ) ; test( macro , '11' , -1 , '-11' ) ; @@ -330,6 +373,8 @@ test( macro , '11' , 51676101935731 , '568437121293041' ) ; test( macro , '-11' , 51676101935731 , '-568437121293041' ) ; test( macro , '11' , -51676101935731 , '-568437121293041' ) ; test( macro , '-11' , -51676101935731 , '568437121293041' ) ; +test( macro , '17' , 0 , '0' ) ; +test( macro , '-17' , 0 , '0' ) ; test( macro , '17' , 1 , '17' ) ; test( macro , '-17' , 1 , '-17' ) ; test( macro , '17' , -1 , '-17' ) ; @@ -394,6 +439,8 @@ test( macro , '17' , 51676101935731 , '878493732907427' ) ; test( macro , '-17' , 51676101935731 , '-878493732907427' ) ; test( macro , '17' , -51676101935731 , '-878493732907427' ) ; test( macro , '-17' , -51676101935731 , '878493732907427' ) ; +test( macro , '22' , 0 , '0' ) ; +test( macro , '-22' , 0 , '0' ) ; test( macro , '22' , 1 , '22' ) ; test( macro , '-22' , 1 , '-22' ) ; test( macro , '22' , -1 , '-22' ) ; @@ -458,6 +505,8 @@ test( macro , '22' , 51676101935731 , '1136874242586082' ) ; test( macro , '-22' , 51676101935731 , '-1136874242586082' ) ; test( macro , '22' , -51676101935731 , '-1136874242586082' ) ; test( macro , '-22' , -51676101935731 , '1136874242586082' ) ; +test( macro , '24' , 0 , '0' ) ; +test( macro , '-24' , 0 , '0' ) ; test( macro , '24' , 1 , '24' ) ; test( macro , '-24' , 1 , '-24' ) ; test( macro , '24' , -1 , '-24' ) ; @@ -522,6 +571,8 @@ test( macro , '24' , 51676101935731 , '1240226446457544' ) ; test( macro , '-24' , 51676101935731 , '-1240226446457544' ) ; test( macro , '24' , -51676101935731 , '-1240226446457544' ) ; test( macro , '-24' , -51676101935731 , '1240226446457544' ) ; +test( macro , '27' , 0 , '0' ) ; +test( macro , '-27' , 0 , '0' ) ; test( macro , '27' , 1 , '27' ) ; test( macro , '-27' , 1 , '-27' ) ; test( macro , '27' , -1 , '-27' ) ; @@ -586,6 +637,8 @@ test( macro , '27' , 51676101935731 , '1395254752264737' ) ; test( macro , '-27' , 51676101935731 , '-1395254752264737' ) ; test( macro , '27' , -51676101935731 , '-1395254752264737' ) ; test( macro , '-27' , -51676101935731 , '1395254752264737' ) ; +test( macro , '29' , 0 , '0' ) ; +test( macro , '-29' , 0 , '0' ) ; test( macro , '29' , 1 , '29' ) ; test( macro , '-29' , 1 , '-29' ) ; test( macro , '29' , -1 , '-29' ) ; @@ -650,6 +703,8 @@ test( macro , '29' , 51676101935731 , '1498606956136199' ) ; test( macro , '-29' , 51676101935731 , '-1498606956136199' ) ; test( macro , '29' , -51676101935731 , '-1498606956136199' ) ; test( macro , '-29' , -51676101935731 , '1498606956136199' ) ; +test( macro , '1234' , 0 , '0' ) ; +test( macro , '-1234' , 0 , '0' ) ; test( macro , '1234' , 1 , '1234' ) ; test( macro , '-1234' , 1 , '-1234' ) ; test( macro , '1234' , -1 , '-1234' ) ; @@ -714,6 +769,8 @@ test( macro , '1234' , 51676101935731 , '63768309788692054' ) ; test( macro , '-1234' , 51676101935731 , '-63768309788692054' ) ; test( macro , '1234' , -51676101935731 , '-63768309788692054' ) ; test( macro , '-1234' , -51676101935731 , '63768309788692054' ) ; +test( macro , '5678' , 0 , '0' ) ; +test( macro , '-5678' , 0 , '0' ) ; test( macro , '5678' , 1 , '5678' ) ; test( macro , '-5678' , 1 , '-5678' ) ; test( macro , '5678' , -1 , '-5678' ) ; @@ -778,6 +835,8 @@ test( macro , '5678' , 51676101935731 , '293416906791080618' ) ; test( macro , '-5678' , 51676101935731 , '-293416906791080618' ) ; test( macro , '5678' , -51676101935731 , '-293416906791080618' ) ; test( macro , '-5678' , -51676101935731 , '293416906791080618' ) ; +test( macro , '94906265' , 0 , '0' ) ; +test( macro , '-94906265' , 0 , '0' ) ; test( macro , '94906265' , 1 , '94906265' ) ; test( macro , '-94906265' , 1 , '-94906265' ) ; test( macro , '94906265' , -1 , '-94906265' ) ; @@ -842,6 +901,8 @@ test( macro , '94906265' , 51676101935731 , '4904385824479499254715' ) ; test( macro , '-94906265' , 51676101935731 , '-4904385824479499254715' ) ; test( macro , '94906265' , -51676101935731 , '-4904385824479499254715' ) ; test( macro , '-94906265' , -51676101935731 , '4904385824479499254715' ) ; +test( macro , '94906266' , 0 , '0' ) ; +test( macro , '-94906266' , 0 , '0' ) ; test( macro , '94906266' , 1 , '94906266' ) ; test( macro , '-94906266' , 1 , '-94906266' ) ; test( macro , '94906266' , -1 , '-94906266' ) ; @@ -906,6 +967,8 @@ test( macro , '94906266' , 51676101935731 , '4904385876155601190446' ) ; test( macro , '-94906266' , 51676101935731 , '-4904385876155601190446' ) ; test( macro , '94906266' , -51676101935731 , '-4904385876155601190446' ) ; test( macro , '-94906266' , -51676101935731 , '4904385876155601190446' ) ; +test( macro , '1073741824' , 0 , '0' ) ; +test( macro , '-1073741824' , 0 , '0' ) ; test( macro , '1073741824' , 1 , '1073741824' ) ; test( macro , '-1073741824' , 1 , '-1073741824' ) ; test( macro , '1073741824' , -1 , '-1073741824' ) ; @@ -970,6 +1033,8 @@ test( macro , '1073741824' , 51676101935731 , '55486791949681734713344' ) ; test( macro , '-1073741824' , 51676101935731 , '-55486791949681734713344' ) ; test( macro , '1073741824' , -51676101935731 , '-55486791949681734713344' ) ; test( macro , '-1073741824' , -51676101935731 , '55486791949681734713344' ) ; +test( macro , '51676101935731' , 0 , '0' ) ; +test( macro , '-51676101935731' , 0 , '0' ) ; test( macro , '51676101935731' , 1 , '51676101935731' ) ; test( macro , '-51676101935731' , 1 , '-51676101935731' ) ; test( macro , '51676101935731' , -1 , '-51676101935731' ) ; @@ -1034,6 +1099,8 @@ test( macro , '51676101935731' , 51676101935731 , '2670419511272061205254504361' test( macro , '-51676101935731' , 51676101935731 , '-2670419511272061205254504361' ) ; test( macro , '51676101935731' , -51676101935731 , '-2670419511272061205254504361' ) ; test( macro , '-51676101935731' , -51676101935731 , '2670419511272061205254504361' ) ; +test( macro , '717897987691852588770249' , 0 , '0' ) ; +test( macro , '-717897987691852588770249' , 0 , '0' ) ; test( macro , '717897987691852588770249' , 1 , '717897987691852588770249' ) ; test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , -1 , '-717897987691852588770249' ) ; diff --git a/test/src/integer/arithmetic/ipow.js b/test/src/integer/arithmetic/ipow.js index 2ca8eac..d27a92e 100644 --- a/test/src/integer/arithmetic/ipow.js +++ b/test/src/integer/arithmetic/ipow.js @@ -12,6 +12,21 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `ipow(${A},${B}) = ${C}` ; +test( macro , '0' , '0' , '1' ) ; +test( macro , '0' , '1' , '0' ) ; +test( macro , '0' , '3' , '0' ) ; +test( macro , '0' , '7' , '0' ) ; +test( macro , '0' , '9' , '0' ) ; +test( macro , '0' , '11' , '0' ) ; +test( macro , '0' , '17' , '0' ) ; +test( macro , '0' , '22' , '0' ) ; +test( macro , '0' , '24' , '0' ) ; +test( macro , '0' , '27' , '0' ) ; +test( macro , '0' , '29' , '0' ) ; +test( macro , '0' , '1234' , '0' ) ; +test( macro , '0' , '5678' , '0' ) ; +test( macro , '1' , '0' , '1' ) ; +test( macro , '-1' , '0' , '1' ) ; test( macro , '1' , '1' , '1' ) ; test( macro , '-1' , '1' , '-1' ) ; test( macro , '1' , '3' , '1' ) ; @@ -36,6 +51,8 @@ test( macro , '1' , '1234' , '1' ) ; test( macro , '-1' , '1234' , '1' ) ; test( macro , '1' , '5678' , '1' ) ; test( macro , '-1' , '5678' , '1' ) ; +test( macro , '3' , '0' , '1' ) ; +test( macro , '-3' , '0' , '1' ) ; test( macro , '3' , '1' , '3' ) ; test( macro , '-3' , '1' , '-3' ) ; test( macro , '3' , '3' , '27' ) ; @@ -60,6 +77,8 @@ test( macro , '3' , '1234' , '58563675299320712690496087264150284397571436234430 test( macro , '-3' , '1234' , '5856367529932071269049608726415028439757143623443063785468784843536946634255003858796842453459905186846046851774292445753149532138648409140561593823222428559200283816367593571556942770711203894947318922509986128995034233177140247221695941679146171215675158154358685224309073135481486540427499644363484815218991488230440687359021965115067678545212365725678242878485920885436927030372580147256775788882374301866845441065076726499613479868210410548366056401445912760529623658838510267592199677099676046090140514526228797525926977514932394954796457727416398081482661262807288229389463819882569' ) ; test( macro , '3' , '5678' , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; test( macro , '-3' , '5678' , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; +test( macro , '7' , '0' , '1' ) ; +test( macro , '-7' , '0' , '1' ) ; test( macro , '7' , '1' , '7' ) ; test( macro , '-7' , '1' , '-7' ) ; test( macro , '7' , '3' , '343' ) ; @@ -84,6 +103,8 @@ test( macro , '7' , '1234' , '70954734215028011240104595141498929070420289200365 test( macro , '-7' , '1234' , '70954734215028011240104595141498929070420289200365254864883100224459061531095964535961424752183918983389834714345883085722594630104327570484382813454950959834721299254363358098967399048133489131401375954827777487240689332659684949614116231197346793510695402301156840458057925504143947679213040737846060014251249690928324441226158708348216074516368113070768675494487327714367821662938661080440834970823376650216081882744143161592962823478851621834726159007802788609981541818975600270503709811145869971874252832721423453899821462438727851069669041332053765106227148570291872998008674128627485981069824533343176007316751497280494057995201432198045575691194828311578763776024467116028227768366827683004790939265568398432923069244698164607404132404210543306184313774389935234011995625090611727226388755028092996618090667295922698497975515840710550500258575437750076719351206138149202280453034232757583405474400100672191700332560347912741669538744924043142095605796598736664375513698661239721232174697654768024941266796370339939780641017369634940849' ) ; test( macro , '7' , '5678' , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; test( macro , '-7' , '5678' , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; +test( macro , '9' , '0' , '1' ) ; +test( macro , '-9' , '0' , '1' ) ; test( macro , '9' , '1' , '9' ) ; test( macro , '-9' , '1' , '-9' ) ; test( macro , '9' , '3' , '729' ) ; @@ -108,6 +129,8 @@ test( macro , '9' , '1234' , '34297040645642669671420659321651782362579256907010 test( macro , '-9' , '1234' , '34297040645642669671420659321651782362579256907010306825298584320017224909034295065159266732166824736588968016033381896847023243099736344433210097854593507161679850671932155017203599500044609298345843661231598352934672574000630755280719247078658076071069504371210453795997193380141459822909472292250049962822082559318856309665763195373936160408297178132724501864611562349337209033935902601202229170588203644970751513231529370646017342084334943445632338625406001819417100075123659123153934372275946883429572960429182400235833979860757127508599030945874737763438221696224240363286973695769026948553357192210469914347532288838793872337455361841599848707950096810738215169875752378946944496071085184269469689190048414428631904103213703000348839546159132360494448224371361413782868923322232033859714664315449006669237525993661192066307764695656412997620762143868465614936957887460078238297229855499508020184426374192732713213787351302551235717525464575349122336444905826195262672337776865803043472081042136085365758586709594709588874980188963624351301943558778230597943000313246648597648327615323559497393534626812152826795197456515853598831232826676446660986298958124148320950039761' ) ; test( macro , '9' , '5678' , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; test( macro , '-9' , '5678' , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; +test( macro , '11' , '0' , '1' ) ; +test( macro , '-11' , '0' , '1' ) ; test( macro , '11' , '1' , '11' ) ; test( macro , '-11' , '1' , '-11' ) ; test( macro , '11' , '3' , '1331' ) ; @@ -132,6 +155,8 @@ test( macro , '11' , '1234' , '1198321869335386626769268435919400050243389384548 test( macro , '-11' , '1234' , '11983218693353866267692684359194000502433893845480769112172251205188147262289354049461429172488569661122876033605557421170789272790102054304092511689341645557874249802952871767405284987003806187594928847518777345850099915863264078051816617440620669835924344622459557434141694081118718006962588499405658476477809584051185924057025464163718833076869861008662963948775457304791091957146272768229564713967630639094659383688489828857998385412406001934065445969895732784144880158564496904866299896753946773061123748947095350178138399329492711931118102507186743010708942286629969813642204878306198565914755078983880064808436574100979762259478493960140042607880569732036310833444310215790281432505720437714904537904767412626253808859682743392379188494787465177304942343204339576610614978528053711125948630650946573610344095512008508992625585490923211491629695497720992580178320146672152256706875056491678710723022609578354722578101061602454247010516142562468962308895384683137775859149496917496435957009023897662611266558969297452444733968450168403551460556237438931715240285963118359275426150086656493777954817140258639584026557409436805416478575578840073580647683266895284248911727092735184253994397858925804638577468716770187699083797737507027525458211673613162334364880959262660197607632441' ) ; test( macro , '11' , '5678' , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; test( macro , '-11' , '5678' , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; +test( macro , '17' , '0' , '1' ) ; +test( macro , '-17' , '0' , '1' ) ; test( macro , '17' , '1' , '17' ) ; test( macro , '-17' , '1' , '-17' ) ; test( macro , '17' , '3' , '4913' ) ; @@ -156,6 +181,8 @@ test( macro , '17' , '1234' , '2365750719195418700959936173439221488331849554433 test( macro , '-17' , '1234' , '2365750719195418700959936173439221488331849554433443272309037789270912117133978206777246165583614280813095899236078594286552848472860457643580615017539717857048793304325119681053421007826013802905479250885212839793760101742612296877478711932287387420109262614158330630362237192202151123468592153560375572873151822947436950242912080157786888545384847518810574795754691976973525697429044294851654461713242307440541746159573098284837473930094049306091573440131975480886198509578012017892791103610676499734889373927818577887242310104551008535893775377108954649457429588226369074071331951078940909959401201709240381177136083510255280740550175339832084572676328794889199725393235934601424964165016988318210336776289444267654575587266337284861333685818972410304844379843215873568783484299285855710739185984313729162892241201484427793478780366719828354369198742105822244711994746358620164097425507697349511284930229811697252220792819650825560346717292110648932265899796733644188721108873119505172872099646531092906043987147572277125354950545394615532850018465975565730363029206743959014462690377536775695776234592924640448812639061038539121473894456471681658974744379159553490945761899997224178778022075766625329855978704429033291722506766694214979844269409520158332260044608648267713490710210601126307243035021020433002092628988274703326841291915973218749244960354639698612598420531573152776417281665548298330678827921029701549454503621900176615327265802134551424622450618795022965384601079468969005231566796416059429914871329' ) ; test( macro , '17' , '5678' , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; test( macro , '-17' , '5678' , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; +test( macro , '22' , '0' , '1' ) ; +test( macro , '-22' , '0' , '1' ) ; test( macro , '22' , '1' , '22' ) ; test( macro , '-22' , '1' , '-22' ) ; test( macro , '22' , '3' , '10648' ) ; @@ -180,6 +207,8 @@ test( macro , '22' , '1234' , '3544770596427666704933670825514058656840289167033 test( macro , '-22' , '1234' , '3544770596427666704933670825514058656840289167033434034813245091750883162270446675859397841986880345238161021960809170374322988214534191585053363506454126462213757244784862172250548800355120891239982462620296434675754206726427100313150523472266151826654642293138772262710079764335312817589977974888511704681598808553789636057965795110640986410281597921902662990963638641278281253781683699119666661945433104346601274970659774893661365968347766707077408549681767565454620843792569318870542401828729517938364411892509820193464655128629664809734022850771731500407885408815335930002147542787627415049845408189806745107445132307539157002401311183617949986742914159513317593667951549591942294545010053084686720365553135398975223690151357594502438362943103211174888290826883518964968656962099365383745446040058868947352605005471883468803102923319135160194367582819156826127917537651473185148386098880353425069599001396856273342875688276177114278359156141134393159654758637663041409089129911594364800818125391217718986756939362789014002086984204053324062930069928284955781180175025313587891151051182531528712430068603601480445127763661852050046817311966022046189931948955290807404661752447837636846919052423707195121151844536365697282035619507227238494415828142354268295050195101293247644044457267714935452707723243836958166570458923766194943739329318567831418083291367602614610628703776858094904109993034272453854415127335371407800891291417423473199819581953311554881626790599515656538382928587235599730899217327975918421664202906795230685640597210322674275525454392606193005351353121325240801341129111396762030413616120113277356128432334929643219670987389108486144' ) ; test( macro , '22' , '5678' , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; test( macro , '-22' , '5678' , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; +test( macro , '24' , '0' , '1' ) ; +test( macro , '-24' , '0' , '1' ) ; test( macro , '24' , '1' , '24' ) ; test( macro , '-24' , '1' , '-24' ) ; test( macro , '24' , '3' , '13824' ) ; @@ -204,6 +233,8 @@ test( macro , '24' , '1234' , '1515906000734253870474490728382017379237905456227 test( macro , '-24' , '1234' , '151590600073425387047449072838201737923790545622778515405542489295365280374802003092345748753681766769342781749881287249346464958055559009581857595198530089819230481306713155507019243375785757736393010981297487306518434496622971579086045332205893329146303230768285811255525374621247345141815714309058936253285898983419720608226966436915189967268919455309262250618242751360361248909034678867178267283386443504378478143195886936482599662011569578168577981039494263767900563281750273077550310292671674973097829744745890473331477918697103083690536733167341918362953786259364594330084180149751256516756030378850936663791973239733978417672189517102102223884258181339830461602957890003315317105400603981501400219540598427784828262715802695138377182060865841593833485720205274139142676664443049548450410277812263367703519777502927932788452627831274636998616672291216489574557549335055172197580577132711118453026428882649878235139444805201982069512799047951007377619920034219848761549071361411729427628794049204602980944425540332659900016630759739316868023749785700349807321646264995322781924302276013058208345925931493883895500465669887594678839788578637461303074752727476500990640364376722701859400316730559885693050235239674548455869510362677791910042980988146640583541719495331021584874341075294784062883967560447377347188388603280434006674600263225696860648015867438392697049466565415507219522458255386701717251429282388492292922044650917640291089769306296653188826596134691225361787940784064160312363042310597352769798472903809450672123731170381463659456013676278088123310449702495131987916252551416683646406232220563855513976356100126013273624446723135664155744771247145879322648352616000381514511103819776' ) ; test( macro , '24' , '5678' , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; test( macro , '-24' , '5678' , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; +test( macro , '27' , '0' , '1' ) ; +test( macro , '-27' , '0' , '1' ) ; test( macro , '27' , '1' , '27' ) ; test( macro , '-27' , '1' , '-27' ) ; test( macro , '27' , '3' , '19683' ) ; @@ -228,6 +259,8 @@ test( macro , '27' , '1234' , '2008560752099022121998112234985163294010191532943 test( macro , '-27' , '1234' , '200856075209902212199811223498516329401019153294330654484899457135661710831649025094793443576863417869675999053574959337346792532217485737202817800641723197630343724422691567676966750017719674361721564299756255063995170624987815873886816573528036690980712399472082918987467608319915320632750007215671073941033733822406638067457070592416925055525002249965214978226439419675794443664397992725836030753072150525500182271105668883387299438014566998450801673929744863349108063057027323538841038850392906331064754828529624866950550712400849201192591205142296901842010465055290151680972126095024443830456846851602321575873316021498267598562024770678289890230706320997870461736064158216930272006483331205888383426585499224333788304253250735446206878459830691428518801804316734865056012563110060177249063533223360212951908142458456167777780005320459640618276526423350311574957115723697862633038912990076590485058168720523332363832907739630745212612829631298739740918292687323963984732777515115303964140679392026532299969353302111690876222512591852054954749110470134966527453125805201071472068728012702260328777663337721407575454838256471452852284288283640249611394712320213997254539391537655386427263371372214172403860536953046790124191276197581019979325589039334200287751090718265018203205058843589368322867283544158866611521312017186795565242663733214746314148048347376472660469372081324221562030477828367398702782252799482995882978202357840004609118497407774448098166472475681019210778338607385302368427582889110199771043940039384173696648402793417875142304690934448344767850874922126620454594771669567183452729544713864889437820573063999170931037181075406666631149358312284169719891882097692840499902508546688352472767932029187479332141883194288344509584921993462900826009' ) ; test( macro , '27' , '5678' , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; test( macro , '-27' , '5678' , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; +test( macro , '29' , '0' , '1' ) ; +test( macro , '-29' , '0' , '1' ) ; test( macro , '29' , '1' , '29' ) ; test( macro , '-29' , '1' , '-29' ) ; test( macro , '29' , '3' , '24389' ) ; @@ -252,6 +285,8 @@ test( macro , '29' , '1234' , '3973099188049527243220647139187797180754267362795 test( macro , '-29' , '1234' , '39730991880495272432206471391877971807542673627957704904437675569298014672895070646102535214916047201597057604326381566232240717146352905189648219707403914660579022999012335291748319902460223265040313524900417222861808879210656981706108411235266301032093577572784389639719581120084786412413811442838338528471340965314240553665532845900842671741344271394471188943084404951380820901385463995110598814337441546368977234557474886215832235597884716646333931698424620615636355660537976497375196427830792301269566792792820200233670131878651690073642956396203530193828971438659013332283684624052196883142348635262157010483447752926525087705971032741588045925402251432696384942322183761498083408303101185212952621515583790502916056759732756688326445700770330618736098784570958650303610518453345373695638406312777059006873348441083653408306117070042611172352888144271588938812215283718988243964723451182501170569555882799635882695185231569905013697274942621016347442475467611094595589653640159813052986283489436916917813443702411392363491760078918071760360736064794346216924583036877713278321020682861527277057026346194702327617123158348328127954077761730411509703210527413729724018291740451232173623681566068132712321584183435235162559116277847790802991789615957113420980884848226115467550693444248836097094675037594634337127844160706154634179432597281415179294940602829040686835658254209377758530578171235783275715264069690583402743872874027236142735859680441203304209066670057316622505879861269271750030338720992453155828397426773289742123912597304182933866285890213055204261259697174309425441282464103760493735120470209861686631467978789655753554085703565573238818516254588594497513866508088253727621898347478665593386957598553232780662697618992458924510409036459946339696264729231292522628108751878543189439881' ) ; test( macro , '29' , '5678' , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; test( macro , '-29' , '5678' , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; +test( macro , '1234' , '0' , '1' ) ; +test( macro , '-1234' , '0' , '1' ) ; test( macro , '1234' , '1' , '1234' ) ; test( macro , '-1234' , '1' , '-1234' ) ; test( macro , '1234' , '3' , '1879080904' ) ; @@ -276,6 +311,8 @@ test( macro , '1234' , '1234' , '48184467781382543701667186039468406661059770237 test( macro , '-1234' , '1234' , '48184467781382543701667186039468406661059770237590274727670474872867568934066212120125133953550629961484891523453397766904292741725027019645437267985042784717562212455213265145073576158446772320656790521515384533153285495122560467130551068937365382642309092956110550380937116582823950116105467284919886128590021120491211422848352480419801389040432671756358444906225483817656922238136306002774235317628882806945193646888148396110892049431698226720231373322565553173892155104287328274243305595665720786784052656812367125148945799485499060066329553808509237311004983159894774937428752149540862686417306258598574741354798734543908917749037010338607293558391168741173229347205324015819180886782731783732875096308025479318621477536729557178851277749719374746640105570680704597488214460168162719035143192317718562628271959732323123847141889566569180545843169342410738692059982444746465750802950208574020617939255322870389259522352007286309084437654560750826135123276437360339867137662914521505757477954199067061537563338324827971696801982963501680500285473348151566773437596060788388816834765832275133438433921225741018069257650081651893412763515411183995641907421720698187041665296617342826301233824768831086783439617690340317902242011073693697825044232174730876417203502412742085342749470261962000902738749779130464597185957223365845266728739264096596554562810900489160285087089151363421121896616575007056439552166409310603897415780357105218172824045265515881762471530724320743935876223471758489130857861949736325801719247163392163145092104862730777665632878101469684676983177748845758819134783307275384116307332565581471205450219638137864387568253396048525319846029722597087368081615296780675739066314774724547006391416740049175425483980982557830287877118477623151223431159832554386188341940675670910313367805899112248803570997473057794418174867654496284922646065073429519234590181376956226715629044946363751414558194273837719521633486883608951520130473135848525228767697904589545099613408858934772678955107374792767376297292404355699412788887158297703071562694349633862471115563026643188726923335031942038276485070702440112289573556176109970627523424440589934713944485023114357294128614721641112627517540349238220184422744440362721622786094864017694819354467741507712876404983391152695521440373975295468154208059821687654408426427370963930322531227395895396783921477437273314199002421808939747302217153865116186806351980760710239964563379901328372415061933640351961853616394184876278706277214297206989695471340253866298118966493903627998818702216683968716037963198654625001668768390791943686432733286824675468274040171973201059002888713965690564527215419345100503188258777506372065686193271207542007415422109631813074486204833751677472525228744950194297089998305021078379670692156515896561318156670094486647187285361909788624195866103332184213842805429511053631902833667630273693526699848894312061513323511126288640008264849029913769883352116160378319937025276742846457501369721989078408607355941517261584972558483819760496804231338012065441081939772196754109683768808242484290927174759258520839532703010720373548957783991479615682174614219692539567777715560109326389875468292301222743028820913581258063284673412787274389056140124677069653486630962880192937633527058165237839406307326482619493415666561288774929091975803346338652727476500670928651812154306332363280019281880148780695662032811060669099701522746512853264775139655489705043573689252437465482977809592752059272522878781208311791893662451561020284928906469358115442883064671084339186725298116883304622860824362268174217031187839248915211550033719913619980315078125050194505282396757349145204835262063407488072671571413182055277457862261818131387963934879102237121895980689553963436483304289698371277085427432858554859126640569432899045006806292448711540736' ) ; test( macro , '1234' , '5678' , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; test( macro , '-1234' , '5678' , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; +test( macro , '5678' , '0' , '1' ) ; +test( macro , '-5678' , '0' , '1' ) ; test( macro , '5678' , '1' , '5678' ) ; test( macro , '-5678' , '1' , '-5678' ) ; test( macro , '5678' , '3' , '183056925752' ) ; @@ -300,3 +337,133 @@ test( macro , '5678' , '1234' , '47545457014339923317335752560994105332284586704 test( macro , '-5678' , '1234' , '4754545701433992331733575256099410533228458670475892396381228147140277468895263961376711046431196278059194371543633511738104729515132046647921588948673317858795453334016910038267103044330714716949310557017200499682459199588937173529096934288020024176158267550101701080481254770583881162470132740630857097654899879616282728381172344973405997803534651364288959497452319805334849653833958710102843349430647090705281620494871877782238874887814289734228053896202806354761750369269951229593313010945689761891211258688068066696055485242378613245933537337160634515912577045202472450817451849184207035648874665441200090642213657945355196460821766460825032224534602658525599188179237649065062512691280473121441573617950552334838912754947407978233727886935344811884839323223019614920728343603125258018137019905454492748785128237691020015003872956540230098415206613398448533046207656300960598259213003433022409251838940742693047445967307981951797528065313733200257272599665561813580891071207079215211460876715623293069910550166302272098118272527916433819800298828239405657658438060618142659814207004518209034153803725735869682967280748736992669014651682583009724296577174387664968207473327117061022862388179179805519732871243762549484990925427400006876201981312808033770504367669331073626566876134508721159965417268468228608040850320762590581251984432320891961775899262667965048729940448530756142869126858563901357526390190162408750825956708618281237598759925725241049426257439561800035105159165326290183277107179838103459135561724394264803171431808241820795445711863608586766345039254614846933931024903619561176580056139441625967323631797367126958482941668050957659192162167276197457147030284596116968435975482030070191450200681573163807130339270972064786812978664842441338738386157257657806440916739246453417871760401803525801345778950479694386503103948471086023573572269171237514322085437996393254976781298685048789580780175371793986673922336623057771141110132765327451487041405878107213683772036140143582620048289665134817805568670112167960808287343393646995734701543886022122701209620784296421140764622633595229564449908877625079263109689514631383456799358203288875405982309838110130925886572530681702118654886611249141922200019882428708452245424153239056842500484262106739374720265689912446227419480220842375352629558959175152376134258348738676918576054510702773097564166661175972907344227049028399511499148144890097723715043579731339916022734957419253364608790001408119360562088903660541256901511777417919298919881207626846049705641631114520861910821360106286185700362951871430037373045323853881352479438655780016733428623128344067196426832063335414492412985195862227411532910672295727557475523062269393814283457830004423808768415796967148960731363753261748078031957490406872476713147808646830842062710450030612153443209478241811514340917541321810139916689385477670593954065087892241850261558516392240563145569557862995904133784803099322335109965684092492599160998743520079066871458347318820041040608736708265400811003296782209446700589963177364290058854636845629046307738816633516835431430230362482024920978970474394893679522412954011767859444487351352199067658529260874277691008237384360434306282016514094096768013798147480740509779810560544648455485790268334288880803641971210749525943040368705400269755514646235977621926612279423197054873015209023113609804623745158430744774035859946298137588499302254901538876084525827492824031763727264344218393017853529749735850655796213422695465000659399958563228524294668421953057407346976847682240743601105444694630169017375480155130799595124045461115669497563631224904361329523188370665305938674437690787549882389569867694166936751165216920602732743849889023149711513126398908342104741198863408830097845137505662663458382001009103659839197477448289276824608807661040318889081157573844237090631229284090854577084517143322570965548490565414070261786860900921959546383612702905328456128108405235351119788158687215861758441073018835708344133679077552976919500888460205455433542878586438605353256917018782886441646030034030257088489389720348078103255876838236261154196475758170227577027093408115125958792540599677335099871170489525421378579051844293126380522395565389230525206095904182031294100225265853213565367785174160416143450757600749410617414444540260518189203196008117912073471241250825794798475803391996546423777135418649913067759391180278825562475480988246874450672101428462254341590331425352560400400946802179861512954182324631693500044001899557332925974569520166679673993884049720918350709799494693984974735913494505510527664100089926593875304828031765284659403018738108240944539887468544' ) ; test( macro , '5678' , '5678' , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; test( macro , '-5678' , '5678' , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; +test( macro , '94906265' , '0' , '1' ) ; +test( macro , '-94906265' , '0' , '1' ) ; +test( macro , '94906265' , '1' , '94906265' ) ; +test( macro , '-94906265' , '1' , '-94906265' ) ; +test( macro , '94906265' , '3' , '854839628132734960159625' ) ; +test( macro , '-94906265' , '3' , '-854839628132734960159625' ) ; +test( macro , '94906265' , '7' , '69352828108196345571302714548224840368303639678393515625' ) ; +test( macro , '-94906265' , '7' , '-69352828108196345571302714548224840368303639678393515625' ) ; +test( macro , '94906265' , '9' , '624674733432656449761568667443804634246952025778040170044028517447265625' ) ; +test( macro , '-94906265' , '9' , '-624674733432656449761568667443804634246952025778040170044028517447265625' ) ; +test( macro , '94906265' , '11' , '5626569719411962723650415167546096949953068311825856718044176845859638898840742041015625' ) ; +test( macro , '-94906265' , '11' , '-5626569719411962723650415167546096949953068311825856718044176845859638898840742041015625' ) ; +test( macro , '94906265' , '17' , '4111620266471980471028580099675545097434173613002314680540141671482471036233068045322249236629608058990135835756014486176615142822265625' ) ; +test( macro , '-94906265' , '17' , '-4111620266471980471028580099675545097434173613002314680540141671482471036233068045322249236629608058990135835756014486176615142822265625' ) ; +test( macro , '94906265' , '22' , '31658286807403612933666095532663829606917007814138968876951811776281483501242674522295256018683450991389450689602591230724763634593416216499485344394982531093618869781494140625' ) ; +test( macro , '-94906265' , '22' , '31658286807403612933666095532663829606917007814138968876951811776281483501242674522295256018683450991389450689602591230724763634593416216499485344394982531093618869781494140625' ) ; +test( macro , '94906265' , '24' , '285152493586807715635778250040629704568534899170608577332704172832192470586911307092645490980725710064416470215223489215551076054022142237008690911252732817102771522852071313917636871337890625' ) ; +test( macro , '-94906265' , '24' , '285152493586807715635778250040629704568534899170608577332704172832192470586911307092645490980725710064416470215223489215551076054022142237008690911252732817102771522852071313917636871337890625' ) ; +test( macro , '94906265' , '27' , '243759651578868798217281108206623463735490359085472358472465213305940907210363261308064405033766654095672155830024986524275053959211648897667524575409210697695532573441399310923762601838833141075350344181060791015625' ) ; +test( macro , '-94906265' , '27' , '-243759651578868798217281108206623463735490359085472358472465213305940907210363261308064405033766654095672155830024986524275053959211648897667524575409210697695532573441399310923762601838833141075350344181060791015625' ) ; +test( macro , '94906265' , '29' , '2195591723153842833976375183141740537336638451104209452487233269978099251091719201006853085913307473345723364352547986672429911300801268569150014616303465779606927933392093058172884011727748376587183753730532924272119998931884765625' ) ; +test( macro , '-94906265' , '29' , '-2195591723153842833976375183141740537336638451104209452487233269978099251091719201006853085913307473345723364352547986672429911300801268569150014616303465779606927933392093058172884011727748376587183753730532924272119998931884765625' ) ; +test( macro , '94906265' , '1234' , '9591459179410241572856537719704118795351000902900562305249195472196195265555833412754864166507031793587379195925582803572210371959180740848015702606653712794907807842820287303844298057315437721729780551771436713566743567210455419724786856660298500086372804403816338340320302120440930931829619194880300084268951845577897562834735753784665609019198203233048867661024100257335806608791247129540791927592412584156372409767363191327851323280497596039938628887351085641878361348960836551885434816719856675096140100735098153982014533453294086408481103402371073765234498437942986299185804946033932203517281211025355740639164406513819178508651837986562373156333090579411143890235647767492144926855911961561170349672014614629827840596629153866370535524382716502377298033129875940828099612289849768956366119182226196623644421289199029543705885301848203842046242909504136594099983847607871992398930583777526005880060061677287301121641838813359760623338793918913138129119762743481238358717117820874141719166872107856435512751028932079558518104984922747527693664219154086216948208341876460165162264778277923815846538502672245752434229656583577521062954818225701253649577703058999328419908839977797748333637247291496547242568819156256380939652968563081087936133413669763802314091980457139588435626848957026334101428382680905361934063504702859864753961075493938097121116859339830550708349481985667854659071598612299339127950437953067708898374986402646559951120320721708316727933224792697639478435468027888366917714894730680032991635257046230944591272236530617356025218569172482915774764506872033088367335012521246964352262715392596661114331434581419942425209861303052103159737141838118887593079659533118979010073029109419153504531772178157803880524448253232397504700393645418278010150165092760716226444484244727105637368962191673677518823763517102430372508776552119355215943188635023271972752127662635880598372673204814450697064559754199549908021939030958872733672399702043041508144639801430320943357267841707000400404222832758589098605032942287405982133506381460750004675066342262085479385836480909763864598878090750329455982787911478900279885781537417672577623574196534254896533751763619748632866305445903742663767222380368598056346743790273546285474116657619344057407744566063285106302957424998222958334563469530826042006900334894940507739429822757677948670771646446401475234418995859933358243130008180759536136782698587200342015804405083654362794667043715432498830242795494530307701824122299526072682392416883591382466507093702351999216857924284228844163937090047387165802061654658731296376218866164135568360515357769852411309461140876077518669664598359667926801346716090206666283623307095613238020208838579994957805916629319170228853022067994759954669755848747912031498150020489023940497893018969218903299457329957933615236619153547835202992956280530580346188048475327939781542919126773872016959398231243998998083738131590171425213432398708470769525054179511894591276471224027298513771970571872065972609539084087063890507232242147976054307202299424358550001984668194552970122408292816135793651096260341402739670890290539634652749733051936121647220510837557946150318744548419221954103573224004509428899118772854490532692636349984796523606799588426404592878065079890048662999499258496147403823670334749053718615662500854192465254630734735470592657444348319716921656900540143255754066981370219643196580126846207577613002079274870394367728741824995134268682147619610980271981665849912854000586266885293690909808590352073959622797877167704956570701109840686451917212334062294475098780452199147749227206592489248155417621634742859122288908494376684326737988496746942171234696512068034353612026733019551888985186714851252843134718646972681183302261929938130968961934184204726044095752598480264969769942628031493505879722845317398404404766136527772383991566308125162547193990579656303403990650778044081542434937085597660623254423002156634083383451136994840415138061841621305110130354721521708626026722411562666098237182221903896143296122843453808861853136066713710878415727201422848026825971083548440323207872629926360833682353471434194454802487028406023157541739114399209811757523364508775327465775193793901522174053677751397308082689295814009742424096663245256371127275554813138918104588578788434671001200499772731239526998926007344889536787546023840884563161206866436260069860416345332711835403868298476116559997395850081711369707151087016769352210205207119306587204232943367376612943973885522556573557976798795448483847878609300730594170921845018856616294672752170650749875613401771999207041914676357273072487369912122604321957851850328366064475250473555501861497817846228892630981428024352453509525341771499168825703052936994035249193004718133969293658358477955548441418729299358481051187146133695328375103255617003032549133648324739613350912817202951672035960629467437857895034783268578652695648468049772851048371268571371710174944747089771007951326599571977185536818992501092538130016192595691688560212821744518752775149044137729808714578718821728891394252836114476272385593027217713947689935751224213096850232388887355044336182239209673510124360918794427492709842501901193642964413018899346419597569212619882459708253025895167986898921776318809624757908047351541616537635979411987192357052180741057545474523286703219489442558181392097429272725321723344296968214353129336168551540947872360172324488054726452312277329954745258701008482980205872562874886601633986054729698061958995727041136491083854134975456698587824863774357915870320563386104439619169757774004947293513137570115484537992524054976775958147916672384240363706932507971190885901149565024226836664882553925400415432577255921802822503960734813348624446723667186940497582623354541377084135798028997689173921671637556307023496802420683015459505952557023291016881953450025241190194039097347605093809834451182579729476067653116147891893076896501563815659745545701931892765370873530751133774088803218658236918753605920897832799802629346000755537711655733935247075071309299891485974004737759699085619503402054651496887954393777157718744353085477058515846914858988677376890749563402243352948882704897037289535812374920703566055234002365908807572825594074935358170453507404950430786601077339828001741772715701388696819944246064281597875135795560927360428844682508435674499423211270261087659836015113712490214244874535278179921239117786846524745214093518055485811573243729006472733809020482957747407185981860374708684286717665404920163892211997886941891508113407401561122378383848947830545283520019375170240362580261476918548352375204827546060332812320537368384369528982640547689242779683051606032122941971305898624339279930653319150270488626943146630086882906036938913305489203172190549402764186077691788746463406547058650845093618234570304408010293714213219535645841856212002220491279122623456707919822267373205778074418458267976061672627895374645491069976169809979589349440103658324875263502040561446885715685084316663246874940845565163621245764201813071916375863674116631380809138742411055687043053580097915072331808364438230302858541704366985190788328281686095477247372106110289131615169926634773044198632401845844609052201843461377057755829111540009963815904567488874475681740338761441160651590356825801263089126426348110434911655130477948801617551850940401735494663309897855071592787594192797472071274201046444611408640440198255469724942753747645197415207441629405487586039283351014842032997658344919969847875361248802719615209204137908572720005625473028253292534507900617109339302886404737678812367649587493463409620386788766525441243443799986362150864341695101086395523314350910622578929210926494667836577247786854052224561095458041243543570729768588208531982249642560145100850197699673538324491374450242541091046027877347664044916635890341954130056571906109165828535910311660771647040322593424704180434383930722874810909784652987805377576186746140110566133453382033674431223623092747739626762801126711107898439074620801128156500389898936996902615531151609058915444466355837620116136849729671236565382836790985391828355289305589043017696181139493265426855262772003107393380496127707409944678929356424852897833059161296871451390447310222755068231356889186366469835372570926617460311594138251684705497261398939078673207680734548345027894574941971300910638001809666450203958374908000409224916792685389473093574017125721717855356592625547252288452987636361999067948204782699004847095167966877114318996122727724865218771091724949902821421297230591814912641664070615519836632113388811666884300494853790570587470323050363662041264565613231275086236122271260746561199518073931788593225451290704917920481617412178007269106795348325460845539920221204370405830516943074642362921654055465455434800928688359132339475448945798039732615360945805966700833166246956944923319302325595161448667877444353826406797662051236873687719391027503115161380602709771074129428752412878936468150571495391787113477904397126993393779245665340705023574594518096866873547398021846631398029079316126818030712951745225590953502758227266035049083842517044023925565469150691931514472336278473983933149135274596021969827799475964078993259558154187436736832028197629659375815060480641327952346293832946391116546119290464690718192565154980905423079687235355361273794723342189390564486895833368653165830116560978445940636491307093493704382996066787778813694371282496364727933852217652979786611217060627813202623645589310972893162822106395194215667804608020963575035872246400412133950584855358933001394534546590988260881555615516326633872233229193801821674081770373019020873454877625370262143702522777839078500945310035409751056192714470577586167708182037483154162989501269631312341365910403419220972928202706029721636727127333412883747829822332644925037811467375511290618736599996846385043905631496985453310344382771290838718414306640625' ) ; +test( macro , '-94906265' , '1234' , '9591459179410241572856537719704118795351000902900562305249195472196195265555833412754864166507031793587379195925582803572210371959180740848015702606653712794907807842820287303844298057315437721729780551771436713566743567210455419724786856660298500086372804403816338340320302120440930931829619194880300084268951845577897562834735753784665609019198203233048867661024100257335806608791247129540791927592412584156372409767363191327851323280497596039938628887351085641878361348960836551885434816719856675096140100735098153982014533453294086408481103402371073765234498437942986299185804946033932203517281211025355740639164406513819178508651837986562373156333090579411143890235647767492144926855911961561170349672014614629827840596629153866370535524382716502377298033129875940828099612289849768956366119182226196623644421289199029543705885301848203842046242909504136594099983847607871992398930583777526005880060061677287301121641838813359760623338793918913138129119762743481238358717117820874141719166872107856435512751028932079558518104984922747527693664219154086216948208341876460165162264778277923815846538502672245752434229656583577521062954818225701253649577703058999328419908839977797748333637247291496547242568819156256380939652968563081087936133413669763802314091980457139588435626848957026334101428382680905361934063504702859864753961075493938097121116859339830550708349481985667854659071598612299339127950437953067708898374986402646559951120320721708316727933224792697639478435468027888366917714894730680032991635257046230944591272236530617356025218569172482915774764506872033088367335012521246964352262715392596661114331434581419942425209861303052103159737141838118887593079659533118979010073029109419153504531772178157803880524448253232397504700393645418278010150165092760716226444484244727105637368962191673677518823763517102430372508776552119355215943188635023271972752127662635880598372673204814450697064559754199549908021939030958872733672399702043041508144639801430320943357267841707000400404222832758589098605032942287405982133506381460750004675066342262085479385836480909763864598878090750329455982787911478900279885781537417672577623574196534254896533751763619748632866305445903742663767222380368598056346743790273546285474116657619344057407744566063285106302957424998222958334563469530826042006900334894940507739429822757677948670771646446401475234418995859933358243130008180759536136782698587200342015804405083654362794667043715432498830242795494530307701824122299526072682392416883591382466507093702351999216857924284228844163937090047387165802061654658731296376218866164135568360515357769852411309461140876077518669664598359667926801346716090206666283623307095613238020208838579994957805916629319170228853022067994759954669755848747912031498150020489023940497893018969218903299457329957933615236619153547835202992956280530580346188048475327939781542919126773872016959398231243998998083738131590171425213432398708470769525054179511894591276471224027298513771970571872065972609539084087063890507232242147976054307202299424358550001984668194552970122408292816135793651096260341402739670890290539634652749733051936121647220510837557946150318744548419221954103573224004509428899118772854490532692636349984796523606799588426404592878065079890048662999499258496147403823670334749053718615662500854192465254630734735470592657444348319716921656900540143255754066981370219643196580126846207577613002079274870394367728741824995134268682147619610980271981665849912854000586266885293690909808590352073959622797877167704956570701109840686451917212334062294475098780452199147749227206592489248155417621634742859122288908494376684326737988496746942171234696512068034353612026733019551888985186714851252843134718646972681183302261929938130968961934184204726044095752598480264969769942628031493505879722845317398404404766136527772383991566308125162547193990579656303403990650778044081542434937085597660623254423002156634083383451136994840415138061841621305110130354721521708626026722411562666098237182221903896143296122843453808861853136066713710878415727201422848026825971083548440323207872629926360833682353471434194454802487028406023157541739114399209811757523364508775327465775193793901522174053677751397308082689295814009742424096663245256371127275554813138918104588578788434671001200499772731239526998926007344889536787546023840884563161206866436260069860416345332711835403868298476116559997395850081711369707151087016769352210205207119306587204232943367376612943973885522556573557976798795448483847878609300730594170921845018856616294672752170650749875613401771999207041914676357273072487369912122604321957851850328366064475250473555501861497817846228892630981428024352453509525341771499168825703052936994035249193004718133969293658358477955548441418729299358481051187146133695328375103255617003032549133648324739613350912817202951672035960629467437857895034783268578652695648468049772851048371268571371710174944747089771007951326599571977185536818992501092538130016192595691688560212821744518752775149044137729808714578718821728891394252836114476272385593027217713947689935751224213096850232388887355044336182239209673510124360918794427492709842501901193642964413018899346419597569212619882459708253025895167986898921776318809624757908047351541616537635979411987192357052180741057545474523286703219489442558181392097429272725321723344296968214353129336168551540947872360172324488054726452312277329954745258701008482980205872562874886601633986054729698061958995727041136491083854134975456698587824863774357915870320563386104439619169757774004947293513137570115484537992524054976775958147916672384240363706932507971190885901149565024226836664882553925400415432577255921802822503960734813348624446723667186940497582623354541377084135798028997689173921671637556307023496802420683015459505952557023291016881953450025241190194039097347605093809834451182579729476067653116147891893076896501563815659745545701931892765370873530751133774088803218658236918753605920897832799802629346000755537711655733935247075071309299891485974004737759699085619503402054651496887954393777157718744353085477058515846914858988677376890749563402243352948882704897037289535812374920703566055234002365908807572825594074935358170453507404950430786601077339828001741772715701388696819944246064281597875135795560927360428844682508435674499423211270261087659836015113712490214244874535278179921239117786846524745214093518055485811573243729006472733809020482957747407185981860374708684286717665404920163892211997886941891508113407401561122378383848947830545283520019375170240362580261476918548352375204827546060332812320537368384369528982640547689242779683051606032122941971305898624339279930653319150270488626943146630086882906036938913305489203172190549402764186077691788746463406547058650845093618234570304408010293714213219535645841856212002220491279122623456707919822267373205778074418458267976061672627895374645491069976169809979589349440103658324875263502040561446885715685084316663246874940845565163621245764201813071916375863674116631380809138742411055687043053580097915072331808364438230302858541704366985190788328281686095477247372106110289131615169926634773044198632401845844609052201843461377057755829111540009963815904567488874475681740338761441160651590356825801263089126426348110434911655130477948801617551850940401735494663309897855071592787594192797472071274201046444611408640440198255469724942753747645197415207441629405487586039283351014842032997658344919969847875361248802719615209204137908572720005625473028253292534507900617109339302886404737678812367649587493463409620386788766525441243443799986362150864341695101086395523314350910622578929210926494667836577247786854052224561095458041243543570729768588208531982249642560145100850197699673538324491374450242541091046027877347664044916635890341954130056571906109165828535910311660771647040322593424704180434383930722874810909784652987805377576186746140110566133453382033674431223623092747739626762801126711107898439074620801128156500389898936996902615531151609058915444466355837620116136849729671236565382836790985391828355289305589043017696181139493265426855262772003107393380496127707409944678929356424852897833059161296871451390447310222755068231356889186366469835372570926617460311594138251684705497261398939078673207680734548345027894574941971300910638001809666450203958374908000409224916792685389473093574017125721717855356592625547252288452987636361999067948204782699004847095167966877114318996122727724865218771091724949902821421297230591814912641664070615519836632113388811666884300494853790570587470323050363662041264565613231275086236122271260746561199518073931788593225451290704917920481617412178007269106795348325460845539920221204370405830516943074642362921654055465455434800928688359132339475448945798039732615360945805966700833166246956944923319302325595161448667877444353826406797662051236873687719391027503115161380602709771074129428752412878936468150571495391787113477904397126993393779245665340705023574594518096866873547398021846631398029079316126818030712951745225590953502758227266035049083842517044023925565469150691931514472336278473983933149135274596021969827799475964078993259558154187436736832028197629659375815060480641327952346293832946391116546119290464690718192565154980905423079687235355361273794723342189390564486895833368653165830116560978445940636491307093493704382996066787778813694371282496364727933852217652979786611217060627813202623645589310972893162822106395194215667804608020963575035872246400412133950584855358933001394534546590988260881555615516326633872233229193801821674081770373019020873454877625370262143702522777839078500945310035409751056192714470577586167708182037483154162989501269631312341365910403419220972928202706029721636727127333412883747829822332644925037811467375511290618736599996846385043905631496985453310344382771290838718414306640625' ) ; +test( macro , '94906265' , '5678' , '12032097777224921443610910803648284170512319198440026582654592944907996997711020183354851559738136209876116410482775406152550319519617501575389742141362538671375575270130368782344375460094542930957208982333657039900983512378934606414708547255120509688221248878365002162079958544994081468523927315675060726868126226367119441190130650764598697841259026377226201673036205220245238076301842775410518683141308488299366012792925609747073886802877596666532246689317196865573110094049146280756613633385237048709371024252858686340623252312452593430321228085552943679754605680459379364986804128577790131289118408139954294866373981926459619424848669839958145224015329056251464187884540803724925854941893314508739139448540059027532063346594260009340289063635135268446417517177773306225826478834782126901952841733199463653563757819068049198556549112038207670677005457584687670138285992773936407404706326519609992105860062869525897101616064153489988499260854115519937665672793315389915719723184695407552227493961904033933034506875702096849362495327673029771455889030501830242732676146364350412302869011748293967864940422889128153590781271839942018607109535085227963257602139998078826097049418704998656236212402366601095688523413673512998518901468183798514551196413118699461621524416262734189234150826938615238369409717915433788697444341087319545108423271713647606132458422133503476646278312763913773672381574955638642484777319177742615693192492030931928334799325795983171516582124249978689831869160939605527534908432774284025724078112334305143452973560047389979442428241832752514170684582991619064835042076127845136974614077376818874608487426791468373615242293672741372298898215088365221162041567250511944704729950839359617629579145185451647138688599424451528822613292149181525578785717464355469269950910358964367355548167095991226459148148416836033320461350750016925333661337306860380813570244138594176200254338594713997700943753269483275676699592254818599648860765855658967021173586910470760937291362350281087625944947663940083612371308499706464739236243824369828191050651890831355140821021009799707142643546563126154302728058269983835130462112445179485724829519948644797857100978445782729948146775639685486727347085571030457542493031359599157910012477405633462126888771916787753215333242607039830155744016882502462503818969602202111471162936075917294595421685134910453228619713406894527040532782467138493248067630974131210865224589283318665338359787682806475430520542164582197378961886474218909120025123091615456874986351962126541772414045818060094363742441442667036502961807091952360039303360580900852680604055434020409419268918051690557813552959236488040160958755768871367230392867382735702108578451240872919059355437258914588914059658578625910689412928981898994374868014765744048731178533977420205065542882559318334473630109661521143300821787590642741661630560532599207482636782848372575108230527673435955097474563225203600719908173095140979638933646119901238452049016502626977563080111918315881318986264803301054759949431314581482431408037019249299434256675011740150791380650719740873599060034519923061234283942527829654746500679243122868491752528092330799766780299772695603288900967560796775174207884494845966890228277702276659444815563795433225980503597587408498869891219703208161074827864088098815419234882655313426926283791847398673264577617151571464296912550417563804886979853576821080050211194779490844153380677685847777313137638651644748358202947322079765399238487437874318841114773978903668929164955398911903679705111008999142589544437065672589266355348348971511169575378316208327903577552525930641088538955350354489078111990562226354820551745938135022897672457837517586016736813649699772486263689086502957138019177196070312090344215367177632397930739405411088757771866673597796220471619637645139435250941374184393351858539017096692099099345257001920271362387534252371917508119267325168864330673891152067448719178429752412191066355929358566249659077077560550302293786857736765866388524626228805050725063109877803065961191644600499168820792325163292525536974162404755526606943846795314338495539699560103980570000575730832399241743616051296198894674663823826249501962992317559847798100096759179383956869860153118427566631515292600888345422893802197242997389457528273662177569851158066854725418877583679801690209473560655905719642363040982739123254770408905429249758124187443434793269173022194566001870880813212255626734666407333284872705324976206677741658696075649608364892807470963909485110281558432545948579534204538696827102504407100425376019173981304010256984425288381928914573699655169020850451341503052441205769215186509836760430481696523650279090720163816251521349287308560407457609483984181328774565719714613388489095110023571061353122279353104129328013968956403235071785261847838169630745374996406189906650415573552174116649660276541371408913476854939747876731425608814138059458169543823165972801614100937621904382981944188903180205906327482865751979701901540575440519486923023420935041930682172192953852334672415568738221940582193314983240970450000477463045431237229063460109818726294597730994303217381825651493935869034862652936559019431947352777726119926158367810617503147922958376143964979603245915631333786351234314954623412494887023938633377421208202061177648550247361016141144451615061150414512561947705053352442969412639758719469809823355676287459924284669684459858991524522914802929760964195910108664304507593383032621305399692953057899447189106733091012594841503936991785388985322660311685783354745007380474195833316048135155967714601451196311606046191001166178941116722830537202351353675803239601270737264305300314769429948779160815303098446558150519469320909471850141905795161388126098051093418801571231958217059570635407936987518675272606139316846781769414872368547904423404977322742616034539497477291204678516696339549373290014129953927115273383862176648175885100832898131993707682449845814289537783195056908822732162500604957529260337740262458814285530991622691309191620743536827546586516016261289544348330822509040619411107336690611176859744962777081961711988981244490119102057017123472693131597991997040909096393811129374410032160780720267920557429521283544362429347063129854641992658572996108093014481102752542992814642875292835964120599399273647779564854999067324549593959628020136971251523507807754590744694873740047390084491259174712701241947149566007259569113369875274948363558659130833317516389511341744440804095510223434955552652210614743910169826529392899468656662706962138458679700014949089569408033941330187462290588839847072683578505493439388126630655399425769894783841874574481277512426591408213810373551314332889400820073202400253692361444659207630759168415095760789533492551330583140574981012731074049549919118053417150217808638350432013305694321389747006470410615077305764765120127628910927114025496289209479659319746699938956841225054827585736797719039052465086433182830701745898467197621237268086386733129150280583409523728139312677689819712362202660229834226632997964115903142152545104059172086002463963414350578947905947216633376664142189791562053019113774134585010114509991806040543148515641482014416718677876276580431730562587541020555292496453826361453188845475398099905277525052773545411713921648813979140016300112385588170999474985918656553076765214200080620922916851475745553785133089372514034029601819219527045772849932738904614873836099307092123571006738447715320002736785859704861742282537734067792187177608073549859135742645615364728840961736910729008697313304738536298720611573424123582407824500642154138363464791319257510414579292323013964798548950290960997144513319241370751263381191179501838180558724038708020579905145157293231789686223459443044018289699299028761818401590134930047434655260646434988879638156693278024323812521554624956388982330136290167049424094118582772096018451809597401164846924711716262902829627380939680535156293471439360777268668365604921618839689307971611636791474486517596411076810461187507596434260046979222951771970881882637300844957670414379573068900594030059669462435172746064402491699639256585470646371028345111692685583568972301562562922256758180181085480072911408202795425250027969499463641174613001079713276428421215191667447359883645715478755796737199406110184987838747951054762875131236948669154666701738693610353768722184367702584486223362096024384484603104446694719810676365358898796150078397378880308527506601302713337537470154717940902510142689198467640659012705019749229659196945434251394512811731664749976526521575163913656404283679160697284832403491752877439284481271499113105959231314317691378767826586965558827309006336474296703042302766970494721137069514776117071812137188441976088074396467632977148030639633204112209971813503021630520258087179296520213138286076436343573116739144719310772751735156402034501606390456169140121695688607125183103173251813914671347610021351582630598950972263101156473693547645926791369585126525848123770842541512577658666859445930626122772214914414428878443618845511938720224570647898061530301191130932770667765716795587750061205748309356694807519519675049350933068580375053894078242210199468520630330003161545121375796842051755736417199147757963284334866394276249640731433231049313954526161951624809572619652276996303120934045809848958441871638077879356764855185283339151315501229746330405881302263457753882789573262935098772141915955008754732738429440981828735729272802882701434622480077709131642461504208927055033641377102447767720176633847373823944955329314383832782143590012811927685177026789234911929577093962457115800486427160323294733691288587100842884523422947373759687195747031917611825381748929965338560830322621555697476051991779833983757024224308964473525520615691348057039080995096707558993173247103410555911126189269896588730810492029064501420933855518163570985872578414596537490581577386809453787410688705142748561393081836124251051324584698861388478139283569598076892767321443716553246412277259380509438802329441648705346383613734547877712888220362688053129344779935227318331396329401655637306388721745349393876059195313192731747216875912473534083064724394534423226971274516443125664390773514132844684527673669092932331255685956744208760893026251638308006285281531125557486527757107669977234989257848144696133615593927212707645061711788280447683309281341206400131653863420785992756287508115967050826182726890127091142835164557166691300678394990747493429085386293564966123136506231068567056989317384966475475729360339009395818317246772969137113875763412531168727939516546447462848160915288609593976373135718583011204195966912413852164206268427095555948610761307815791560355585910426147327321102341134387395444132445427019438961472388259276810758042673037214059651545259592406090068506838010231567454628094637254355973489738412673187077409391969169545123360596500128359039361514821593508030148522205228449973734972174002553108195263247639174438853119252163722614381071194775578403064409455019374052283926424489955638366392986417357495741112108742236903909428659619606212619900649574073585165166583918297998340673134762427650800452972036533098907970092878703482852833490281729498858731156264911226877099786698157523214591321994816532369903053664184550576973511700913443461257437675437472098084407017674888009625137498476466436818879720524380130001916537522732804698998210196055682123318139008022653778279715652658727340997456249218032227963658719808122825441145385176983894549215846317551213773007016356738334267963377888011544300061222386574258747191915588698617637837212717814756142051324008302080298650994166585880612515919258375738246207644772437177730335392539644865639849308897774064728887770437363216880581815066468852825832858170229658070845319130874032026316629150366399827042959910139581792401984719737440786491444999030986092724355755641888514009652129027999591099530921894279904701093752999885648973445224343373762636465568559928662660225367743242647517117639887521310379396989258168883666755250191993348321142152864927369234668649063028652063843003316973499048911633219208658516326528768740257621395512872408369502229664467552427061041482906643131699241509502631730714053932028098939427452444970068248194791910834306048571684029297039763506306003677920029786132935369270257069918171451215129218456327859444234926254208150987962386182798994154872735035689186439260489113584084457851762452138367055101379588122088844841306204874692945577566193189114109700874804492781437652540985226374341144719703543609354328682925954034266359991157018716516446223344660092640717378693207071014181491854379467954573981289282127187230877577110472130570576015105977305257910229508244095738723967730842098391729083715169089672956523592451123266861612656114937473953741130882127624277059388150081629717639957137442000516378123556553332349275408205751508548209994904127879234614825403357223962515911129518982040378620086754855361296612014949915205044289352069213501405997863521354165348782511867122622716426639791821261702368775506733831743186020155130943146663966007407244597917005719991265853620211871215693990090865326620251912533146988791177682866417571901522812420520954626741756852429297080414669100168753560040054760117697607946028484195290870973497362267381612404260749108299672450420697873731172732775674054385367218094949835013674973757423265370251319346466334678075474375906897432558238767579231146265140826352088422254545690686302743333477665277149035167938674924154842983621768748297426546172809743534122395481353193555875026625899972752500022321576082052828487883396792123138094495203111492864041134795761256726095663499686254762052539889279642048007404275482585612511343844033096850528226343612783861307535354140366802884442274775822100977205037665851810599890007341178775130240696632601594694061697231625625860004620538862779963203630814410243245714819549757828073441407122131050844039240224163642095196215306864657309686247074858678000635402415836405930550459058799511632845758556493533762990549187485016639012256731683580040073341731704082434264243561194791703596206015014846543656970640029940075455836423615054869940691591288967540111562931377745992026685841553681405592390900507543705586848434089001303884903488059141717942395691356277350339460187131843419289217935265295704356916529054605633813938893737767409366779159372882254232836716324580262988115146013874569597106960026911351914668502679283163961953086528727793944040518851106607715147835491925402383222147418855338357535739845538867786357060338435261036202368258020761466669889670691822601560184917436779215254347489960930087319530836518444337988344598187203191595434829132950413104197804486083026745302512606864460474736420264409880729091060010368627194325379608471121667642965001108323387523924855835054547593985702842329940726838791815501738849577938132081507924442944174718597397264098866829822238109143654804816673202408821440775080110551433710513005759571403757096182158076893681914376156120366821040079723970732533775297717113208811739667056486197044324270922989003211680035846379754027311741122863788335461268176688251174205660568758427931660106752538935307255339039355388757057375250425837093302168454705863145996845095042151313295262463259661279787231685169235050323016586688299833499115629856113737828434665438782484735547300584910063985708776012855041724554864958256185127598519785482694466456563490174364083687348114832431925384869094951858531131186801480404938023454443571034693096579794784282688250620550447004592047288521549204059159028509660096017875307950532319742036173203952041761503785819360687983493313089577551873561446412395575710594370027055187478904534143877344909963663735297933632031693194441131986356078620539658905801102236737444661108267332204176723242428802368200731035237320543765666828751910067807455585241166705139054718355894926417783921107593070742530185305927934025258466866218767376534792597033669822057078961298957496217109258353525748391156704355202862658731864850654926248935721796777991022299873209352867958121188810265931762818554937603100731645526362256769968645627563740131303913187747664074382451124596816950157537126085105444310397381169417181279755364952019062060800318321532221104576465370046063753472086774044100444414676557036622159972786835290325849755928597463426695781953163866965969052547199558811862459755929880206105062693162596966564969090523328485578382332426358809045831759393541573654498007053609291367872036111445231279494806931031841205524707641695256162632063010224942774570614275679640385413454072868377460757627086865145342680411059337436108163325287906190993195903620201661214403352143421814822960031390185721117950110818389291340253326486009897862116192130278391424657241044004963932456332370837203044676250871218583290978562214724386902489542748628396358186325956900204476723680860137151218998668021260767109942583224787827906233417831491624545860788315526165511635197037561922517899904690761031753872124042336536173826882605457634858121101471892751287742889625763093890478605491801544520792057578574375773201143929421480324074646141024278246772158921139478563054405229834847395540267665801516476465649906633858677249697918200443907759577085140538201853478765762117960994914145101764724959407470640463811314680073362866017160216055901670762363844476940433763519832222385027792750981080965530232813715566803117769888159323419674153708883977329384943689553768541789213946129813719122880362388613061590039120847635432704222352763497996891937276538781966653887199495265671013361386797466770701748928272976698049303363099194915667274909798041151694131302731875286034428026186929184304362229619692102502128326871687296959400302085212456821262169947535776150082836000223031048009020371350036539197512764290221947644788009144903781547616778821484803103102745494206849074992779830389209747508799417151536020207175883478394172905960788120783232579015657004053498129914455441618389610549539868266323811924818208880604509127630703993255747870363319837810567597787888248562918900718803552796004261069194657586185596777323973185892714770276436504734272537002948160990428552665125608477771575963058090305035115286941440877623389294911460277602637191173693793231079024899815378902648788493885795214168271309254640593363869703425269994239287771226535309826739493886296423210090644214129966601915093662511467744154185692679773644695709701672608468044373005103438648018171096398607426443413194281519283533259981445906676653664312034448007510997631193422830884833006737772887744686368777653538919592111949951373489944710830951650076413715452663964540719349734000663229824949598114271366375624217568372270930581796391817021771734034804435202600593398262992169912934443430494160632096045871344133239156139910775140126053555363620216919941247411877562901224722321989970134286623258958498605964077449818088184783496838986907729353462388738014823594316384752835667377359432034427008829688816033072344951707746090028382556104976370057205866084666487901937011251702362871920843956238611037186048336332441746362113871081603050950760137657339038936536596933851722041992305843336304901453452571715630307405640050171237176240125222557358332930710738041186084749584740450846611590610786726669986270473854160586469256252168384869883596851589288004569216909578136486049118663430702671507574735910444281915534186018197115110593685299825714958042538520471370923783862810373944427764167480823665142849781516572576659578160735209456505359366276175015044857079506949581097412535399513752605101582122333384186945231604776461746644687207899376798357792653596666581824693709787573041587757626825069517113369429081460885782112243077774167939979145984687560083045973141222583991194116736510260934423567193666909628226271067954142670416399861275578343838128155755377702692215310376282921807545085658277051619371602033888713006177339575658405744622442355225853961935039933219714558173292667708157166916833886949301548495619142336871670282820976529735014754467417983365683174117809170080328865238203402509223643245295215135732316886815093541440338066497831425192534469707791058531207292816542931530093442001376701232809955022738734490848042941077563991314157582176472360317911138496886256725677367798535879492979280051355429572780533908274951671490815885229571886451377910940010012673321183872398403321907312091527491690998932778856646700965310668633894463320063118790564548548680468929222591042338228420943806756554406415931090291538143528789629740994863591079711320495984207677768776056308656173482219428268311986921414524482951641166995052008686213317172019535225407298322183791610925122947801778616107589077345869377990653281139028741071735597803862826823503904687705298499157856081719712796392689492483355489380957823523151647371561894369978535447318492691386953116508279327857453984504066238005909847859372464174431153967057270158951933229971026010966691002647873844722520078261307977064543610448466409873414879293871473093770897730342188974916791516079659719631290440856802730239894028254762897599982086201797037774350455318445666421091272654386376102853322186923651805632319156209526417184248540024807358600433160247811092932618503532768368430167126161193398063991915395134237015963224689432846551459273641605647876407353197376326052974132020864262566344092487103313843164740701039613572905063871725731123431656363638983017301386812075627738970033704925617216698715754404765227506689591570815979652750336513064156973513088297698696477005797931273090405805324066030602361512119840369813400472419573729403873434074573160162870936318068249575178675647763166913751293933551646401329625534493843177325624465230372869642679078724392280172358972274796335813356986697385312329187363931167837979111403879151351225430729247112426650129104919284568825235232455725351552224363906641354967564821570365975247995194169878249598512813403591842113734352236034910030599591245451967209058347539059536190947433656585914973072966125316763518711707788780035041883398613275851057398845335005672095171230325334135754312046899114278318582949758025840627034073495122556098906615537245941205241050630832317495323472933706045476448135324622130249061967088040634256046633681463998139104615271598326353633335243659421316638748257095222430616324419633409773550120132726761874278343852462953247386966597193056825342009690607297567265709899931944826256174731047305094081727770841080440016328196894856028563604702780682709363667848710891858610272205043503944199299286748350079640312927864906304355154798671043210363438224540663084637003896566824195029371811104076856777325671062014465716574261539700730333018675634121018453203461781631294981764229198232448947654253783388204297001920517253136683270888989223979423417588630101697507592396076446071605672776440131159545850932553540460963555258875042206253533925856199633623872569538946264824099914287390183680108014685374620969458668067114850551017647802720372476318759518097294889667098388787511578895623400536394696909686982089754739465395458755824025627145860540874654096413723593095786861445483207390022439985873830588574664429664328016256793764664176593210650680088966473569586028063185778696846067901539484777171526008932126642124726149000234264622535507932061596730778639639322994194566230181315095849815600439054976860942354245780811250583700351160679186551987899007553450837968473873566770319473147476749953987063615776202643846558316122703715582310812032981020745887175302830579849877162396208954934582206235358053066687144876586531305671914153856979556448429896161954702428046020131267519937687942784998876608574424998618033186526320893410380410615897192637383212667814571224040666584728535219469735065470507466917541842491727590582415179332124764074275007615003561577219703985592626963898540408123901920954693863945334300894449076898006775718907497203849104045111950488579240549422430862215686448461635287540273933678378844195074450255145986318612166430395304017670650737974685138684856887920372725287537626880802277074988514877737086561392592097851272353742818024979368746610359299993821608029744496422263548547379227059308330732006560207940874965636535953389748254985558222428424330864460444917636632197361629108476540664208138353154832367022269303011778867713003519669926347227092605460218997631456886988546452742315709205780440409392361149984816382171251958377059474144369328217951856030362908523108523320063836177218545129144151675726728971709295080995491115727738994384523099426017049570788092605348295244510790430809310252002021162900702972004743370313805442485273713185126694838015211112954180162169003605131100343992572258878781008043930175009769360708537294998309182845117912092938413455780854377238800073118887421690605050678371370274063825715320860910620948562818451293617405229491236178678754278932510338478945063584831864172120232848867941761893175916936978589066485863729545344061035238414543782144041420795359232419130120814019590644487393845413057769719569362935783498618412118335138847775489214231071866809710199171908881608454495198717226829803613782208248938966092151102736556383497239013516522084118430594971074187519260946766667423607181318562263393260060663288717977893874080349690289502370587468658530985736835159292642558195601284611160860487456916132188445668274130918453531643472494048279511660213922482152284451162576937159479526872950903047337162660821805029600708501290793495192214286757581386114297917781127145691164585515718567911708522043336429297534300930577150477197470794166974719236537212770910044441149771285775283181049923538686195299106209763353070616873255072368061193988813137514561690385137083968163734396360347928328336563595006220960934830733065521338335841965986235454589498682179372157178621143188814181528148836823240009313917239615618819685916460559824760451892578522401207920356914008125649666362232615846019270768411703026907820785686893329687936007326486259085396965025670221843906365927274024874373060432645146595290306316201392153119798490572148328091329727540219633346941261473165756079426541378711351627269272757052944951094355168530350261245111562524094741072397641389854917843735109228705666266863564318304340300463039112532153772402056001825404569674075795960482695655750098767071905821033260887679978762025881061325337213163524622779581816972175555663637210876981896507755878807206231301747997616278339215979267473884231317543544712452852114555647618822488813490625396727766305946129050714786088423305048954173700588940427019522843104010086905515156909811517470970474323555351456229248573825599238197370105299573364893745750391351067788061060527046812509973058875643642096985994846004078611902478115985749938866763374390207356150215198771166488048581440471218124332859752158358015616660187047654002371295814353685889164385419937001586245963586686123227189249339843703303467679680488282425879611225214199203660669304537817806007418484543257294498646404096533225791315505537497715207372656046521498454410484618808462877318221533855177115026118801994635309492636704866960405453702180044263190730170186585393782170839546858732775601817761449580514710578003629573446698223526303276734226490467503004836350690787693180419256606367206975754427565647193757103622172723445912571921412299915576801160624014585320520435926902108223783097157413714400856842549485204781754909051139596113033072378955171738006815746107126582544226522618574999884662865437801703547910979352686377121384449362061338382596983291230994834971550479538621580428614474707245992895951108596353356806792208588625391355419712148342585326639448556448414437163323753111363340625419447936908942309059384977968558654468049438582343818038934475031358918368904553362235318960285027300982643072000467590624020979094167872273398935195854660177797067882015023199367866518380157778613872943331744050423399154264127572590316747837829937185838805929919930426357165171535205844319577554107598132285773629025750828527147869294916738495703358765482635112741426231530287972819515170191843245039795145568805407271280931405842189126545621691903281208244330021380936941534090926737001841378878232358824105952882091391122376983197385863111377095821200758977598655636124137542127167825095347247242493240787156813316762909697688864136617808861689815132468231141188094757116163402600963896457848764885057333264284354504937279338775019887183472529765242120841857211466394385600886129299536196104160966949461244421470876475635289658360673044133988472412908346503168644044604661248748712465204802503052422913247662994388842262879693084905772957000634196203224713014001316324485989167462563998596759472917793384738934828062167583801086989253946454905163667273365009826486005589759567623881215672865627059042146648672881327891063995694457750315379828488812880269962995872715826927673202525599988948924553574496455072613992039779209442466653855719582532255207207153068979266405561447716075597208003386115629512060258961979286373743813337931101772517953360698302031325001844985453129783938956301615754527286888929780663765211591009120443813269934515079913668898214910192754399304618341831453870034267125170721505066917586198732535221716916597559836503614379370118425547846931569036557590812044714028782560536961879256523449737057538949699208081652250218260123107062251099566298529927581162698576168546631586946049600127140987141317674460410902993224596022062324828491276267223741714140055313279819368014780323282408383224067009467800172584303162404423355760504326823431706740776861818994506012773534445613456631600402675225760377368762722021968052635826828120651984513278838416227839164392949867613026178865022522692004106553797610247860158988661216559547229327484286711157186964559739720520556436315158359781162799170405180320792416230576841207330921642427914971360147358390054635718803605053812837473635557695381145693736966197784412835427730682455377495472116907945998421668486206685639652442308850167256008495070585127947385980542764963491704371533238862062927529061728993687103715584617381449133650067934551429741997596233806357685350458313224546984096007149813473419575258362349731564468684291660239721484472043256211659727453894937763642732739820546069887466309796309447539968295322423746786761899588378272444571292371367413474447197434276820309108466176334054973272331173340111659361442337130792855312977415847609894557657244236135360575415882254468739766648258409923847596862145560111671406474246039147740994441351609557249626167418534932138685355488646277447161488690787234126802880936621565723899904615884548341472638437772090419017559362342062609301959534466652230774497315103874040974426330140216732414915907495369817982025864413682320190304402284550455106186758899229547597245258424329265319033989076324859178607488037746916527718266949417024120162124868059437809624404252426704159384001199136240834740094617360560669898139739645400311944527017550131601104533280441817207649685008412565052535179862086175827433761623348775986952355976268937519226183084278136545349291670649785347842730455081487877293986813649230888836033911523597766312541091611558308804656825040751880201229000742627616764846092999606733478252567564690692669504889322114105282631889525319858323705525911497612288157996632667685670674150846432327565528609123127086077539690737908771138085892200113245294049889922704737554162844306763132343665963132039823822365456559043777707552305193196770793605848172893387453594424454474013959098664586068848120392276052089591591308873830873345317112789906683626082510250289631190568481346881428473945619394593511266715086704096809000035241384030443602237087033327542922826698398494829325813183260408718893212433059617843940587229933901382943262992336198408409788514398330434599960440396485182583066248982823883042200111255085981898391448344844015751684471609252769042652840411485899734910885714254073490007645062005967803838338350515620582705664016191350475064132715818275524670604480386741711701135361668073237815153729800159901327889495086187129604447582390156419305608703427826439346018905984357281977986898496611416847526529975227719636005017771483921982957544197799709954130121091633016282666472057665994141283170246327843904936295814914169455433298130711317392343344536477614717883848576748172715876667106217813834587606343570080150703180822107697621328830605698506305609033356175547929890746964404950767451267747106159270327510593755358827880906472517244109777980040119286343261893970180775124057054774158177970221802579963540456256569061867723885060688202164035260408533918104432069412762092767961756595762676589021880178838196631141734156532209197898820016385683655803586282227835323540770476387548613240989563105953577728703740467085125879358539676422989918253524305042736487362952197862376130430552678640237349729018968430033265542780883750558736743752261945449029876696946612108224851115124942879425375009248761228804637428658896795153370852897642290653016040206069997053451309942591115365763315347798585143808043185383293137605133990375187081546565293976821820681678976667143825155588879797300722377840466564345393925544396615896674799718417150813477090500003898193451616746130407776930778672242012416461426697352259907686766455115834355953750908750468801886412209297018951915865714966322975970231743912119114106738120788423635459798468818392838721078133776550259766032933645790131678864392198922153478445210797007411829472852520896641724546528677899228076406095090087054355112053831012039363483887827931984497205305580640089884147850679614566821898948479674022244113913369887487652583123461801329225543373875617324208320681859309093341218594477765154347005165214923914454731564386152568222327274320958552990828960284112884233856381741112323189817039205176818285148223632011326114683897977754234839539859773555387479931478369465852786548627650813853724070487089026934104735632316188699054916850121902617757361251685208213541489423125264663780298582285404482769756412105522055863664088568917771323306300523891885066913901475208601262155693104850152972747067125562727745608865730314711297367302397805250438620696620826528991710532990343302838492054402628712678922427512444061374297112648006020563822297430010181285771385041656979587178970340526369080649857004814587864116807509544571472638333034374444934753562266027341209926917981677891921750897515727238195821470408569780330165534206129720507627843830335242167825939925171230104851587860224644439220292020253252521515829520218725721656441148152957244204914499245531265109309283531415930597420172103218491273772895034798650668137487351895169131869380823743909292549280691725771478618398588851733810124489829934377473370053370068252656647212635214606968547927504809038433155753162266329616429449015410862283066225309223030055256064379392216273751092054318524673355685810347451754467300668773538268859656515445954574923648729683873935557286856820970937068655945793715092808131171747403868732588043215625794798713241960194139927877235454587568468762746272019100094498768878435303678674043109734750924359994293734355746752800574597686230559451123952878914382180299790800323290843096781932073569058248305026863533285657386011004060766594502913168774569065159241049643726694858160418911013311490706738036543681700409684130695301318926665944626256463817919659855204483526903636334206401621354856147973558569067520506511253677092000344997303422716188357301982404683865947269583956684546963367459758762687671678204149310431797725100520798570137927948407559741374061481883367972415208467850517662863773339874292705113236025748070303373436449698506471836270575534367072477137900735911028494106738086952233620846769094804738713039865343227698048631407498839757989365214479653306186066720098433994778082034252601056288009952122283076954922176813820889628483465616421754123937579558193754200095019239139515555511223697405926455097278440331386885178334434554052038015454864241788988257555470096002158416471742411410132996885100140752406174456919083750028326577637466209951318990330737079201943113542966688636484421817970036239203330453206764934536684736355707322326827785876446310370573555594566522654459815454790470955048621062330510444683333038786245129101219361371510125280334401845995354716355081414363331143924307309675133524204853828824109943599655989890178320729881597902725812942771540675060969003063075143063594335159290803487756279512698080233303983448523903763359578020680403822826869215712204567152735947916516836123801571638451477512947633273928861312235512576987086278058220742708761872709578297417052880180662367826500231390634119435668470543727684869857682890608140863953707420877680764412659167163724061796739633033065005264111522515204885857558654834258914573545195512032180353594911695051378068719810556006895666360047309899697571949998411847437091347874733077520204574436565617262186793285390157914385444947163193179238783098002974102908514885479387830864484899289781518304707739376905740671105223300022583960963928395194012317124630264096534995267171526593770055565730102494501137676561913334587750246583294305250495353130891578871532092316372373133107902309220102841925745042896381868642367418745319420730865142002648204585089869986704818966935411839771621427485830775501646076259582071540977268704166605867826554568530493151242347823449624187048865683437944276656029782106486814685177512298790716326796679143241180948696299889708040355541198052387600659238816546438629657921933326303838039366429868607257229153586409564863587715116286506248407497620036497639682708720641591753907274496783732165772299744820271810956549362372807148941506408038206953482379076431012118157117732910126914164048218394564547100247423760878689918169039921521753045153136140852307023421248049548015885572583792382485175500534204824970481492908940320310430809050323007986533558215703588782544545718278427626486375885747827314014521764649075125614840753558736191501676141412501389041086207604364613946110943290698832808350946105405659106878177534966935163165977743784854970520032448041881269436554799191892238890741452952579974686319705933896006655839221952956620159751151666300129475309250350785976428156893784305478622359782685533113861735520731866174351824115841845075091997649633694047866430158123243404433057388021248152371142388316099631832447205081549938790835458611253943435564824171299287489119366707640567857774181325253233507979780771975461697394241257405396956542526065849971304547348847901021479486605612704247767646084737041513530671846138948561060030258907065141688239455904675293200356117950112887673328192319125625450112001441334554826262046043961154178777018566846299911001936816697919963389400196333444219082726126561961439286151423991499109774369393437975616583894807974648514443152564762608988320176773626728380768044611965217042661464062080139705149376171806476488738827250154569276638342192678366431133871111025133072862691969096467500425521305379670524615424717077214067299329167718710591789934002289122069747920433953864968281665817890773234078288875249889546074590578021210045020175846649075388442769801561868206680361142266963414252212701874669272948450859264833052568909056061160609027359184255550131690394077096720368166451553160609833896170781715866268750533758548369182807948608780968625107433984390434235219689740367237885674707704507030700597244015754049856015155058928190915694812731538478889554953381956036083413176999479211030070256296238738351346477023693051810382793957412886791553484931648794808844286324406999962815018551120571300130535112365975815392599766465092145349546061127412046819415225926986188716476056849908748119793304841105307635909081982031362197358414422316767268043098239315181137479061734502360873745508395271506258881998152137286301123636845012754834291165393438286951173209240049799587871290266306404165115829161019204881466233120224197635902895287152465704419993236013589982120474846271345840260611228369146254161192044127219280174741005492699430065610779347520954299270720650387651378861176589218001361087617775409717699262796015976536682841105021059664122075404910323076215802321801490368864524554178452977152697573396110449811096336643650973261681886798344414251669250224998533937199407689970648423521941761037033886551068960149333137371722361296472034150664556620292222683537040127141078291436736093570890846188142373958232245787503986561211010450137490946828402032613144801907279288018920751978234534610262408946310152037618441950323372778709960576820747366052518528388812006417666180087401861373515895458278191176440767682077611697073274163810947190349871592916000621071323440142391532644306688082924938683364588261228996162358510568247905595841766424855277606907075534470052532713604689867684196360667936729004058748210752703690582852587524292351670119901397237694282959815729865739583855822949365306356393915948828577313698981442774794707665584106781286664956274007171084307394120846271084144220384654297665542790977252203936545409559594221915876466565983276517927312109637452041938454476903708734290815286507123649654266467749616718795331528641404301235882753816634993816753568289004479992478192683752604759132474627756612961000581745982917363087175573302426078515416609069164426643196313914584560126544290921166479054390986891864459370224685320335100411031886752698293827320896578394742343752392404174187327761664303245103880308371741165000643275630023932633142124856864613839455387524460883835247056445230671943050578332861499695214574918673021229404253734683027773313743176432192583951191913236970762565695716840327124880325930914779807518816007401993774234221794461913879164577142778140583620285187482254501254780617476909707221619667136778860802714594724530597985286751745300483760149830490374318122069442090705009423973432872916069092401278307983254836657225071642951238528724138838574504391218505180992122754344306417613772561319645961095192874830637228486233492444491904268558980004614112652158744705099772253265288419466337449702012118823493884966713120693120582224051534971354793790579910847464242156789336422637453846505595136532644728156836277997378127893681071581923934505832928373516022575817127739736575756865378797460471263725175192803271851926819917519383686188517784400435220379006466153404705216541111363986878921739723739896607992639335605097808466640645060973299641467192720137922397898565627219164711374815726090587366358047829903172491757500331384309027495081387152401636448384580814486186637697087649689231216276249532384975371921757162088038760829349873080877249706384919119527981958190516873110807572517264983816623232205603988358157912992461349984204628724405823867426023186896007333398519510459422904668181847357590156918607616331138009353807527538592211061653529680787460840337585919547522274221559932006125164812648451392909851693330515235916955355721591013597659403166816081731576169618811781971177795842089107519036325768932298882133054753656397633873210525368153651341260914098941072219830872711334487119709246568789747359480982755252152430402157014447380207090760786408265205545137559732000800203136750199256298419497315924197202893994081817702434459238430923245234575791683932861682945847124118958937423672717813748011917449413425060927640713687024598045661303952113384013415037432914883493033636158000130588759332472546201048166403710080511673970680927719260588960348045228317232803681187031272506450618629138861001275954148566415095600081015308217088430975829661490651423859763132193660525117633388134158638217519049714767119063945723171578151019595179218912729338551682001453030819043454878245408263437500120254435442376334044602833812761305154890870916870343146715245652773283431041407392860250480796803485192806596809855333297772986668103799435700742354867077311314589712272131788641879710793233868427693207194387420730083062528118643285570520825547326752348837863723225294085957046976403282869202911899456522208121620826458236485403829445741128331629382084816009173825727982745362705478457038425615653445181021898078023754297882055318390558568805474809499629743584484479518248026939110990875290364212204536332706626128176468053408407649243109388979549094928082647431373786179467142988191638288941225785348943868854632528599402913545489154484053068978162863823000366160237819716753451310493666848144862930450839567184713588568720601921059768004898348890777169855867038685678689630104228620027696190848737373593115559489316471614742241241080915717759369507297908390256697208628722732076075083433157804018595982216321305273881207658074452046050754827966442452381402017094824435270368061319011125926752655181876954087858148018718169579570729272694811666295639408633390466351259744410532863779156045567748268573798664900319980347698852661715714418485150351971611338457054814071731561010311297700803013892035659824806376504489316277200564467982215399291293815609566984236664361860965342421210479582059584960463891055303905596666930735260688627851937917438369125360883055927544388560027145080571797004532153325269863702949511264830010485917986200317248423836494080716911582330878681178100817517430784215819553290074107638543118831542337780918612111718398640817469867853658537784796684100354795672647383581298428564496194855634992668338556800017467144246309114053233502145105635100954667476387259109043659409570451628107003693334435646437801867855817503020706261095751735198245598952555068326031742238547524726553387803327296382780133921837788043654626876383362945442953469045674139219118842149941525260493144551517231835450076117034756695289843264617957174777984619140625' ) ; +test( macro , '-94906265' , '5678' , '12032097777224921443610910803648284170512319198440026582654592944907996997711020183354851559738136209876116410482775406152550319519617501575389742141362538671375575270130368782344375460094542930957208982333657039900983512378934606414708547255120509688221248878365002162079958544994081468523927315675060726868126226367119441190130650764598697841259026377226201673036205220245238076301842775410518683141308488299366012792925609747073886802877596666532246689317196865573110094049146280756613633385237048709371024252858686340623252312452593430321228085552943679754605680459379364986804128577790131289118408139954294866373981926459619424848669839958145224015329056251464187884540803724925854941893314508739139448540059027532063346594260009340289063635135268446417517177773306225826478834782126901952841733199463653563757819068049198556549112038207670677005457584687670138285992773936407404706326519609992105860062869525897101616064153489988499260854115519937665672793315389915719723184695407552227493961904033933034506875702096849362495327673029771455889030501830242732676146364350412302869011748293967864940422889128153590781271839942018607109535085227963257602139998078826097049418704998656236212402366601095688523413673512998518901468183798514551196413118699461621524416262734189234150826938615238369409717915433788697444341087319545108423271713647606132458422133503476646278312763913773672381574955638642484777319177742615693192492030931928334799325795983171516582124249978689831869160939605527534908432774284025724078112334305143452973560047389979442428241832752514170684582991619064835042076127845136974614077376818874608487426791468373615242293672741372298898215088365221162041567250511944704729950839359617629579145185451647138688599424451528822613292149181525578785717464355469269950910358964367355548167095991226459148148416836033320461350750016925333661337306860380813570244138594176200254338594713997700943753269483275676699592254818599648860765855658967021173586910470760937291362350281087625944947663940083612371308499706464739236243824369828191050651890831355140821021009799707142643546563126154302728058269983835130462112445179485724829519948644797857100978445782729948146775639685486727347085571030457542493031359599157910012477405633462126888771916787753215333242607039830155744016882502462503818969602202111471162936075917294595421685134910453228619713406894527040532782467138493248067630974131210865224589283318665338359787682806475430520542164582197378961886474218909120025123091615456874986351962126541772414045818060094363742441442667036502961807091952360039303360580900852680604055434020409419268918051690557813552959236488040160958755768871367230392867382735702108578451240872919059355437258914588914059658578625910689412928981898994374868014765744048731178533977420205065542882559318334473630109661521143300821787590642741661630560532599207482636782848372575108230527673435955097474563225203600719908173095140979638933646119901238452049016502626977563080111918315881318986264803301054759949431314581482431408037019249299434256675011740150791380650719740873599060034519923061234283942527829654746500679243122868491752528092330799766780299772695603288900967560796775174207884494845966890228277702276659444815563795433225980503597587408498869891219703208161074827864088098815419234882655313426926283791847398673264577617151571464296912550417563804886979853576821080050211194779490844153380677685847777313137638651644748358202947322079765399238487437874318841114773978903668929164955398911903679705111008999142589544437065672589266355348348971511169575378316208327903577552525930641088538955350354489078111990562226354820551745938135022897672457837517586016736813649699772486263689086502957138019177196070312090344215367177632397930739405411088757771866673597796220471619637645139435250941374184393351858539017096692099099345257001920271362387534252371917508119267325168864330673891152067448719178429752412191066355929358566249659077077560550302293786857736765866388524626228805050725063109877803065961191644600499168820792325163292525536974162404755526606943846795314338495539699560103980570000575730832399241743616051296198894674663823826249501962992317559847798100096759179383956869860153118427566631515292600888345422893802197242997389457528273662177569851158066854725418877583679801690209473560655905719642363040982739123254770408905429249758124187443434793269173022194566001870880813212255626734666407333284872705324976206677741658696075649608364892807470963909485110281558432545948579534204538696827102504407100425376019173981304010256984425288381928914573699655169020850451341503052441205769215186509836760430481696523650279090720163816251521349287308560407457609483984181328774565719714613388489095110023571061353122279353104129328013968956403235071785261847838169630745374996406189906650415573552174116649660276541371408913476854939747876731425608814138059458169543823165972801614100937621904382981944188903180205906327482865751979701901540575440519486923023420935041930682172192953852334672415568738221940582193314983240970450000477463045431237229063460109818726294597730994303217381825651493935869034862652936559019431947352777726119926158367810617503147922958376143964979603245915631333786351234314954623412494887023938633377421208202061177648550247361016141144451615061150414512561947705053352442969412639758719469809823355676287459924284669684459858991524522914802929760964195910108664304507593383032621305399692953057899447189106733091012594841503936991785388985322660311685783354745007380474195833316048135155967714601451196311606046191001166178941116722830537202351353675803239601270737264305300314769429948779160815303098446558150519469320909471850141905795161388126098051093418801571231958217059570635407936987518675272606139316846781769414872368547904423404977322742616034539497477291204678516696339549373290014129953927115273383862176648175885100832898131993707682449845814289537783195056908822732162500604957529260337740262458814285530991622691309191620743536827546586516016261289544348330822509040619411107336690611176859744962777081961711988981244490119102057017123472693131597991997040909096393811129374410032160780720267920557429521283544362429347063129854641992658572996108093014481102752542992814642875292835964120599399273647779564854999067324549593959628020136971251523507807754590744694873740047390084491259174712701241947149566007259569113369875274948363558659130833317516389511341744440804095510223434955552652210614743910169826529392899468656662706962138458679700014949089569408033941330187462290588839847072683578505493439388126630655399425769894783841874574481277512426591408213810373551314332889400820073202400253692361444659207630759168415095760789533492551330583140574981012731074049549919118053417150217808638350432013305694321389747006470410615077305764765120127628910927114025496289209479659319746699938956841225054827585736797719039052465086433182830701745898467197621237268086386733129150280583409523728139312677689819712362202660229834226632997964115903142152545104059172086002463963414350578947905947216633376664142189791562053019113774134585010114509991806040543148515641482014416718677876276580431730562587541020555292496453826361453188845475398099905277525052773545411713921648813979140016300112385588170999474985918656553076765214200080620922916851475745553785133089372514034029601819219527045772849932738904614873836099307092123571006738447715320002736785859704861742282537734067792187177608073549859135742645615364728840961736910729008697313304738536298720611573424123582407824500642154138363464791319257510414579292323013964798548950290960997144513319241370751263381191179501838180558724038708020579905145157293231789686223459443044018289699299028761818401590134930047434655260646434988879638156693278024323812521554624956388982330136290167049424094118582772096018451809597401164846924711716262902829627380939680535156293471439360777268668365604921618839689307971611636791474486517596411076810461187507596434260046979222951771970881882637300844957670414379573068900594030059669462435172746064402491699639256585470646371028345111692685583568972301562562922256758180181085480072911408202795425250027969499463641174613001079713276428421215191667447359883645715478755796737199406110184987838747951054762875131236948669154666701738693610353768722184367702584486223362096024384484603104446694719810676365358898796150078397378880308527506601302713337537470154717940902510142689198467640659012705019749229659196945434251394512811731664749976526521575163913656404283679160697284832403491752877439284481271499113105959231314317691378767826586965558827309006336474296703042302766970494721137069514776117071812137188441976088074396467632977148030639633204112209971813503021630520258087179296520213138286076436343573116739144719310772751735156402034501606390456169140121695688607125183103173251813914671347610021351582630598950972263101156473693547645926791369585126525848123770842541512577658666859445930626122772214914414428878443618845511938720224570647898061530301191130932770667765716795587750061205748309356694807519519675049350933068580375053894078242210199468520630330003161545121375796842051755736417199147757963284334866394276249640731433231049313954526161951624809572619652276996303120934045809848958441871638077879356764855185283339151315501229746330405881302263457753882789573262935098772141915955008754732738429440981828735729272802882701434622480077709131642461504208927055033641377102447767720176633847373823944955329314383832782143590012811927685177026789234911929577093962457115800486427160323294733691288587100842884523422947373759687195747031917611825381748929965338560830322621555697476051991779833983757024224308964473525520615691348057039080995096707558993173247103410555911126189269896588730810492029064501420933855518163570985872578414596537490581577386809453787410688705142748561393081836124251051324584698861388478139283569598076892767321443716553246412277259380509438802329441648705346383613734547877712888220362688053129344779935227318331396329401655637306388721745349393876059195313192731747216875912473534083064724394534423226971274516443125664390773514132844684527673669092932331255685956744208760893026251638308006285281531125557486527757107669977234989257848144696133615593927212707645061711788280447683309281341206400131653863420785992756287508115967050826182726890127091142835164557166691300678394990747493429085386293564966123136506231068567056989317384966475475729360339009395818317246772969137113875763412531168727939516546447462848160915288609593976373135718583011204195966912413852164206268427095555948610761307815791560355585910426147327321102341134387395444132445427019438961472388259276810758042673037214059651545259592406090068506838010231567454628094637254355973489738412673187077409391969169545123360596500128359039361514821593508030148522205228449973734972174002553108195263247639174438853119252163722614381071194775578403064409455019374052283926424489955638366392986417357495741112108742236903909428659619606212619900649574073585165166583918297998340673134762427650800452972036533098907970092878703482852833490281729498858731156264911226877099786698157523214591321994816532369903053664184550576973511700913443461257437675437472098084407017674888009625137498476466436818879720524380130001916537522732804698998210196055682123318139008022653778279715652658727340997456249218032227963658719808122825441145385176983894549215846317551213773007016356738334267963377888011544300061222386574258747191915588698617637837212717814756142051324008302080298650994166585880612515919258375738246207644772437177730335392539644865639849308897774064728887770437363216880581815066468852825832858170229658070845319130874032026316629150366399827042959910139581792401984719737440786491444999030986092724355755641888514009652129027999591099530921894279904701093752999885648973445224343373762636465568559928662660225367743242647517117639887521310379396989258168883666755250191993348321142152864927369234668649063028652063843003316973499048911633219208658516326528768740257621395512872408369502229664467552427061041482906643131699241509502631730714053932028098939427452444970068248194791910834306048571684029297039763506306003677920029786132935369270257069918171451215129218456327859444234926254208150987962386182798994154872735035689186439260489113584084457851762452138367055101379588122088844841306204874692945577566193189114109700874804492781437652540985226374341144719703543609354328682925954034266359991157018716516446223344660092640717378693207071014181491854379467954573981289282127187230877577110472130570576015105977305257910229508244095738723967730842098391729083715169089672956523592451123266861612656114937473953741130882127624277059388150081629717639957137442000516378123556553332349275408205751508548209994904127879234614825403357223962515911129518982040378620086754855361296612014949915205044289352069213501405997863521354165348782511867122622716426639791821261702368775506733831743186020155130943146663966007407244597917005719991265853620211871215693990090865326620251912533146988791177682866417571901522812420520954626741756852429297080414669100168753560040054760117697607946028484195290870973497362267381612404260749108299672450420697873731172732775674054385367218094949835013674973757423265370251319346466334678075474375906897432558238767579231146265140826352088422254545690686302743333477665277149035167938674924154842983621768748297426546172809743534122395481353193555875026625899972752500022321576082052828487883396792123138094495203111492864041134795761256726095663499686254762052539889279642048007404275482585612511343844033096850528226343612783861307535354140366802884442274775822100977205037665851810599890007341178775130240696632601594694061697231625625860004620538862779963203630814410243245714819549757828073441407122131050844039240224163642095196215306864657309686247074858678000635402415836405930550459058799511632845758556493533762990549187485016639012256731683580040073341731704082434264243561194791703596206015014846543656970640029940075455836423615054869940691591288967540111562931377745992026685841553681405592390900507543705586848434089001303884903488059141717942395691356277350339460187131843419289217935265295704356916529054605633813938893737767409366779159372882254232836716324580262988115146013874569597106960026911351914668502679283163961953086528727793944040518851106607715147835491925402383222147418855338357535739845538867786357060338435261036202368258020761466669889670691822601560184917436779215254347489960930087319530836518444337988344598187203191595434829132950413104197804486083026745302512606864460474736420264409880729091060010368627194325379608471121667642965001108323387523924855835054547593985702842329940726838791815501738849577938132081507924442944174718597397264098866829822238109143654804816673202408821440775080110551433710513005759571403757096182158076893681914376156120366821040079723970732533775297717113208811739667056486197044324270922989003211680035846379754027311741122863788335461268176688251174205660568758427931660106752538935307255339039355388757057375250425837093302168454705863145996845095042151313295262463259661279787231685169235050323016586688299833499115629856113737828434665438782484735547300584910063985708776012855041724554864958256185127598519785482694466456563490174364083687348114832431925384869094951858531131186801480404938023454443571034693096579794784282688250620550447004592047288521549204059159028509660096017875307950532319742036173203952041761503785819360687983493313089577551873561446412395575710594370027055187478904534143877344909963663735297933632031693194441131986356078620539658905801102236737444661108267332204176723242428802368200731035237320543765666828751910067807455585241166705139054718355894926417783921107593070742530185305927934025258466866218767376534792597033669822057078961298957496217109258353525748391156704355202862658731864850654926248935721796777991022299873209352867958121188810265931762818554937603100731645526362256769968645627563740131303913187747664074382451124596816950157537126085105444310397381169417181279755364952019062060800318321532221104576465370046063753472086774044100444414676557036622159972786835290325849755928597463426695781953163866965969052547199558811862459755929880206105062693162596966564969090523328485578382332426358809045831759393541573654498007053609291367872036111445231279494806931031841205524707641695256162632063010224942774570614275679640385413454072868377460757627086865145342680411059337436108163325287906190993195903620201661214403352143421814822960031390185721117950110818389291340253326486009897862116192130278391424657241044004963932456332370837203044676250871218583290978562214724386902489542748628396358186325956900204476723680860137151218998668021260767109942583224787827906233417831491624545860788315526165511635197037561922517899904690761031753872124042336536173826882605457634858121101471892751287742889625763093890478605491801544520792057578574375773201143929421480324074646141024278246772158921139478563054405229834847395540267665801516476465649906633858677249697918200443907759577085140538201853478765762117960994914145101764724959407470640463811314680073362866017160216055901670762363844476940433763519832222385027792750981080965530232813715566803117769888159323419674153708883977329384943689553768541789213946129813719122880362388613061590039120847635432704222352763497996891937276538781966653887199495265671013361386797466770701748928272976698049303363099194915667274909798041151694131302731875286034428026186929184304362229619692102502128326871687296959400302085212456821262169947535776150082836000223031048009020371350036539197512764290221947644788009144903781547616778821484803103102745494206849074992779830389209747508799417151536020207175883478394172905960788120783232579015657004053498129914455441618389610549539868266323811924818208880604509127630703993255747870363319837810567597787888248562918900718803552796004261069194657586185596777323973185892714770276436504734272537002948160990428552665125608477771575963058090305035115286941440877623389294911460277602637191173693793231079024899815378902648788493885795214168271309254640593363869703425269994239287771226535309826739493886296423210090644214129966601915093662511467744154185692679773644695709701672608468044373005103438648018171096398607426443413194281519283533259981445906676653664312034448007510997631193422830884833006737772887744686368777653538919592111949951373489944710830951650076413715452663964540719349734000663229824949598114271366375624217568372270930581796391817021771734034804435202600593398262992169912934443430494160632096045871344133239156139910775140126053555363620216919941247411877562901224722321989970134286623258958498605964077449818088184783496838986907729353462388738014823594316384752835667377359432034427008829688816033072344951707746090028382556104976370057205866084666487901937011251702362871920843956238611037186048336332441746362113871081603050950760137657339038936536596933851722041992305843336304901453452571715630307405640050171237176240125222557358332930710738041186084749584740450846611590610786726669986270473854160586469256252168384869883596851589288004569216909578136486049118663430702671507574735910444281915534186018197115110593685299825714958042538520471370923783862810373944427764167480823665142849781516572576659578160735209456505359366276175015044857079506949581097412535399513752605101582122333384186945231604776461746644687207899376798357792653596666581824693709787573041587757626825069517113369429081460885782112243077774167939979145984687560083045973141222583991194116736510260934423567193666909628226271067954142670416399861275578343838128155755377702692215310376282921807545085658277051619371602033888713006177339575658405744622442355225853961935039933219714558173292667708157166916833886949301548495619142336871670282820976529735014754467417983365683174117809170080328865238203402509223643245295215135732316886815093541440338066497831425192534469707791058531207292816542931530093442001376701232809955022738734490848042941077563991314157582176472360317911138496886256725677367798535879492979280051355429572780533908274951671490815885229571886451377910940010012673321183872398403321907312091527491690998932778856646700965310668633894463320063118790564548548680468929222591042338228420943806756554406415931090291538143528789629740994863591079711320495984207677768776056308656173482219428268311986921414524482951641166995052008686213317172019535225407298322183791610925122947801778616107589077345869377990653281139028741071735597803862826823503904687705298499157856081719712796392689492483355489380957823523151647371561894369978535447318492691386953116508279327857453984504066238005909847859372464174431153967057270158951933229971026010966691002647873844722520078261307977064543610448466409873414879293871473093770897730342188974916791516079659719631290440856802730239894028254762897599982086201797037774350455318445666421091272654386376102853322186923651805632319156209526417184248540024807358600433160247811092932618503532768368430167126161193398063991915395134237015963224689432846551459273641605647876407353197376326052974132020864262566344092487103313843164740701039613572905063871725731123431656363638983017301386812075627738970033704925617216698715754404765227506689591570815979652750336513064156973513088297698696477005797931273090405805324066030602361512119840369813400472419573729403873434074573160162870936318068249575178675647763166913751293933551646401329625534493843177325624465230372869642679078724392280172358972274796335813356986697385312329187363931167837979111403879151351225430729247112426650129104919284568825235232455725351552224363906641354967564821570365975247995194169878249598512813403591842113734352236034910030599591245451967209058347539059536190947433656585914973072966125316763518711707788780035041883398613275851057398845335005672095171230325334135754312046899114278318582949758025840627034073495122556098906615537245941205241050630832317495323472933706045476448135324622130249061967088040634256046633681463998139104615271598326353633335243659421316638748257095222430616324419633409773550120132726761874278343852462953247386966597193056825342009690607297567265709899931944826256174731047305094081727770841080440016328196894856028563604702780682709363667848710891858610272205043503944199299286748350079640312927864906304355154798671043210363438224540663084637003896566824195029371811104076856777325671062014465716574261539700730333018675634121018453203461781631294981764229198232448947654253783388204297001920517253136683270888989223979423417588630101697507592396076446071605672776440131159545850932553540460963555258875042206253533925856199633623872569538946264824099914287390183680108014685374620969458668067114850551017647802720372476318759518097294889667098388787511578895623400536394696909686982089754739465395458755824025627145860540874654096413723593095786861445483207390022439985873830588574664429664328016256793764664176593210650680088966473569586028063185778696846067901539484777171526008932126642124726149000234264622535507932061596730778639639322994194566230181315095849815600439054976860942354245780811250583700351160679186551987899007553450837968473873566770319473147476749953987063615776202643846558316122703715582310812032981020745887175302830579849877162396208954934582206235358053066687144876586531305671914153856979556448429896161954702428046020131267519937687942784998876608574424998618033186526320893410380410615897192637383212667814571224040666584728535219469735065470507466917541842491727590582415179332124764074275007615003561577219703985592626963898540408123901920954693863945334300894449076898006775718907497203849104045111950488579240549422430862215686448461635287540273933678378844195074450255145986318612166430395304017670650737974685138684856887920372725287537626880802277074988514877737086561392592097851272353742818024979368746610359299993821608029744496422263548547379227059308330732006560207940874965636535953389748254985558222428424330864460444917636632197361629108476540664208138353154832367022269303011778867713003519669926347227092605460218997631456886988546452742315709205780440409392361149984816382171251958377059474144369328217951856030362908523108523320063836177218545129144151675726728971709295080995491115727738994384523099426017049570788092605348295244510790430809310252002021162900702972004743370313805442485273713185126694838015211112954180162169003605131100343992572258878781008043930175009769360708537294998309182845117912092938413455780854377238800073118887421690605050678371370274063825715320860910620948562818451293617405229491236178678754278932510338478945063584831864172120232848867941761893175916936978589066485863729545344061035238414543782144041420795359232419130120814019590644487393845413057769719569362935783498618412118335138847775489214231071866809710199171908881608454495198717226829803613782208248938966092151102736556383497239013516522084118430594971074187519260946766667423607181318562263393260060663288717977893874080349690289502370587468658530985736835159292642558195601284611160860487456916132188445668274130918453531643472494048279511660213922482152284451162576937159479526872950903047337162660821805029600708501290793495192214286757581386114297917781127145691164585515718567911708522043336429297534300930577150477197470794166974719236537212770910044441149771285775283181049923538686195299106209763353070616873255072368061193988813137514561690385137083968163734396360347928328336563595006220960934830733065521338335841965986235454589498682179372157178621143188814181528148836823240009313917239615618819685916460559824760451892578522401207920356914008125649666362232615846019270768411703026907820785686893329687936007326486259085396965025670221843906365927274024874373060432645146595290306316201392153119798490572148328091329727540219633346941261473165756079426541378711351627269272757052944951094355168530350261245111562524094741072397641389854917843735109228705666266863564318304340300463039112532153772402056001825404569674075795960482695655750098767071905821033260887679978762025881061325337213163524622779581816972175555663637210876981896507755878807206231301747997616278339215979267473884231317543544712452852114555647618822488813490625396727766305946129050714786088423305048954173700588940427019522843104010086905515156909811517470970474323555351456229248573825599238197370105299573364893745750391351067788061060527046812509973058875643642096985994846004078611902478115985749938866763374390207356150215198771166488048581440471218124332859752158358015616660187047654002371295814353685889164385419937001586245963586686123227189249339843703303467679680488282425879611225214199203660669304537817806007418484543257294498646404096533225791315505537497715207372656046521498454410484618808462877318221533855177115026118801994635309492636704866960405453702180044263190730170186585393782170839546858732775601817761449580514710578003629573446698223526303276734226490467503004836350690787693180419256606367206975754427565647193757103622172723445912571921412299915576801160624014585320520435926902108223783097157413714400856842549485204781754909051139596113033072378955171738006815746107126582544226522618574999884662865437801703547910979352686377121384449362061338382596983291230994834971550479538621580428614474707245992895951108596353356806792208588625391355419712148342585326639448556448414437163323753111363340625419447936908942309059384977968558654468049438582343818038934475031358918368904553362235318960285027300982643072000467590624020979094167872273398935195854660177797067882015023199367866518380157778613872943331744050423399154264127572590316747837829937185838805929919930426357165171535205844319577554107598132285773629025750828527147869294916738495703358765482635112741426231530287972819515170191843245039795145568805407271280931405842189126545621691903281208244330021380936941534090926737001841378878232358824105952882091391122376983197385863111377095821200758977598655636124137542127167825095347247242493240787156813316762909697688864136617808861689815132468231141188094757116163402600963896457848764885057333264284354504937279338775019887183472529765242120841857211466394385600886129299536196104160966949461244421470876475635289658360673044133988472412908346503168644044604661248748712465204802503052422913247662994388842262879693084905772957000634196203224713014001316324485989167462563998596759472917793384738934828062167583801086989253946454905163667273365009826486005589759567623881215672865627059042146648672881327891063995694457750315379828488812880269962995872715826927673202525599988948924553574496455072613992039779209442466653855719582532255207207153068979266405561447716075597208003386115629512060258961979286373743813337931101772517953360698302031325001844985453129783938956301615754527286888929780663765211591009120443813269934515079913668898214910192754399304618341831453870034267125170721505066917586198732535221716916597559836503614379370118425547846931569036557590812044714028782560536961879256523449737057538949699208081652250218260123107062251099566298529927581162698576168546631586946049600127140987141317674460410902993224596022062324828491276267223741714140055313279819368014780323282408383224067009467800172584303162404423355760504326823431706740776861818994506012773534445613456631600402675225760377368762722021968052635826828120651984513278838416227839164392949867613026178865022522692004106553797610247860158988661216559547229327484286711157186964559739720520556436315158359781162799170405180320792416230576841207330921642427914971360147358390054635718803605053812837473635557695381145693736966197784412835427730682455377495472116907945998421668486206685639652442308850167256008495070585127947385980542764963491704371533238862062927529061728993687103715584617381449133650067934551429741997596233806357685350458313224546984096007149813473419575258362349731564468684291660239721484472043256211659727453894937763642732739820546069887466309796309447539968295322423746786761899588378272444571292371367413474447197434276820309108466176334054973272331173340111659361442337130792855312977415847609894557657244236135360575415882254468739766648258409923847596862145560111671406474246039147740994441351609557249626167418534932138685355488646277447161488690787234126802880936621565723899904615884548341472638437772090419017559362342062609301959534466652230774497315103874040974426330140216732414915907495369817982025864413682320190304402284550455106186758899229547597245258424329265319033989076324859178607488037746916527718266949417024120162124868059437809624404252426704159384001199136240834740094617360560669898139739645400311944527017550131601104533280441817207649685008412565052535179862086175827433761623348775986952355976268937519226183084278136545349291670649785347842730455081487877293986813649230888836033911523597766312541091611558308804656825040751880201229000742627616764846092999606733478252567564690692669504889322114105282631889525319858323705525911497612288157996632667685670674150846432327565528609123127086077539690737908771138085892200113245294049889922704737554162844306763132343665963132039823822365456559043777707552305193196770793605848172893387453594424454474013959098664586068848120392276052089591591308873830873345317112789906683626082510250289631190568481346881428473945619394593511266715086704096809000035241384030443602237087033327542922826698398494829325813183260408718893212433059617843940587229933901382943262992336198408409788514398330434599960440396485182583066248982823883042200111255085981898391448344844015751684471609252769042652840411485899734910885714254073490007645062005967803838338350515620582705664016191350475064132715818275524670604480386741711701135361668073237815153729800159901327889495086187129604447582390156419305608703427826439346018905984357281977986898496611416847526529975227719636005017771483921982957544197799709954130121091633016282666472057665994141283170246327843904936295814914169455433298130711317392343344536477614717883848576748172715876667106217813834587606343570080150703180822107697621328830605698506305609033356175547929890746964404950767451267747106159270327510593755358827880906472517244109777980040119286343261893970180775124057054774158177970221802579963540456256569061867723885060688202164035260408533918104432069412762092767961756595762676589021880178838196631141734156532209197898820016385683655803586282227835323540770476387548613240989563105953577728703740467085125879358539676422989918253524305042736487362952197862376130430552678640237349729018968430033265542780883750558736743752261945449029876696946612108224851115124942879425375009248761228804637428658896795153370852897642290653016040206069997053451309942591115365763315347798585143808043185383293137605133990375187081546565293976821820681678976667143825155588879797300722377840466564345393925544396615896674799718417150813477090500003898193451616746130407776930778672242012416461426697352259907686766455115834355953750908750468801886412209297018951915865714966322975970231743912119114106738120788423635459798468818392838721078133776550259766032933645790131678864392198922153478445210797007411829472852520896641724546528677899228076406095090087054355112053831012039363483887827931984497205305580640089884147850679614566821898948479674022244113913369887487652583123461801329225543373875617324208320681859309093341218594477765154347005165214923914454731564386152568222327274320958552990828960284112884233856381741112323189817039205176818285148223632011326114683897977754234839539859773555387479931478369465852786548627650813853724070487089026934104735632316188699054916850121902617757361251685208213541489423125264663780298582285404482769756412105522055863664088568917771323306300523891885066913901475208601262155693104850152972747067125562727745608865730314711297367302397805250438620696620826528991710532990343302838492054402628712678922427512444061374297112648006020563822297430010181285771385041656979587178970340526369080649857004814587864116807509544571472638333034374444934753562266027341209926917981677891921750897515727238195821470408569780330165534206129720507627843830335242167825939925171230104851587860224644439220292020253252521515829520218725721656441148152957244204914499245531265109309283531415930597420172103218491273772895034798650668137487351895169131869380823743909292549280691725771478618398588851733810124489829934377473370053370068252656647212635214606968547927504809038433155753162266329616429449015410862283066225309223030055256064379392216273751092054318524673355685810347451754467300668773538268859656515445954574923648729683873935557286856820970937068655945793715092808131171747403868732588043215625794798713241960194139927877235454587568468762746272019100094498768878435303678674043109734750924359994293734355746752800574597686230559451123952878914382180299790800323290843096781932073569058248305026863533285657386011004060766594502913168774569065159241049643726694858160418911013311490706738036543681700409684130695301318926665944626256463817919659855204483526903636334206401621354856147973558569067520506511253677092000344997303422716188357301982404683865947269583956684546963367459758762687671678204149310431797725100520798570137927948407559741374061481883367972415208467850517662863773339874292705113236025748070303373436449698506471836270575534367072477137900735911028494106738086952233620846769094804738713039865343227698048631407498839757989365214479653306186066720098433994778082034252601056288009952122283076954922176813820889628483465616421754123937579558193754200095019239139515555511223697405926455097278440331386885178334434554052038015454864241788988257555470096002158416471742411410132996885100140752406174456919083750028326577637466209951318990330737079201943113542966688636484421817970036239203330453206764934536684736355707322326827785876446310370573555594566522654459815454790470955048621062330510444683333038786245129101219361371510125280334401845995354716355081414363331143924307309675133524204853828824109943599655989890178320729881597902725812942771540675060969003063075143063594335159290803487756279512698080233303983448523903763359578020680403822826869215712204567152735947916516836123801571638451477512947633273928861312235512576987086278058220742708761872709578297417052880180662367826500231390634119435668470543727684869857682890608140863953707420877680764412659167163724061796739633033065005264111522515204885857558654834258914573545195512032180353594911695051378068719810556006895666360047309899697571949998411847437091347874733077520204574436565617262186793285390157914385444947163193179238783098002974102908514885479387830864484899289781518304707739376905740671105223300022583960963928395194012317124630264096534995267171526593770055565730102494501137676561913334587750246583294305250495353130891578871532092316372373133107902309220102841925745042896381868642367418745319420730865142002648204585089869986704818966935411839771621427485830775501646076259582071540977268704166605867826554568530493151242347823449624187048865683437944276656029782106486814685177512298790716326796679143241180948696299889708040355541198052387600659238816546438629657921933326303838039366429868607257229153586409564863587715116286506248407497620036497639682708720641591753907274496783732165772299744820271810956549362372807148941506408038206953482379076431012118157117732910126914164048218394564547100247423760878689918169039921521753045153136140852307023421248049548015885572583792382485175500534204824970481492908940320310430809050323007986533558215703588782544545718278427626486375885747827314014521764649075125614840753558736191501676141412501389041086207604364613946110943290698832808350946105405659106878177534966935163165977743784854970520032448041881269436554799191892238890741452952579974686319705933896006655839221952956620159751151666300129475309250350785976428156893784305478622359782685533113861735520731866174351824115841845075091997649633694047866430158123243404433057388021248152371142388316099631832447205081549938790835458611253943435564824171299287489119366707640567857774181325253233507979780771975461697394241257405396956542526065849971304547348847901021479486605612704247767646084737041513530671846138948561060030258907065141688239455904675293200356117950112887673328192319125625450112001441334554826262046043961154178777018566846299911001936816697919963389400196333444219082726126561961439286151423991499109774369393437975616583894807974648514443152564762608988320176773626728380768044611965217042661464062080139705149376171806476488738827250154569276638342192678366431133871111025133072862691969096467500425521305379670524615424717077214067299329167718710591789934002289122069747920433953864968281665817890773234078288875249889546074590578021210045020175846649075388442769801561868206680361142266963414252212701874669272948450859264833052568909056061160609027359184255550131690394077096720368166451553160609833896170781715866268750533758548369182807948608780968625107433984390434235219689740367237885674707704507030700597244015754049856015155058928190915694812731538478889554953381956036083413176999479211030070256296238738351346477023693051810382793957412886791553484931648794808844286324406999962815018551120571300130535112365975815392599766465092145349546061127412046819415225926986188716476056849908748119793304841105307635909081982031362197358414422316767268043098239315181137479061734502360873745508395271506258881998152137286301123636845012754834291165393438286951173209240049799587871290266306404165115829161019204881466233120224197635902895287152465704419993236013589982120474846271345840260611228369146254161192044127219280174741005492699430065610779347520954299270720650387651378861176589218001361087617775409717699262796015976536682841105021059664122075404910323076215802321801490368864524554178452977152697573396110449811096336643650973261681886798344414251669250224998533937199407689970648423521941761037033886551068960149333137371722361296472034150664556620292222683537040127141078291436736093570890846188142373958232245787503986561211010450137490946828402032613144801907279288018920751978234534610262408946310152037618441950323372778709960576820747366052518528388812006417666180087401861373515895458278191176440767682077611697073274163810947190349871592916000621071323440142391532644306688082924938683364588261228996162358510568247905595841766424855277606907075534470052532713604689867684196360667936729004058748210752703690582852587524292351670119901397237694282959815729865739583855822949365306356393915948828577313698981442774794707665584106781286664956274007171084307394120846271084144220384654297665542790977252203936545409559594221915876466565983276517927312109637452041938454476903708734290815286507123649654266467749616718795331528641404301235882753816634993816753568289004479992478192683752604759132474627756612961000581745982917363087175573302426078515416609069164426643196313914584560126544290921166479054390986891864459370224685320335100411031886752698293827320896578394742343752392404174187327761664303245103880308371741165000643275630023932633142124856864613839455387524460883835247056445230671943050578332861499695214574918673021229404253734683027773313743176432192583951191913236970762565695716840327124880325930914779807518816007401993774234221794461913879164577142778140583620285187482254501254780617476909707221619667136778860802714594724530597985286751745300483760149830490374318122069442090705009423973432872916069092401278307983254836657225071642951238528724138838574504391218505180992122754344306417613772561319645961095192874830637228486233492444491904268558980004614112652158744705099772253265288419466337449702012118823493884966713120693120582224051534971354793790579910847464242156789336422637453846505595136532644728156836277997378127893681071581923934505832928373516022575817127739736575756865378797460471263725175192803271851926819917519383686188517784400435220379006466153404705216541111363986878921739723739896607992639335605097808466640645060973299641467192720137922397898565627219164711374815726090587366358047829903172491757500331384309027495081387152401636448384580814486186637697087649689231216276249532384975371921757162088038760829349873080877249706384919119527981958190516873110807572517264983816623232205603988358157912992461349984204628724405823867426023186896007333398519510459422904668181847357590156918607616331138009353807527538592211061653529680787460840337585919547522274221559932006125164812648451392909851693330515235916955355721591013597659403166816081731576169618811781971177795842089107519036325768932298882133054753656397633873210525368153651341260914098941072219830872711334487119709246568789747359480982755252152430402157014447380207090760786408265205545137559732000800203136750199256298419497315924197202893994081817702434459238430923245234575791683932861682945847124118958937423672717813748011917449413425060927640713687024598045661303952113384013415037432914883493033636158000130588759332472546201048166403710080511673970680927719260588960348045228317232803681187031272506450618629138861001275954148566415095600081015308217088430975829661490651423859763132193660525117633388134158638217519049714767119063945723171578151019595179218912729338551682001453030819043454878245408263437500120254435442376334044602833812761305154890870916870343146715245652773283431041407392860250480796803485192806596809855333297772986668103799435700742354867077311314589712272131788641879710793233868427693207194387420730083062528118643285570520825547326752348837863723225294085957046976403282869202911899456522208121620826458236485403829445741128331629382084816009173825727982745362705478457038425615653445181021898078023754297882055318390558568805474809499629743584484479518248026939110990875290364212204536332706626128176468053408407649243109388979549094928082647431373786179467142988191638288941225785348943868854632528599402913545489154484053068978162863823000366160237819716753451310493666848144862930450839567184713588568720601921059768004898348890777169855867038685678689630104228620027696190848737373593115559489316471614742241241080915717759369507297908390256697208628722732076075083433157804018595982216321305273881207658074452046050754827966442452381402017094824435270368061319011125926752655181876954087858148018718169579570729272694811666295639408633390466351259744410532863779156045567748268573798664900319980347698852661715714418485150351971611338457054814071731561010311297700803013892035659824806376504489316277200564467982215399291293815609566984236664361860965342421210479582059584960463891055303905596666930735260688627851937917438369125360883055927544388560027145080571797004532153325269863702949511264830010485917986200317248423836494080716911582330878681178100817517430784215819553290074107638543118831542337780918612111718398640817469867853658537784796684100354795672647383581298428564496194855634992668338556800017467144246309114053233502145105635100954667476387259109043659409570451628107003693334435646437801867855817503020706261095751735198245598952555068326031742238547524726553387803327296382780133921837788043654626876383362945442953469045674139219118842149941525260493144551517231835450076117034756695289843264617957174777984619140625' ) ; +test( macro , '94906266' , '0' , '1' ) ; +test( macro , '-94906266' , '0' , '1' ) ; +test( macro , '94906266' , '1' , '94906266' ) ; +test( macro , '-94906266' , '1' , '-94906266' ) ; +test( macro , '94906266' , '3' , '854839655154332653629096' ) ; +test( macro , '-94906266' , '3' , '-854839655154332653629096' ) ; +test( macro , '94906266' , '7' , '69352833223452036048019660867447049048422594495110435456' ) ; +test( macro , '-94906266' , '7' , '-69352833223452036048019660867447049048422594495110435456' ) ; +test( macro , '94906266' , '9' , '624674792670819892886821348974247157367038441509612832874984853143476736' ) ; +test( macro , '-94906266' , '9' , '-624674792670819892886821348974247157367038441509612832874984853143476736' ) ; +test( macro , '94906266' , '11' , '5626570371553000770366419421961255147770032439589200995227891474434035187239751962044416' ) ; +test( macro , '-94906266' , '11' , '-5626570371553000770366419421961255147770032439589200995227891474434035187239751962044416' ) ; +test( macro , '94906266' , '17' , '4111621002962352544426035475002050767022502971311441626541763763792261198666994629509192961845858718231919984114833985236172441304825856' ) ; +test( macro , '-94906266' , '17' , '-4111621002962352544426035475002050767022502971311441626541763763792261198666994629509192961845858718231919984114833985236172441304825856' ) ; +test( macro , '94906266' , '22' , '31658294146038073140673550517958143193937503699159895257943887308245045293131342388364082990134400198608168678756490519887562990165044958599474575834979005035731090290356781056' ) ; +test( macro , '-94906266' , '22' , '31658294146038073140673550517958143193937503699159895257943887308245045293131342388364082990134400198608168678756490519887562990165044958599474575834979005035731090290356781056' ) ; +test( macro , '94906266' , '24' , '285152565696490625870442272729395647608950351839474257315727256295452252799048325652363949074270810510446637480253626162460689279863201482867682864836827407863087624820569082929394398407950336' ) ; +test( macro , '-94906266' , '24' , '285152565696490625870442272729395647608950351839474257315727256295452252799048325652363949074270810510446637480253626162460689279863201482867682864836827407863087624820569082929394398407950336' ) ; +test( macro , '94906266' , '27' , '243759720926361233482907476667027740766805627065699088178027236643247725320494107064742082561094618490109236612895062687353584665860859991879415575955849317191261917932396860642093944856375991467562330107969332576256' ) ; +test( macro , '-94906266' , '27' , '-243759720926361233482907476667027740766805627065699088178027236643247725320494107064742082561094618490109236612895062687353584665860859991879415575955849317191261917932396860642093944856375991467562330107969332576256' ) ; +test( macro , '94906266' , '29' , '2195592394049166382906227581924066334663790360178733838688076505880403691220571309390729652591082755619543107564008226799137799080033434887927401578673812379447379840039807149661750004725486244752615902332029221197778610238611521536' ) ; +test( macro , '-94906266' , '29' , '-2195592394049166382906227581924066334663790360178733838688076505880403691220571309390729652591082755619543107564008226799137799080033434887927401578673812379447379840039807149661750004725486244752615902332029221197778610238611521536' ) ; +test( macro , '94906266' , '1234' , '9591583891277388505525115654797253189447136886605641096683226693736396854292872290512151998759360923701943145747583511134137237540129219701865806527338039412393513087835762990942813556773080107716234535870561191650361302039829302403412946075446106825412751297892836531217239269776359674130746921131965972537264150037423340241624478540689955102073116137675285513450572840589026258095131250791322081023453951176768841489407000043160535726118339631576838850502482585592200779524367753458287644483993004333076374919449019351020134267799153173432760508245927226301565370359856673809842061641312175092790578128981482583891661097755340718832041897219562172618233303238094263205645877970358113993768074445674320377240792952208045529432335140630061808861188401135379799521387052163956136888910117971768073860253216476475927368994288414942490447092525755875965929318466574353873454174423568978107060092961912237658617656324665296966703692085594297491801246417796157302870670019421897078307859164701722985884435622838840530890375919184262292483249645237441871417071068806838100941596745962353204182500699553236401634245625283851805217533262792073996012743903038338818229229536055186386872511025680807437338096861815569495459484486460365583028341745944192156249359977394771788868182593957987578355313292235026581979280145300928658410955632509870162005244044559296175541745959995285799355003323443377883778100846086239675150873016131996875930350018015992219350113946152537456877585388442767668614805636644492157477034654015002200777424371801710940679802301822648705115099704427481311918749176783544920736529548586139472683949148040458809863320043994900963476851393707718685357960075583333452093866553065546077049928960672319740544152092427005399888194730320253239832076741315219908647683627978170933321554476794379260071113837209591838667536304118212015385101618506499462338145076365933116172453086230618448544984434420121504363011969733490863691026519845481227162596252154043336808666820679272401041855392723131101974634161808347994859566559136073803551874710780721574809835031749728330936601228289711332942475487049804198344632033302735878413333870324928721703861529246383352099214222474224938703923296131257451581782344657338446171822905587284519270798848617615383853637901599987735072168595913644523892204610491256735570544171294439722701186324784813173174483048007173966323269225972341862131385921920832169574095034230665694523080098106542220271445953212355824376796872664899930405078699681023392941095533624834406183151593571978375085934954718772261954055173766598828049519860162686382244143267595319712518638744666104806572606245449198069667116209595882863289884166226287944224244325912368780394022898051057039098547506174697498113971272667929236765997561816214125329832660683430329906332085061140646573555743366393621599195976267935743727788827183517095321230820637742126067889019665213164390290062070086490541490087922889187502866643165223474222152292371630635439138794711457873999619661458114893978180017319683380126983120641424939879059628457874620836535554946801030253436946381021247115406263632484804383695320385114124544559909521290483278475119817164333705567704791958463532021771160857295222557768598737275557446539702002377398605084666447155176033668026697232370808420470009321148824428418389705572556366704189822047227135423662015737971723144128915366318163252037686350939438961105050312976676967329177197952756021289597791397338470443572707715044081895964751092291481135333163500784426335086969222350790452151470682249035744789451673722795644580346446427237748663833724773055738574222477446871501122860335729438705137534047869725490906711494592485106885753816974753130866230360407926506022819960149735054814022037339465954340178612152040319878077106430592659196961703359784146025873205470608826469128543078279531426173587139642452817225181534576963768759115834369507960533557518872119645633087366816494975254571143679899649491717075104399517306160274939826782873377728147095270888144396760865832963585642969396605820937742695276189538284034362525529116594250112268646631014509298531366336740362116463524994112518288361022718725186733909161021464483147766958810416653193317981915259425065001767448497554577639274204071071705244125471084327932064913256116544625655097111357879218899746235180031762344942760169055331365226140925327502639728177654134067427560672144839015071652189807317452445009056094721496371835728117777604974208279421394708930008595905196768223073852631733496851110527349046730941946132098007584486429686144893021869768040494264750853862282987486806138208661684993068425524750265051353734028906190482450851078570663574840036302550770980899456380758967689998731148592509807498959236086788270504035504990430792437032016856376680319178405811261802074955061597795727228291245608975661248511105127641151300865259290562972594488780807006164810445138616615841618866683247778933343790417183231981709585853401070402352247880227834733605154654208405827367703397973124817867577312294892836600548995170550964519017755920491134728378033326750515727791786492541954821643732033152252733475994603308334780140629373474610355068194857748405815128125330220343480629589196619680550886899725922137105216388200442015479933602992398666447348073001184279416147051990832666558273496164807310852154387305610527877711252422415258565032409894506552122659357455434448999509546516876567873333914554650709822738555250110914569231361810681278643896615945548615899639843813666952141996624167611621492507842243902766221696245619381375774605289899874210671753440701163534059875806083218591213612602297792283259653398593217024941897584586879309412954558704641934429167525386399311944692329646781017786882955521326213679515731031183203986702444464679264883058444930210295590055606165224085189224526495039065334701181368385574370869084681514830806912736541133960881470315237742308529215400374398116689039427221492261470641437661432564644402005790004197437786314907560361356740707196128715870019180872806279505931484886218059480821987893092959069213150697966414731390314378598567994448063764696914845544937095976949556292692796483284851190274166372600687071534820393215816026820899675947738834985468497728922675033232726987359807157258554534363387708729838351923974285515021519390503787211158967755318117395341875443593494088249677470509256804069203968911906532856935833859629624953249282547694462129874921376210457781519780672138068580237523242109758156352510154248725657237885230051785607446612712455877439910598727422322236228918026459822218149591970911650199903977933286839068419271139224493809573534424910810569507347636018232048772842840705740610444557659804248321191219347571463409422539969701913590898411004567236097895765842127957787359469025195874392074029652861324112210670977858242810226625126442091294631154867160280576157087207127738748079837969738346736272907326954078228907240806250022030103243471070942620769424250383227664179624295113595650922927103176569104163069362275506704125229083883227741648535784720713916998425594827704884440884048570231868405014498867352517286315804797924811180126154783110497902148043082659366781977209563715381227919869341778767396699280870862522931948944127530770998030252387371682413803951145767257140559728875692368709218878174221849437349204586631919443118989273373652595227172082496817103834248085354242741398581443429002334727240172368808661300231451115291328199507370065934925021969833175256299351306328641830228271353568846058387616229810955704081192557684947405779884509699286099118817298430699433547211009079482595408740285359093432367204533672009970779486719368138866188648840163573708869681067182080546042978337057745453023016747935779322389017812077413454635572131138070447390064042098690495563990815384766717508180920795876792077075958862404761890064984999921424416035664890724207484476976948663181789371914701106962448405463092701988465606503300165084244328789019795067098840871060483436479149382772059422903723115301669510704882112896208019251794996975248024340609600192493149267102552688418448337310468569703642800278151785183841360284358832347643596421881526596665057964053827050804071884062288727904628572069704994983452228398970557246268968220658737939309295962851885135390864007109076454907858176227575944339250250806424963701992166486681083315296440885760692193722152386434371762373410590481977858473872297435270131851901627945492845960665561756900237380050320337739114937222692715636345829089022971742750975497841816680681521790589482652539674743477542852811800520246939928822189145763731846324657221289024648931687399148099267044885671733352094184536756797510551247165871717923549062099764463998166198147288178913216151413981763321707683229249020148234875195737760846468403561985525050842464738232714775172951842741929209903518935372911660933298610653450385567441423081564273457132625038138122267839275539394488317379385537074050425412207154034127084217300615381424425706034294800775550428346687417563346954606915929811701307971860847947436154534973614176016275979962289620596506204146325423963174288918311054000291798070696992896378237251211848896156990492511653866861708727175129743629232669035317239800711664336916352757273273019680964663040723297535426909582937904934585625428123881208162294614263698939436684681006337738069910841585236458607359914206604759267241756962489475530594581950179263984531751086934103867126900494224276800810684669857022045988157595957258035294079410835500711458127756501041160821464860452114868285466846677033681168740753966890869829905162812697068968738906495545558280538657098494992456740410755232449109163731371774089491724693292280219243313432709883187604627083249554581032445654578001281629105731324709943235755260023344512209169158809774752301507192585314852433760106795543790072985084166023044553539415733291732895468679601579454025049341590670709620736' ) ; +test( macro , '-94906266' , '1234' , '9591583891277388505525115654797253189447136886605641096683226693736396854292872290512151998759360923701943145747583511134137237540129219701865806527338039412393513087835762990942813556773080107716234535870561191650361302039829302403412946075446106825412751297892836531217239269776359674130746921131965972537264150037423340241624478540689955102073116137675285513450572840589026258095131250791322081023453951176768841489407000043160535726118339631576838850502482585592200779524367753458287644483993004333076374919449019351020134267799153173432760508245927226301565370359856673809842061641312175092790578128981482583891661097755340718832041897219562172618233303238094263205645877970358113993768074445674320377240792952208045529432335140630061808861188401135379799521387052163956136888910117971768073860253216476475927368994288414942490447092525755875965929318466574353873454174423568978107060092961912237658617656324665296966703692085594297491801246417796157302870670019421897078307859164701722985884435622838840530890375919184262292483249645237441871417071068806838100941596745962353204182500699553236401634245625283851805217533262792073996012743903038338818229229536055186386872511025680807437338096861815569495459484486460365583028341745944192156249359977394771788868182593957987578355313292235026581979280145300928658410955632509870162005244044559296175541745959995285799355003323443377883778100846086239675150873016131996875930350018015992219350113946152537456877585388442767668614805636644492157477034654015002200777424371801710940679802301822648705115099704427481311918749176783544920736529548586139472683949148040458809863320043994900963476851393707718685357960075583333452093866553065546077049928960672319740544152092427005399888194730320253239832076741315219908647683627978170933321554476794379260071113837209591838667536304118212015385101618506499462338145076365933116172453086230618448544984434420121504363011969733490863691026519845481227162596252154043336808666820679272401041855392723131101974634161808347994859566559136073803551874710780721574809835031749728330936601228289711332942475487049804198344632033302735878413333870324928721703861529246383352099214222474224938703923296131257451581782344657338446171822905587284519270798848617615383853637901599987735072168595913644523892204610491256735570544171294439722701186324784813173174483048007173966323269225972341862131385921920832169574095034230665694523080098106542220271445953212355824376796872664899930405078699681023392941095533624834406183151593571978375085934954718772261954055173766598828049519860162686382244143267595319712518638744666104806572606245449198069667116209595882863289884166226287944224244325912368780394022898051057039098547506174697498113971272667929236765997561816214125329832660683430329906332085061140646573555743366393621599195976267935743727788827183517095321230820637742126067889019665213164390290062070086490541490087922889187502866643165223474222152292371630635439138794711457873999619661458114893978180017319683380126983120641424939879059628457874620836535554946801030253436946381021247115406263632484804383695320385114124544559909521290483278475119817164333705567704791958463532021771160857295222557768598737275557446539702002377398605084666447155176033668026697232370808420470009321148824428418389705572556366704189822047227135423662015737971723144128915366318163252037686350939438961105050312976676967329177197952756021289597791397338470443572707715044081895964751092291481135333163500784426335086969222350790452151470682249035744789451673722795644580346446427237748663833724773055738574222477446871501122860335729438705137534047869725490906711494592485106885753816974753130866230360407926506022819960149735054814022037339465954340178612152040319878077106430592659196961703359784146025873205470608826469128543078279531426173587139642452817225181534576963768759115834369507960533557518872119645633087366816494975254571143679899649491717075104399517306160274939826782873377728147095270888144396760865832963585642969396605820937742695276189538284034362525529116594250112268646631014509298531366336740362116463524994112518288361022718725186733909161021464483147766958810416653193317981915259425065001767448497554577639274204071071705244125471084327932064913256116544625655097111357879218899746235180031762344942760169055331365226140925327502639728177654134067427560672144839015071652189807317452445009056094721496371835728117777604974208279421394708930008595905196768223073852631733496851110527349046730941946132098007584486429686144893021869768040494264750853862282987486806138208661684993068425524750265051353734028906190482450851078570663574840036302550770980899456380758967689998731148592509807498959236086788270504035504990430792437032016856376680319178405811261802074955061597795727228291245608975661248511105127641151300865259290562972594488780807006164810445138616615841618866683247778933343790417183231981709585853401070402352247880227834733605154654208405827367703397973124817867577312294892836600548995170550964519017755920491134728378033326750515727791786492541954821643732033152252733475994603308334780140629373474610355068194857748405815128125330220343480629589196619680550886899725922137105216388200442015479933602992398666447348073001184279416147051990832666558273496164807310852154387305610527877711252422415258565032409894506552122659357455434448999509546516876567873333914554650709822738555250110914569231361810681278643896615945548615899639843813666952141996624167611621492507842243902766221696245619381375774605289899874210671753440701163534059875806083218591213612602297792283259653398593217024941897584586879309412954558704641934429167525386399311944692329646781017786882955521326213679515731031183203986702444464679264883058444930210295590055606165224085189224526495039065334701181368385574370869084681514830806912736541133960881470315237742308529215400374398116689039427221492261470641437661432564644402005790004197437786314907560361356740707196128715870019180872806279505931484886218059480821987893092959069213150697966414731390314378598567994448063764696914845544937095976949556292692796483284851190274166372600687071534820393215816026820899675947738834985468497728922675033232726987359807157258554534363387708729838351923974285515021519390503787211158967755318117395341875443593494088249677470509256804069203968911906532856935833859629624953249282547694462129874921376210457781519780672138068580237523242109758156352510154248725657237885230051785607446612712455877439910598727422322236228918026459822218149591970911650199903977933286839068419271139224493809573534424910810569507347636018232048772842840705740610444557659804248321191219347571463409422539969701913590898411004567236097895765842127957787359469025195874392074029652861324112210670977858242810226625126442091294631154867160280576157087207127738748079837969738346736272907326954078228907240806250022030103243471070942620769424250383227664179624295113595650922927103176569104163069362275506704125229083883227741648535784720713916998425594827704884440884048570231868405014498867352517286315804797924811180126154783110497902148043082659366781977209563715381227919869341778767396699280870862522931948944127530770998030252387371682413803951145767257140559728875692368709218878174221849437349204586631919443118989273373652595227172082496817103834248085354242741398581443429002334727240172368808661300231451115291328199507370065934925021969833175256299351306328641830228271353568846058387616229810955704081192557684947405779884509699286099118817298430699433547211009079482595408740285359093432367204533672009970779486719368138866188648840163573708869681067182080546042978337057745453023016747935779322389017812077413454635572131138070447390064042098690495563990815384766717508180920795876792077075958862404761890064984999921424416035664890724207484476976948663181789371914701106962448405463092701988465606503300165084244328789019795067098840871060483436479149382772059422903723115301669510704882112896208019251794996975248024340609600192493149267102552688418448337310468569703642800278151785183841360284358832347643596421881526596665057964053827050804071884062288727904628572069704994983452228398970557246268968220658737939309295962851885135390864007109076454907858176227575944339250250806424963701992166486681083315296440885760692193722152386434371762373410590481977858473872297435270131851901627945492845960665561756900237380050320337739114937222692715636345829089022971742750975497841816680681521790589482652539674743477542852811800520246939928822189145763731846324657221289024648931687399148099267044885671733352094184536756797510551247165871717923549062099764463998166198147288178913216151413981763321707683229249020148234875195737760846468403561985525050842464738232714775172951842741929209903518935372911660933298610653450385567441423081564273457132625038138122267839275539394488317379385537074050425412207154034127084217300615381424425706034294800775550428346687417563346954606915929811701307971860847947436154534973614176016275979962289620596506204146325423963174288918311054000291798070696992896378237251211848896156990492511653866861708727175129743629232669035317239800711664336916352757273273019680964663040723297535426909582937904934585625428123881208162294614263698939436684681006337738069910841585236458607359914206604759267241756962489475530594581950179263984531751086934103867126900494224276800810684669857022045988157595957258035294079410835500711458127756501041160821464860452114868285466846677033681168740753966890869829905162812697068968738906495545558280538657098494992456740410755232449109163731371774089491724693292280219243313432709883187604627083249554581032445654578001281629105731324709943235755260023344512209169158809774752301507192585314852433760106795543790072985084166023044553539415733291732895468679601579454025049341590670709620736' ) ; +test( macro , '94906266' , '5678' , '12032817648505424732206470115984402822087851800458754279636201919240648069545320866560153680915753098175361305527571944284392752569770663535206811189003646879509578656245380134150984700793677615365069140988087774074093292666569225253766058544069550347050527174441848464033769865947958339935711577356378541412264423970226396093645375936214905159261610350242858917417274825574404844112579056015150088968297195170716956710849024033030314901530321313136125969347224049980779583582657176881341711446052030096202772974538698445525008118596374161589518848084436336526803665941965555491104046737440894040963947109593967956480178145670129677453883803551841426177253469183865084475725595826142523985262137749463269279257798034486481726137836527313367452357290671314328438612857618515953366030368261430360540763695870271485039165724885752553866509861096959097856524796407276935782076995718449804132659747765788304047343356811406221119007276554404855974610764195529043031625022180466201811329438874115924370207854394962989072466937684755950839558855381231468598531110161791599549283779948049180898253978038930131391965203934491358832834904237088198978460478436435260346993291323788040533668759476466237387161215852475434944660862309069972151382884427559495414208822804115701913705271785723745174681820409251541457004542480297333724163305849231905385022165131472866706690289906743159860846280981424473469229829927326830076613963484251270728729574503814307791762786013555601416538606549575141032711025523511415888723638864251522238403514209615257991112949184147400897053839753457149809381976922528684839893079020417567683858076689900826568207181631852815210327645775199600779525983840187855012090137702437886138818889991865427565806357553975294746020041388619646758784835829444515981357443648673117967946792507459637166782407266051469231502300232276219189698940875042523547644156383005262958119279161427467899540186226164668917413440447866544343462167108862890696625841719457545138663417647004060269444482339780740345497612893664834632640370620127200676855405941531569747479245411572674091251818894475403815473239183886002466157193530057684670655605573446847521994094849382549641374712884009164471656571372198449910168561787316766669347248358805643837182081303781837240736436136105361562692457596834668246060064085754181237451898863990804515605190388337710712867999191679779786712129894970664010407413944105206949638872966539657011251994137558113271215952893544638320085154429394938826746648785358611940674926917169614084840845838330085461611673093497785528104711054917591387941532664903919365872012413967652428893771254783514729383993987904033719641464047625904368835612214247748109590039950324488045520862407963337473558506985216736383673379753911040520601562793518299011996503309262568208883619152964120357680502143243237914460301562979082299253093538389428819917042632652200784610277098397358002737455993489830854317722387980601693621640290144850488960430945867613445370736462277356198969776749170074469142959139228103077704779948067569593268552335250360809034517777505978089487420438155196173015195413707500749188879413696451279508390758428449841376760780035529721795084992757493136169128293321086137318909063123039058397266188325938039949845723539644433753473294540228295834513955127390193735537175144046212555694020714759166871608060391688382739009845903946202459806666413942788393631458788321174919289511304789355666166018710631603596670860213317167734166889129692249373293565808930204157031991011885528221419033566927244666672894213270515941662085431325595906230594776340409294990273749504264542573465334640502232608314606771517369952134843645398223542989247175132652279714716937433111501880963356885109815217790196450752957228567594353774344623557404477791808889243706743536894781675724627289947304719225770725660654839527433954061516841146022327990899330817724998757824990111295998009049097615922407581255190739491092231346117657541300062685972295196237757295575969914209258890395384934110805224837375196790993957760232726873726409663790983348867817606845992238136671232375378383442128153562558993510087405303974930371982970935436148399729480315961683220510601978266384119209049691241779665749455934311999233053059017638411476295376290561801091208176239186699145687486729178616233651626665713543619439901912710580944645778155158797462852234495229231406539206472287577297378192253982740258520802032184319738335496087808027150192808403729360390814153726899607792522414861087778808864723924610633595805110618744865362177310122714818412795648247881041310195803062313215902474261741174952685814591966714305480767184438698736320248721848847642234552533028696642298731293921638337742568224929679203340715151738759154672955264904729487192815222409704216298143439170015879950939045057249309073969228984931579994969781518397426907617306970452320824844550818387028299796381307177696815835155244322539561008715495766453539759717077193466845576102664991398263517768253493037683951482880594999592487164043876965317780003505760527667863680438637377024026769527929551980088550989890140816338761108689882533404008958689956441208348099517790655163832888672441196339023333523558262873440940381150551323449813051211874782355328615332116487157592812281631495362815861059878771091573384226171301604486063550985885547526084873950124641753676687247950243102682512625690242813329639053488889144642576604385864315139668920318181435129690631047099936094981891064896430786909547908075022480142180945007023530760518540471631799916726591085967028615767603414815858484391191419226449103172750734862583321173181611826808717155895467441107144481818474820145538915123191086233889850661674240080442220814781759930155904531817862470486365345886110364369758405347228549431644962312521692584793216958186300617894642831369657323204177058526995631057099851113254417633669886363824556236862260831309128178167803213227296932516696703169947834651505156750711821678584827987720266958112228898408860533624224495113943886752312598411859670081240718595741432294942764857421091909115884148224555916194806655809926642996956901825501253612530105826618755517164012710830281242388235631527379824843157390117320858596018324726028114634513731910537333745080425512204214923714850269287802358237211241477533384595700504349352943037853153152826576013563379638817785556868194091209215931133480115980056464675106593427706835334947158188177836411830984886508981465689899139213351717298512840062197481925426346012965958263308687858310254839246643736356288094423514700890181531946170936255870492888090106543963957053638462537602324269379083493214926494662001476819723144975153483394390016211234911521305578087159665053195506910683427552629512701423004114557334590767201287380253575889880716924180835742565545587297372230588277744954790269429956487792324583964844408254629753937326834163368789921452639360922619001644423905992054827955523551707437217080870067136099865977482032198335037959434533270675522876697240093272437334734369226923188059535469846991641709332683658104575190444624146274210567461025953960170291512193215781838523322046313242892959796365884825784776849648185822682474064256026698235271594627736075157465861135739641700807125348820678293047370189781363932882694927128285410177891393529704049003357809736578523395638279194743744900566551317265479571829718951144370147604490513174682721505873577926782362538993812368812010097486662549501136198241341798084746545706437440426878375892211248824662555732459007737499801554781654267879320262704068105933519284285796739713621966126525083860893611057628869197088116263187425689411609090653720984344418988835030010895382016374020344833711823116640310985731777663607552620413465337138339866989132413420055538428253299998808303388845963185188581487436300195905101117842154869015140378602684126069213877902049366627282585389279538334206573795995374258165195704570108297045710018639586996443344402990380550529595121860257242747783754028054652596757584727739810928998066179549536463070344995795834380103032675101592624345721957432323326573571256893898028138781425679040966486628547984753574864434930008117523845237304478890899718331660641419486842158394473459007167484277217322766481893195761391938895623708651566392702159311537448090535583956495076752757058074862172390454533499093851240951296540985779357629233421157703016528130291156343737642593244088633852787614747817627060006991669568592280723672383298225466281340956636710431940328427911743530915134552931031391690006021236672575108176444082447291342833803642309708607039528118937917030486917866538554824932145847913873347906410715580065154707297637925304057208331186121542705437629918199561558440077780020149125928636524680160377906904253706618745984744483286494859496634897033537125257750234158366566522768726012073504864415325607039305152748943100533772051166644314150037384337861942612593701611683871218292642963890517076695142661403572711320388033047007398654918216722136161411678662937623850123091604556006551841441589614125921909593939770390437476075298171895573919863135651088828848336011726492799841320111649935389358931258373693459145057553136475922751342605359538155293383583876955561910069358749936951011082089615693841896629336961254394974036986721026940350856347077152772939451280308399363104652576626172429793776211333913295809413213919318285255196490381055544205313396583888277769550637211217647203529389040683316967313521879297011278503165986866646581137787534538214235999303080897442666172258679022325039014548620740672684311806497429047056530576223713193356973396804439208879107248745042555605441287111013049709202762299259851107012441701468738419926890133556245430056477998293002461917643271629591853938120614647619772495115562085600504853146424640985096824494050598829781714618733157799877227971474455616632639023850925729720213591779252776369176312110497936405970870772189359848240927140061006848080799072830556306659756678997694657936924990345096410314626570672149731543628000558026533834459167842889970614149005288838811229513837405392153251553605330473659867312295620005340633564023904208178972115034037935254190823029327420408002622341072381223538257497215682930180996569122652703053739471871654162569414951520531206458862671624276235522538318964461432849995356820683233465138675410827490596964352422796420736525862662409202276892082905745273014755041772993819374747043291676296825571338645605019288235828607460219104472171905393978286058711994994075946946904501719626129891297785262794903831823520324741271326470009925340248044413698893160087471101115598827156017322849926448246890250940872800969912833939106037661646340854638183562189382226457787900923987531877913431946108694947652717492923066187775746930063437977519195800521298729848366280723108648799156318978065768015360592367479405252285966318000015191998608772683676758058031311468294723167697582272502760859874036909801930740974001192058591430098287098021570441654592505727247768282011756726844525801256651444301950079120380718219338329468008534442846077685713544194007524327955071955226200530986913459845314710510719058167265959825133876149104200332459364223361260375456263610906578083438476313348490161343553564484692187424842603773823747426008609267536178919597384345623591288999415207111940819590820240164261067200326676758012794725260339664703418163303398007586421287243859016657962176274532712513078145376826038329107151236318002243613099209970831731135481008172826345298961517973963163916705165676097591487481466079223465813873607872273761995059993093591322303896613664321628779241192911035846341115545622374501606127977756985292882117778296500478276339993749813331078686903702537331445966445686036256887898585809843950252338373839157713280364698259134024338989451358780140559424371687870519586950515334379886144076554360694721608275939343734737390935610438901882220547279311828445041103639111103188607674601360722196695674871077543938123944828376247570522481733445127428507577252676752726828669296273888040688955392452214259080886549295627930544496374040482414174429554699068859457610531632589984450033487991393950194379605142460240622750964605904319347162317103632880464489765441781176775360255307983114046972917021261575999747919513175356289269738252254493902081778863456041493700800804759871388208118144666431845192191907729537903174959385672176640184810677326710369561461912187493932368918706337698762794615949381684820435117964874003383886204354335841513328726838198927086809536254198720567097588143419818644573075112705490751622292191492544793418111741658483532767411666600528233897824313428372479855025933866719301492980684042893544902172403475761202059963960896638007212043160771550410552889811065116740233744236032304871579001993160935959555347073311004243774883544443676731406104831265297661674183379974269379741288515676564618943733469021389351199332674318818115012130962124777380484159115171369334822744164229342075923978372260068788894241149239047819830879098322853736363606047921128478685310683095184709943048770806054769494926160412480736093641419077309213991679052703634396648375610853612922041643781461899880570131047760466065993555093987696077930050904841973329976985820417577209060155514571722895551726144444596204596782453047002156424345570004197583274416101355362390738881463523630967387072211376360805282936674787380880650737793203297867993622101141663905879536696169691639238866186158654641243673999077254707876292273024963076334728546666159776798341058364962760500123648903436613222992540337677988477671022338118694216304682423334130149852860681684099263517683335157344038308938179479603858917811593200169277994326389000742115999246806304045702432487140508819529399245059884575934708946209516322574789907597746226957553035886293114377154459544505608389208459380956440963140789343305699658278203986551812398932069405456026560759534279324948812804513062587167345623977971097453549344764469259507711376402428457076157055436430677764738886674081844106383742912023140510418552281742188746389236111863491148474361612517064934024896521322519834851151242772104556306598929440002152036519490819251376805450957184749544824693635603569605225972053841581004501584100912328333976003102107491085953159226069012834587327259971112025925123819947881840747175767809667062611411996051112013271091350150777864798314871955256044949338844757948457477116889094191094382540558054779516264683712607043026838398910328428087833751980730006443119069122334166099941402646601365567136347123203738359088947443981087204456279328714404539183793412240994826870342095392017313400572110318532747843060607288706258394994682842520556381575601014199010490404397191138445152855809707016425452959778664359588040560748735412597512323836013768239677434435239189168997928071347187463000837985697466045497488955639372562589230908251673255473804486520327695043897071532175037437036938183448706068445520270184271860267785443607757449987645862550853844492488331774133732177529596230056374085739368318799336491781716721031643253122590074871792724944404133795117394685504903169776472613579323786988436816555044871147023821295375315968422237070919604915553260798754019817204005435917338028778866898767783201988249690480208167510788846166868446591501548151404396048081597044050075742974387127512894683131544017091983972922897201447567071326201918658162425054687848305577141613831948331736546313547366384763806330342036329442085133559102820443474867650075586800703988545083847887658720938137520387462853564941611748541059186958982227681935894334481608643024722381659381938989731023292291485815605912701175709672139292877678190348729760666157907954715630362098750256936461038759071141133514628511273752727853532279858408268908582987443368819679334383388270166337798654040644855690261540077459818835228437887729301076041005381936867843411337332815350029407543350462675437781165812720616995958519407473614668214152449569347793047763581660230557418465248972034336442550080954052153006780131714480535397523095413274750723701383225842109411649460720870423187520888470553057940395347526767669497718524603967849112705432812547718499111843247323011841160686418751692868907882025078560674843768816179401584803887200747810776387544791913903025938435744852431951915576190055048231754367790804864233775987695188801541755557892125771674773775596365864929152862381755401283073853655055425091448611697016439954534260814030388938640509188143381711317813476900790628429257746511202468312957230036100116864480097621669013542313504580498125607583068356957065062879843861421422680449125994612477774818757161945326684776971564527300842862017927612360118968033138171953084120164381524148059624459163118084096733232992442581634862069037490046169948238393108530288105627559374357574375901411757444196980563141505220137571144388964279304678461638650126063683382309278978344376529180243251205221507357892280444330744741037298325319700933898637890602101615296398869580920345296280236271953557041411865760773333961802153204654733800918538855539998075391359632003872695291240543210415227135533202642183404859216781849310678370931836038236340074191979283348256435037626347573331738056630737544630627819667754832890022502410501605907042038148659166291897056811128443400490554763520515617080334010077029504407741614050704547796928760915765587321003086708428633478958994497231881728742148146582878333513294577932133195398397292515911616512890368305984393578729868207205694140862127741104528308067361504231110165275192585475375358000676577709244330704876174208560189889742189118009170492691256513264181013828227165086680711420434651576133518693155463307951273683890278139573807332751907304778544307753690835516724244324828301915566152584064392368154012296367388561296655115159377964858217285140994654349136595083503371058992673764518566714682145847493882822893394347204092233214651141128348419317600574953305420152824611858556704207679618775670228729011916634895546083736101005758230326310636673429185051800939052184453293132762586281584909086427718838454160054742974280328396661361347295963302563629881389597757395692922460506227719569272480843843963982294218088153904303273847479651330200041676283719440322315419856051041525940239722748989045813626337663435654703148317669134876847555469792411025033420364193061667681444556983341506990373187827551963387220108573965968914968862001608003924039023517819236072227063268657970009813282109838740945014605897718935027854417422516891716032864362714644753952562246051636958846719430334197522545309124095753712501839140881772202359462149006967535743381987382494199903798783450128864108137711379338678990406261945617986484478017729513417966059143295468448727905734551655932034516014732958476725736677666360745474765405553207731525120976743153206626090160055202221435671053558239271799027644260676893678561236876461169942483963790905593236778663204622182700607533615177816293194243328323059827764195754067310463910960166786833097658112569805863287752396504825639025116157475645847961748673868648985763576921316360028625597643145982378614155913337308072899028630354506317000731973048320498440559655009741229059616821075679153626408071146949434874870710442443607598092254881233946034011674932649197951588391079113646195367873645750872572676353074784800670128148448926212428049339412055475920927927064266795956572600200498190491828386978461485683642086665791764122916337004769909968407222832293743026188332895081447303907350456907104380292438133354568556580913923940135089837451503139566900151184776483065461722434703576835856162451903500950263460660059609102492532142956330352718793762144273337958725209863219465403332730360337994136681320539676141959170028609571573318264331511603324410628374361114137620410932826988141316635961417071437490827691742173260234374302730791524687955576187003866752766949337018264318503626167264228405496153334243531140332510516296899883807675047755079172377866058979779109219361302539854229267521185113459426964212674944243036359083834041693510700598946606285775592307909800370642066904336886030146957671455743670251078744477019985475848795376334708946576839355982663342271782974876971670099428998708971102417217050194310201496909274080129838572650933663158961486164318754012103629249337765151672364719569977796470263610483643241743081238512099346318125509126340730907301902331865609410500322101548902016145028474991172896518663299753954359738145858524256241079822888388025974877315851174825234099588922307983039849059328140405070220292462966857742931975247086268060742036088901447914159791901545682768198127862624633726084182944519076169341611788879344467332624457235181005489161468437468286277927595231710889035229963620976542808014437720825245958218422545401854965717001947936025069441351490369482405131546123008735270958799806732505582384557603513044063735545265173441077422655347016647100822557881227410017918031724818941284851218632476074548990913121757687254853114905647152161232816453294063938585231011698346476850219902049515565302989770984364797494877746871059691242951446947928616748412677311316689309276924328166978373287156127637754250091827262880001580912029087294416597708081303921574616792751138598416609282955474549781919323050366795607116559122995449444513824012921931191554790229338378408917767888764757481247942357523387981462036482918774775255481502617812032424350337757705134963581392988233010269239543026399000590407670292541798141931143957825519431024943808265104606375893000801021372156629170649936482063505577146268662962099488092098200661611049654157290575516049458547343584333829118330105341165469101287828518455011376471874002702126745604311883893741228949110274354393717306210252780458508823091743222111041747254441747473986354767554852139796930960587571954051842952106734815850369832317500044882713313649500485928442503705962330735475241650188479077738536979346401179945139932535355966728284296269303465382689387382904506131090629101374506641285879526447951961592499074899803465202603048622508966269246410248303951769201230670090880245754249900954768059240928580835677018471478117764727507460788000454066509256352049419001433619066501137325877958902450951248012775946853069206507022910965027828695344876662390444745223071764327986092164128821369419529923449745342622529520337107152499452702345241141322434371161845076945400253720116974932841155231559246404477495415318558856170762805541331599037682445748096007207307457259420504514213233031560297159337458934773052943897370160719593071005636639052337398910516328917458761997763791052147675868492052732846056244343846856562859110918170514850638431897116103962577287557650861624128410941073015672545799355272188821573142146157647220592136501403389440498405045979220449287529240951068425759059315541517416653195735778257997109940532355650068087437125593263015404801959966170854247359416368888999714143993665160871834991848566207054598521044690133585142761653289736942697455812090483602711809497731994035628689666322904923368824343322943897077533662696509093532125560433883239720615037830617553062569400982442551469212711958432874003095252511501251544368163946986793533762477996739664587856894977815882349958159300266076187992625866248371863178211081986479246265805496439281433789465210502472287353963749371542009248496304898171325225431490404443696275192260731587223678231773234700501786989060062073372663103468326762818735022839079304658268264383403675611385203208802610883443153396372155598085767531581987651375303196560138048749012301078065330371665264754684135929975327450958445710569685713002470385735812499009271125281912305498904570924803427650562790575789311044993863517834700777416970146268592915939173835339588498234255520467622101245918125290891960721252962341466913538814589814214723753781664749478425706364352461070224233708179564135246880492730639677674623872309076224196922090720446752424962016499908060928640446088590198190025780328393379622363600793252241003767266825105789787022775751765687273282872681784817235974474959304500106923652827770175776376057866784637584218919587715646859185759124581929407837290204615476399831255232642772149604749965883742550558896424909600890318701200878005426405783690223803023797534308676408970377177829432708888482899871770661919987560426133634342816194791652942901002649991930864509397547495136799464971411961885951448364705084776854218557154068032421447791593957493800552595011736497560627402048363722641737191562791467192752850831819871126942696603819688457632571061264341307436496659871052442884327358088521230434779757325515620881755317489614893979565115465466459134952019342787508889329177160466567164607203135727175727007576133217386625201585733132524102256267135974095667268967387808616588507490403645684015340306735062054190431238197422650374750608082120129477961774411707229963815811485877200700501734026677170462507781454324736384494629139100648590234634063450890873793218123159652262636940460561659812567660405111805037271771919133677053378340571763804818663579984080144826950600742568620996921074204543790255158895558727569627833033922369940173618424508834111810651656048535574444567986963711635689671493979686086392051590735412326987468072321026945906095052728783747681972245983868013037928884763904299129826301670561248217272709934758302637217436483609049259979017913572017677999917451517664593806401100830094206113930664869181230286977905241453163705128560161844356057897016629444587321825339889932073812247330853655199279654850681643123911145550445824784071197446536929226480929787125781620877835455757799725872429412183788180777229189273296533362017032457858813870135280647619436731981832381160911893129851064121020987511004669726225726728447523886592540185823062928562680797115677436491664945960425463840352618701257065715147975721913145513121975941816861627415802916250662475683313221460810083733560259082176304656979800876036280685013224264755601477814078188584904150365677219720532288211268983178369847544314641858955739505549156547927819249161988086454580912459896288180831839198694747159727783540431533139780840118503526092188395999937083438859471424422484895173339353662013418404633914278270531257635152842306416202901968927515006838776193126399890861893238570955140721902636602451481280533397113331997181668368168114113211417441091536660280740752073688197951869383500740801485250371189839664555255637862300294894725338807388545090253060968823072953675487974449697590292547112002691372243223615249165249747041660867764509155511159477802075808850762651193636610867311554992969899613510446151689019965900866044828778159525923906714414752885574464308524982926278589922516043567064422228451889411464404645562403027336145425521604775172340420217961207569279554941274837915390099345785110541869546066004279176509714969623554456015482986407451412652305793262123648552417609567710229212341687156454311883528279150390985919008321641915631234630542109381453293097771127251164835846456017032621220535159510911806712579812990017904201396748639648986580416830392353504059649048195263808560060144490097812861709892171321718078141652344634889987253449435365479232110959791057112787715767591956424199236727218939549730947807636035618617124214592974632640888278642920646150269913678711900700105591753932021927544248495416598915245127805617973028286807341594473386206410511414428389049099794186454102765796914905933255458663787331998410234134210186357410895835541247415216366309533445597853759036910747535179357644751896549954802762133472758890605527381638477541022802894735646799360073180253868675653146890507692412609328780793399715860489456638327779713788516054313521050756108383748787190630773384260645245277015038626404267544599526329137987727604904731562738505220497843816310101861170621100872755427778464809073169584368881349788891479628643600529445515580370114613383736664314978973619136220173478287784163951945648158666739841536848953175419910538486514713806203315648665785618237610350582300314779025897090284284080969250933457877228872443367222249154142248644276474288044127432827952859178595732895202190015471726020796066245204963376906354394976290239211712022794927835141158864526574570946923047666699485949903120984263356978168759479817623935013795014196775910220111958690782426346191285770042525098984695899814199136259926824361465285823048578317155487790775485313929046655222874042698387928987865423117119839944817973165334672655644240394784576751152259628370824434663024024418575011518490382064521827913667162089667112747753535124207783675418967511974700275667309012046788487060329223754816307592779170924531501164340119876000139327544408024106973184674625473383812276564724893335841539005571654820183265759775079589751747626589104877587523415006319142401438844584683685256184472651725051979384269512266601971450685653366718533020065953355981712508860345534161752796241189385496331101145400268056092980486470369444513019881534614061799341395392897417347975110433595794498856720510672308772750213294104276272132667497463492787282710357371813082428478468377819129538727211815622333666816660354583565438907819881292081303387043386670876926764469958036489231885191131050114302131977936474847279924851923137714263077854243985023606988127523596289821331500111059950584764623037107983656960989438380956968393260575271072778863957365450795572899629582643385628639710611546711708409238271955614736601631291370395060012833231421354443797341554577170376506036564132217557077652411894117329603768900109332749511859736210742285027560130448468034446432758727729638990040491574996250063104797738677059556962784396811723371443252662772605997510646452758982125426031044458649357552995121303204693338942472794723310009789920455359278131277695870668310315876389946031424494549763773146136063430889417701887448847015328003015451499112860909942403248329916941358489871131665319203260702546158995642204910162911659670018116940727018797217171686323023556118323193198342370803796953278053782977187454671829418430921721985095232819212480102940486000736338657164939674716847410850866338919788038362565117722358348690989096737227059283378387520150072310475969531030512284930329368248541131113766926569221020923296593566377299675247629189109056398144800021591742635347744703956072123890797151089046108298526010507197557242777201909634714422471270603537857950184437259093361956113283048564569574122170292703201825073022983566835511332308338851334507372273081202885655714787807833951944184851958437229989794757451452736941245634812065844048175235449024407397606058411010621436622691612507865446029785762584964939590202876090478392978007566584355372687291804000734909051848660440791202433127588453190203200783903284912792280548420676834695155901857566765932088926634171356382407121102180333281700812579308596278561884268236429082157465746397088329202574170766452511505505609003041124950089258440827042552762430618486885201276510552341532342351164734524285396714462005001978788690975960312082731929333386050252112006807345880064713266643891024391700346350471880262858040712474770262634884317585612572195523131314179386278947285577465324615711086122333531902738278585784646020600313701514942125391959071309667102965885213697839889156290939743771636780743647494786980566347580750783699119643179162204062000548787439490012304199473697303589997900840621652874808426421326071990248127528436949608115779005494179734937511431781806145857785045035166485825750634750296960306410410179563289780730826789234509202931820390586826950654104129396809093876099264731036820798174964438055115624044199738101662825807851197445426685021856220844261848759266200674656511060029362486031624820819678918152181355926111923461166345822665086176145950743789341584980812952752231860843257985965288802261190266665922655937859396637134691957840093532444525473306658768602008060074798781369928554199058085681741549030727173827517234927484381244144270371887360574934364399214113609316363985218988683805111173090608023338304021000410004993333783004263450282560060958459050745590194592895933947062092079507573081523402757767724788144449830636192589330164576778830549052766661774876685632674136307814153444590770266999239828355457576813955421195065159397418434372715876860476997930972151568408519046320497117726447903332629934498123201460718775034315147902361476205883702162559670339483592737874161365824447049081019047867077729938161516575462820068029800463721563526770860295002450363435919771658499908957051051713169210155056685711478948292601652283703664279729412723327993385676972068945177529247890734902739568992396004082005895239640239584914895675194441732990455908284962508388272481664809644013695108530643590237328537639688567194704667459259852194847009346130261141412179411299994375826249494565666674099752312940749960678432841327379608811354294970105991967067932527833097758928415762643944723789054971807292766811411062804902336531718448905647640615296706335520835436041593386648611858094071235308269292644418143791110200993361422914793119640919331990182443330345380585754214640238824260774995215366915341497235208474057031765422776345411042327893101949992571577825558691897895422945443680380208657578495349595586606235401227143323363094432958840171215550050203924175856785197077586124718868813101246599573589030798669834807255201536300814627715056943239448585159116823195136012406495891984611338805585159868346247052637564031114665756371321951326231045738075829116360629934323624216434728253094934162532761445177538547165024471725562255682921126585840210275028026032072889156454737530566706272562834758199753126146886585122828302440171763025247744940890748240827209734322451822354861070551316853275578081420600654807730862579379336164296300651251035620903073641444759072951433003329108395228654468968443998724991943750648399825412774577834064138787246298154005871653201690041161564805619094094950177728315165333892502449398614595846310753261175601850635807705775203998921942871973931019055845469784764447913903988508253744480825540367906677867871057567478493188656741810436755808948879038430592843598118575241573451984420451874438273802788249941071249303464372879792957737080283657705694830680260355087766018017548240826889393233567613079361639516134438559058561470248595710630583243521624876087878849326799727058325744525127686358697175227126042729704763198212221500110961927927031953451726345983879650304506115735253749823992717894744913635383053788207368902228723257035589214660773099731574328578894614609958412257841707173544840654053687963529161718339377820673974804275660397594495763320761934541624154607081082091431381630887662852444276208094195753892541482888964133078632756060019952316521890141964819830541862502886279942861929515434864567266354539499955976735355894393495991004445955069390234829281284926336527704287398385545271066278910515123558177655155124804872688188708038652699563430158718539676417362165324740950301161676147226987091336686975730078772316774484804082212792921345388911884307584665906933970070288913666161767306556816492529686126542330576930427952309859851945687695616787391724886208606078219586577521157997471925755521830252778574776276558662045076936010197431001405073169538271205697390441457933908374685337544753066892359751986805458682161120599250577029450471790531116688637592044725816809350715401468061886209608998308808761053155925047485763330982810135796784437153235684378855933935608225979566539014908874229318867856908106633416008188397781368955225608754496472366002973989622781331076327936906421333836156329940767987829949219414282739937552368742050095369670510834581278968845142676270307586970560344050293627832921967047772968940770231187440894414891611957992234348384361908134992564366682665696510978419367665490400052255968546785818638881481409824051219338973454619317589006191281840488521392932267525779747925510077945960279398495734167739330399574628957203655424637187995438121309889157318399563297897718347938915006476879059728332276590034174776666804805807585137415933903539371546508657211772037063013142093943376911484717585548985036753668986990778732349370860695937442389869679255309585195314500199898018163496806602205369815418049524140539038443752983715573321216713716303309876573223472073494658660387196143966238355254434272031875166654429112534708035265585042313178039140504966786200157779032253018379775395031624177802409362800776274088937204606438009792960229334141357316853027529326270934813060617513040349194939506111829667596679721724554842338458197057324866302813949134291966549465895240393949176765935059682165276533388253260395177273452448414734481084363051946017495590145528378728694589718770632641502417259843086559611204202453814610339462803726715365311373975645333786896813006476033470456391277472796397664318741782445580539265623629643719879907041630801149589490342214249683643075413638713825740975202255710524519005628410890292248754754939152754157107953000785347651731062707781298031248059008088083511571893341447743035315052308357772390705357815401965655229378522974863831081531326498095411458206016343526704502197334552693425313951442693600699979416793419044571047950054591933973470783926474430571876070606494546076496652235432486913277445868254001418092467524424087719936981330245844189018050669626927477561635971967675947936667840573264315222817706208841363096504161459299455789615473844664822043191643886065072888244114235145369904453860898233956764637008735231406874585372559803108174040402975992668970470323458706663340829004120177247777909390407650943557103557176164798280730176947885600023350422406684015217003439639897364954618944020288720946937413542886098604075227026482788702174057857719036625711012261058982176805769679934893705049041439972935657555686872759565537429136163222780629831139827737682328273538007173604361766686339194080863757502388242360541635097206494291599132259373964992477759699130503679859467387685858969458881363954404384016848950761974795313353392698993567078740170008504367063192312102584020548165945222524105239691877251826775214235888083623030633684703867930130650125295968428623742677462191715457239299389032287069336032372302828098382506936703358757555827103340491155787211743066715263418577384309801993728612813203556766993754656540038816495840381520797028440484282254884632112821925210033546824602794396854826423202843726689970480869195071650949154727258460224485143154709172855637969394753939537534842454461823870448127360033316087549390339491932603424096663377705656553981384251344651715053403923964417851970419752086799349480032265992581424000705801737101791445964258963875786190924396690033057790178748531407381054411659092462411237526877645210411022521678216396060020924621034172725054413396654304600511543838181495559908429007654906632941883397253075597857634654462449755501594356663254192887988476758127961551318345779438588059118960711018114915926214069348039421926460721297822408069255012690250178221901583499188663372994201653644081755046119923887957198992066054340294114974546071159657605660183300202102344309467802093991861862965216891368515339833603657760186751215707978850910662690444513903724718434232835066662847876807387275374320546636913075891542321272611108399646743762333862252602882930547232324311990485665318593042026396489306780598510984447945017700408320977028919172057048382181924135570226760960898139417290817645998917756855185172967724992933123052909118247462398492666928951967247431522756106437050491531797002473836449419068540277472068963138393177448233961148030322348372301545504016732072510497336139578845609651207819365400056853303027235062359420018098760449076899084941741369357339039371012080828320780934162749276755522409809098153174862234168142466848375913203535996417859932173938627851656219636450621416451865792169471928789091851626456347026830292184338577370915000158169528450080894744186642838772985819834529563611933373632440708524703027899883434677586606441445529530405836184308602571764765354456106254643446906140012957381572512463660138820345199166078432074790037248546139205726353557158090656959024185745345956546890947422882539337183883406929169297400044137877815260349485959875657881972792337911693367611917919131915027920557706737769810315715359926487713855353321793871564010753738106086321230546595044476485010200470235649943642098272637082343166210803794993910337605136239806876905139720151979070575500255076889855737572108112919425325518445248006933632368025157148533351689787936121880720836116653840743617415571493745387797691042574418704937861768435997110148267844022966899508273305125680545431462825242960113760480968529000760808009707472576440561766071700939806743526995640583592236944120793230124851216017592161718568695361629331621064836815339177400421921220156618102527651553489597482005681543009594232948075392858721451225712296026349598054076571694498983982619415761813379326410749885515537518666751789095081260226732887008501369033072022423311241991556050372244766164397155244356247926874588767338935163683327933554702277547935287703755133035368418595728953591127644725043878325718984441974471692217612825126396314128770579712175562666092567978624210753782825275802681456221191328149519567354816438303073809218496633499815268520022429717046018825658842467015385712669468265707555696525948903227914864246346468870618605734062682911322413808861525616756567945364657325139882917475692209277183304968538734947428728388582797185751925085125363729075173796643775804671009928949220293268670456975658752584332903400349503949011586021175082326448210272758388252815782194585442203117090992668634959462750022443452546012055002758055127454792702255890205631701275211122693794920290417833369691631162589900706279105985583858392017695508708913053733434385675958920310284847781339811291863191093386084475914087239356382800972352347223372355619360570354411451544244307940032823148529609638296958288902010391872278763245256372127500248817419151015466871343223054572424151488837160849087690844793830186151432135847711240614541446439183938044066695316622116741046472939622004638961665608819717101930135624767270181741989733125492003140924411241153224900070754907516184957543551611208022204023968376636880451822691297708293688894074998217185540931850449663735709971989960908519813174658217406440733137654410084264390199313344416298280201059159586221741529060546858446825609039282323617534880583845852642034407748295813317970457691956263225675641685811512670217066518907796204233575773817564814095574905621916350619556603859001230105241016047652273704404479564336649968708539745125105915160022240368627482259079202336430778070946622175011973214230565495684814465576107906033710595350568611341645767396110859401880245617579689883266256409894693280104365291970684730005887925438391662019569596571533373614115187189312356643389006800187024689032302797342271128282171799878713212117329036060371547786892810406560993783700207922558468011335587906261901093629494719347614610784908347727972664981060886160896302867201510015108566161825129634975425024272081557002265941815391290337945136518047397974376034831138219062938133831604578871761305972624279786410979461568839594456833208172319195856872204542603316087926558321489377543723491132201816700479397540948217989075370768230671731249702531673564543406062253586483721876364885815656468440728188332621030006260484399864535626813077449518708844252479808421884652431126530875716970356579193081754594545979226680522690302736699184607929615623142663354132052863597405323796639870431453066308061197943832308479553993128427148101202879692518240366933913835269757022542403389041102563931777385856395150760422381552306943437155154770876052232484595793376372779715779096638669304485249549423986081793893310670696881891161170144901546778001550049111602186286345163199534989815372560517348564641269606632792272652115204168983118001639477232503487517975266466538605885310375386323449185231709798124778365598533541593980958124433491037239259424061787818955206789639301137224039378855362946151869759563140264720906997750013611877360612394880182302599632772460731913224265247765843851870907483675299829361720529022209380906861000458689821676603902075564791012594713699959332168445898305343858211764958004751287406251595999467293204674470870715167851421656776355939143657993736347249925156645471605043233097281630642396809038021750687833536173404097614118680059037340312341605883455235067338752800787033133391707487966849528493075647320868840934380554883195960251773502083727624240339456212211925683490737454112277877641954542607470029658579411795883383494012636284071606370192505278671353911009904407560251382987723241502706898676119014622076654875776162540892477299357715761700750960446391506332058899436675190871956939800022687432780180818392178709073123353331373011315965680280896735755650091675680722007667153708728485188186965653450591919415129897772500704531083484204256009802043625565542287774299566636078316295125113411325583706020566573294986977164698547137703200443022008505653377365378947288543862725055911788727943036314460020086504429170778872386381956215475209306444914466262735267509651875004139279370893320240127688827675054296294093093354920744403327434214120799757340314496705538078219995180518082515428583740839433883842984823268317117814453641785347046845620463915826027190815790559731433923858312882529042132987246860789417898096245935117545754705002593969747758470845487352156660639391962457416095124403612942059946284579486042861317902103275464677157584106545775551518446983441064825708631574744541847215534147110002165755331087323942894411304556036096' ) ; +test( macro , '-94906266' , '5678' , '12032817648505424732206470115984402822087851800458754279636201919240648069545320866560153680915753098175361305527571944284392752569770663535206811189003646879509578656245380134150984700793677615365069140988087774074093292666569225253766058544069550347050527174441848464033769865947958339935711577356378541412264423970226396093645375936214905159261610350242858917417274825574404844112579056015150088968297195170716956710849024033030314901530321313136125969347224049980779583582657176881341711446052030096202772974538698445525008118596374161589518848084436336526803665941965555491104046737440894040963947109593967956480178145670129677453883803551841426177253469183865084475725595826142523985262137749463269279257798034486481726137836527313367452357290671314328438612857618515953366030368261430360540763695870271485039165724885752553866509861096959097856524796407276935782076995718449804132659747765788304047343356811406221119007276554404855974610764195529043031625022180466201811329438874115924370207854394962989072466937684755950839558855381231468598531110161791599549283779948049180898253978038930131391965203934491358832834904237088198978460478436435260346993291323788040533668759476466237387161215852475434944660862309069972151382884427559495414208822804115701913705271785723745174681820409251541457004542480297333724163305849231905385022165131472866706690289906743159860846280981424473469229829927326830076613963484251270728729574503814307791762786013555601416538606549575141032711025523511415888723638864251522238403514209615257991112949184147400897053839753457149809381976922528684839893079020417567683858076689900826568207181631852815210327645775199600779525983840187855012090137702437886138818889991865427565806357553975294746020041388619646758784835829444515981357443648673117967946792507459637166782407266051469231502300232276219189698940875042523547644156383005262958119279161427467899540186226164668917413440447866544343462167108862890696625841719457545138663417647004060269444482339780740345497612893664834632640370620127200676855405941531569747479245411572674091251818894475403815473239183886002466157193530057684670655605573446847521994094849382549641374712884009164471656571372198449910168561787316766669347248358805643837182081303781837240736436136105361562692457596834668246060064085754181237451898863990804515605190388337710712867999191679779786712129894970664010407413944105206949638872966539657011251994137558113271215952893544638320085154429394938826746648785358611940674926917169614084840845838330085461611673093497785528104711054917591387941532664903919365872012413967652428893771254783514729383993987904033719641464047625904368835612214247748109590039950324488045520862407963337473558506985216736383673379753911040520601562793518299011996503309262568208883619152964120357680502143243237914460301562979082299253093538389428819917042632652200784610277098397358002737455993489830854317722387980601693621640290144850488960430945867613445370736462277356198969776749170074469142959139228103077704779948067569593268552335250360809034517777505978089487420438155196173015195413707500749188879413696451279508390758428449841376760780035529721795084992757493136169128293321086137318909063123039058397266188325938039949845723539644433753473294540228295834513955127390193735537175144046212555694020714759166871608060391688382739009845903946202459806666413942788393631458788321174919289511304789355666166018710631603596670860213317167734166889129692249373293565808930204157031991011885528221419033566927244666672894213270515941662085431325595906230594776340409294990273749504264542573465334640502232608314606771517369952134843645398223542989247175132652279714716937433111501880963356885109815217790196450752957228567594353774344623557404477791808889243706743536894781675724627289947304719225770725660654839527433954061516841146022327990899330817724998757824990111295998009049097615922407581255190739491092231346117657541300062685972295196237757295575969914209258890395384934110805224837375196790993957760232726873726409663790983348867817606845992238136671232375378383442128153562558993510087405303974930371982970935436148399729480315961683220510601978266384119209049691241779665749455934311999233053059017638411476295376290561801091208176239186699145687486729178616233651626665713543619439901912710580944645778155158797462852234495229231406539206472287577297378192253982740258520802032184319738335496087808027150192808403729360390814153726899607792522414861087778808864723924610633595805110618744865362177310122714818412795648247881041310195803062313215902474261741174952685814591966714305480767184438698736320248721848847642234552533028696642298731293921638337742568224929679203340715151738759154672955264904729487192815222409704216298143439170015879950939045057249309073969228984931579994969781518397426907617306970452320824844550818387028299796381307177696815835155244322539561008715495766453539759717077193466845576102664991398263517768253493037683951482880594999592487164043876965317780003505760527667863680438637377024026769527929551980088550989890140816338761108689882533404008958689956441208348099517790655163832888672441196339023333523558262873440940381150551323449813051211874782355328615332116487157592812281631495362815861059878771091573384226171301604486063550985885547526084873950124641753676687247950243102682512625690242813329639053488889144642576604385864315139668920318181435129690631047099936094981891064896430786909547908075022480142180945007023530760518540471631799916726591085967028615767603414815858484391191419226449103172750734862583321173181611826808717155895467441107144481818474820145538915123191086233889850661674240080442220814781759930155904531817862470486365345886110364369758405347228549431644962312521692584793216958186300617894642831369657323204177058526995631057099851113254417633669886363824556236862260831309128178167803213227296932516696703169947834651505156750711821678584827987720266958112228898408860533624224495113943886752312598411859670081240718595741432294942764857421091909115884148224555916194806655809926642996956901825501253612530105826618755517164012710830281242388235631527379824843157390117320858596018324726028114634513731910537333745080425512204214923714850269287802358237211241477533384595700504349352943037853153152826576013563379638817785556868194091209215931133480115980056464675106593427706835334947158188177836411830984886508981465689899139213351717298512840062197481925426346012965958263308687858310254839246643736356288094423514700890181531946170936255870492888090106543963957053638462537602324269379083493214926494662001476819723144975153483394390016211234911521305578087159665053195506910683427552629512701423004114557334590767201287380253575889880716924180835742565545587297372230588277744954790269429956487792324583964844408254629753937326834163368789921452639360922619001644423905992054827955523551707437217080870067136099865977482032198335037959434533270675522876697240093272437334734369226923188059535469846991641709332683658104575190444624146274210567461025953960170291512193215781838523322046313242892959796365884825784776849648185822682474064256026698235271594627736075157465861135739641700807125348820678293047370189781363932882694927128285410177891393529704049003357809736578523395638279194743744900566551317265479571829718951144370147604490513174682721505873577926782362538993812368812010097486662549501136198241341798084746545706437440426878375892211248824662555732459007737499801554781654267879320262704068105933519284285796739713621966126525083860893611057628869197088116263187425689411609090653720984344418988835030010895382016374020344833711823116640310985731777663607552620413465337138339866989132413420055538428253299998808303388845963185188581487436300195905101117842154869015140378602684126069213877902049366627282585389279538334206573795995374258165195704570108297045710018639586996443344402990380550529595121860257242747783754028054652596757584727739810928998066179549536463070344995795834380103032675101592624345721957432323326573571256893898028138781425679040966486628547984753574864434930008117523845237304478890899718331660641419486842158394473459007167484277217322766481893195761391938895623708651566392702159311537448090535583956495076752757058074862172390454533499093851240951296540985779357629233421157703016528130291156343737642593244088633852787614747817627060006991669568592280723672383298225466281340956636710431940328427911743530915134552931031391690006021236672575108176444082447291342833803642309708607039528118937917030486917866538554824932145847913873347906410715580065154707297637925304057208331186121542705437629918199561558440077780020149125928636524680160377906904253706618745984744483286494859496634897033537125257750234158366566522768726012073504864415325607039305152748943100533772051166644314150037384337861942612593701611683871218292642963890517076695142661403572711320388033047007398654918216722136161411678662937623850123091604556006551841441589614125921909593939770390437476075298171895573919863135651088828848336011726492799841320111649935389358931258373693459145057553136475922751342605359538155293383583876955561910069358749936951011082089615693841896629336961254394974036986721026940350856347077152772939451280308399363104652576626172429793776211333913295809413213919318285255196490381055544205313396583888277769550637211217647203529389040683316967313521879297011278503165986866646581137787534538214235999303080897442666172258679022325039014548620740672684311806497429047056530576223713193356973396804439208879107248745042555605441287111013049709202762299259851107012441701468738419926890133556245430056477998293002461917643271629591853938120614647619772495115562085600504853146424640985096824494050598829781714618733157799877227971474455616632639023850925729720213591779252776369176312110497936405970870772189359848240927140061006848080799072830556306659756678997694657936924990345096410314626570672149731543628000558026533834459167842889970614149005288838811229513837405392153251553605330473659867312295620005340633564023904208178972115034037935254190823029327420408002622341072381223538257497215682930180996569122652703053739471871654162569414951520531206458862671624276235522538318964461432849995356820683233465138675410827490596964352422796420736525862662409202276892082905745273014755041772993819374747043291676296825571338645605019288235828607460219104472171905393978286058711994994075946946904501719626129891297785262794903831823520324741271326470009925340248044413698893160087471101115598827156017322849926448246890250940872800969912833939106037661646340854638183562189382226457787900923987531877913431946108694947652717492923066187775746930063437977519195800521298729848366280723108648799156318978065768015360592367479405252285966318000015191998608772683676758058031311468294723167697582272502760859874036909801930740974001192058591430098287098021570441654592505727247768282011756726844525801256651444301950079120380718219338329468008534442846077685713544194007524327955071955226200530986913459845314710510719058167265959825133876149104200332459364223361260375456263610906578083438476313348490161343553564484692187424842603773823747426008609267536178919597384345623591288999415207111940819590820240164261067200326676758012794725260339664703418163303398007586421287243859016657962176274532712513078145376826038329107151236318002243613099209970831731135481008172826345298961517973963163916705165676097591487481466079223465813873607872273761995059993093591322303896613664321628779241192911035846341115545622374501606127977756985292882117778296500478276339993749813331078686903702537331445966445686036256887898585809843950252338373839157713280364698259134024338989451358780140559424371687870519586950515334379886144076554360694721608275939343734737390935610438901882220547279311828445041103639111103188607674601360722196695674871077543938123944828376247570522481733445127428507577252676752726828669296273888040688955392452214259080886549295627930544496374040482414174429554699068859457610531632589984450033487991393950194379605142460240622750964605904319347162317103632880464489765441781176775360255307983114046972917021261575999747919513175356289269738252254493902081778863456041493700800804759871388208118144666431845192191907729537903174959385672176640184810677326710369561461912187493932368918706337698762794615949381684820435117964874003383886204354335841513328726838198927086809536254198720567097588143419818644573075112705490751622292191492544793418111741658483532767411666600528233897824313428372479855025933866719301492980684042893544902172403475761202059963960896638007212043160771550410552889811065116740233744236032304871579001993160935959555347073311004243774883544443676731406104831265297661674183379974269379741288515676564618943733469021389351199332674318818115012130962124777380484159115171369334822744164229342075923978372260068788894241149239047819830879098322853736363606047921128478685310683095184709943048770806054769494926160412480736093641419077309213991679052703634396648375610853612922041643781461899880570131047760466065993555093987696077930050904841973329976985820417577209060155514571722895551726144444596204596782453047002156424345570004197583274416101355362390738881463523630967387072211376360805282936674787380880650737793203297867993622101141663905879536696169691639238866186158654641243673999077254707876292273024963076334728546666159776798341058364962760500123648903436613222992540337677988477671022338118694216304682423334130149852860681684099263517683335157344038308938179479603858917811593200169277994326389000742115999246806304045702432487140508819529399245059884575934708946209516322574789907597746226957553035886293114377154459544505608389208459380956440963140789343305699658278203986551812398932069405456026560759534279324948812804513062587167345623977971097453549344764469259507711376402428457076157055436430677764738886674081844106383742912023140510418552281742188746389236111863491148474361612517064934024896521322519834851151242772104556306598929440002152036519490819251376805450957184749544824693635603569605225972053841581004501584100912328333976003102107491085953159226069012834587327259971112025925123819947881840747175767809667062611411996051112013271091350150777864798314871955256044949338844757948457477116889094191094382540558054779516264683712607043026838398910328428087833751980730006443119069122334166099941402646601365567136347123203738359088947443981087204456279328714404539183793412240994826870342095392017313400572110318532747843060607288706258394994682842520556381575601014199010490404397191138445152855809707016425452959778664359588040560748735412597512323836013768239677434435239189168997928071347187463000837985697466045497488955639372562589230908251673255473804486520327695043897071532175037437036938183448706068445520270184271860267785443607757449987645862550853844492488331774133732177529596230056374085739368318799336491781716721031643253122590074871792724944404133795117394685504903169776472613579323786988436816555044871147023821295375315968422237070919604915553260798754019817204005435917338028778866898767783201988249690480208167510788846166868446591501548151404396048081597044050075742974387127512894683131544017091983972922897201447567071326201918658162425054687848305577141613831948331736546313547366384763806330342036329442085133559102820443474867650075586800703988545083847887658720938137520387462853564941611748541059186958982227681935894334481608643024722381659381938989731023292291485815605912701175709672139292877678190348729760666157907954715630362098750256936461038759071141133514628511273752727853532279858408268908582987443368819679334383388270166337798654040644855690261540077459818835228437887729301076041005381936867843411337332815350029407543350462675437781165812720616995958519407473614668214152449569347793047763581660230557418465248972034336442550080954052153006780131714480535397523095413274750723701383225842109411649460720870423187520888470553057940395347526767669497718524603967849112705432812547718499111843247323011841160686418751692868907882025078560674843768816179401584803887200747810776387544791913903025938435744852431951915576190055048231754367790804864233775987695188801541755557892125771674773775596365864929152862381755401283073853655055425091448611697016439954534260814030388938640509188143381711317813476900790628429257746511202468312957230036100116864480097621669013542313504580498125607583068356957065062879843861421422680449125994612477774818757161945326684776971564527300842862017927612360118968033138171953084120164381524148059624459163118084096733232992442581634862069037490046169948238393108530288105627559374357574375901411757444196980563141505220137571144388964279304678461638650126063683382309278978344376529180243251205221507357892280444330744741037298325319700933898637890602101615296398869580920345296280236271953557041411865760773333961802153204654733800918538855539998075391359632003872695291240543210415227135533202642183404859216781849310678370931836038236340074191979283348256435037626347573331738056630737544630627819667754832890022502410501605907042038148659166291897056811128443400490554763520515617080334010077029504407741614050704547796928760915765587321003086708428633478958994497231881728742148146582878333513294577932133195398397292515911616512890368305984393578729868207205694140862127741104528308067361504231110165275192585475375358000676577709244330704876174208560189889742189118009170492691256513264181013828227165086680711420434651576133518693155463307951273683890278139573807332751907304778544307753690835516724244324828301915566152584064392368154012296367388561296655115159377964858217285140994654349136595083503371058992673764518566714682145847493882822893394347204092233214651141128348419317600574953305420152824611858556704207679618775670228729011916634895546083736101005758230326310636673429185051800939052184453293132762586281584909086427718838454160054742974280328396661361347295963302563629881389597757395692922460506227719569272480843843963982294218088153904303273847479651330200041676283719440322315419856051041525940239722748989045813626337663435654703148317669134876847555469792411025033420364193061667681444556983341506990373187827551963387220108573965968914968862001608003924039023517819236072227063268657970009813282109838740945014605897718935027854417422516891716032864362714644753952562246051636958846719430334197522545309124095753712501839140881772202359462149006967535743381987382494199903798783450128864108137711379338678990406261945617986484478017729513417966059143295468448727905734551655932034516014732958476725736677666360745474765405553207731525120976743153206626090160055202221435671053558239271799027644260676893678561236876461169942483963790905593236778663204622182700607533615177816293194243328323059827764195754067310463910960166786833097658112569805863287752396504825639025116157475645847961748673868648985763576921316360028625597643145982378614155913337308072899028630354506317000731973048320498440559655009741229059616821075679153626408071146949434874870710442443607598092254881233946034011674932649197951588391079113646195367873645750872572676353074784800670128148448926212428049339412055475920927927064266795956572600200498190491828386978461485683642086665791764122916337004769909968407222832293743026188332895081447303907350456907104380292438133354568556580913923940135089837451503139566900151184776483065461722434703576835856162451903500950263460660059609102492532142956330352718793762144273337958725209863219465403332730360337994136681320539676141959170028609571573318264331511603324410628374361114137620410932826988141316635961417071437490827691742173260234374302730791524687955576187003866752766949337018264318503626167264228405496153334243531140332510516296899883807675047755079172377866058979779109219361302539854229267521185113459426964212674944243036359083834041693510700598946606285775592307909800370642066904336886030146957671455743670251078744477019985475848795376334708946576839355982663342271782974876971670099428998708971102417217050194310201496909274080129838572650933663158961486164318754012103629249337765151672364719569977796470263610483643241743081238512099346318125509126340730907301902331865609410500322101548902016145028474991172896518663299753954359738145858524256241079822888388025974877315851174825234099588922307983039849059328140405070220292462966857742931975247086268060742036088901447914159791901545682768198127862624633726084182944519076169341611788879344467332624457235181005489161468437468286277927595231710889035229963620976542808014437720825245958218422545401854965717001947936025069441351490369482405131546123008735270958799806732505582384557603513044063735545265173441077422655347016647100822557881227410017918031724818941284851218632476074548990913121757687254853114905647152161232816453294063938585231011698346476850219902049515565302989770984364797494877746871059691242951446947928616748412677311316689309276924328166978373287156127637754250091827262880001580912029087294416597708081303921574616792751138598416609282955474549781919323050366795607116559122995449444513824012921931191554790229338378408917767888764757481247942357523387981462036482918774775255481502617812032424350337757705134963581392988233010269239543026399000590407670292541798141931143957825519431024943808265104606375893000801021372156629170649936482063505577146268662962099488092098200661611049654157290575516049458547343584333829118330105341165469101287828518455011376471874002702126745604311883893741228949110274354393717306210252780458508823091743222111041747254441747473986354767554852139796930960587571954051842952106734815850369832317500044882713313649500485928442503705962330735475241650188479077738536979346401179945139932535355966728284296269303465382689387382904506131090629101374506641285879526447951961592499074899803465202603048622508966269246410248303951769201230670090880245754249900954768059240928580835677018471478117764727507460788000454066509256352049419001433619066501137325877958902450951248012775946853069206507022910965027828695344876662390444745223071764327986092164128821369419529923449745342622529520337107152499452702345241141322434371161845076945400253720116974932841155231559246404477495415318558856170762805541331599037682445748096007207307457259420504514213233031560297159337458934773052943897370160719593071005636639052337398910516328917458761997763791052147675868492052732846056244343846856562859110918170514850638431897116103962577287557650861624128410941073015672545799355272188821573142146157647220592136501403389440498405045979220449287529240951068425759059315541517416653195735778257997109940532355650068087437125593263015404801959966170854247359416368888999714143993665160871834991848566207054598521044690133585142761653289736942697455812090483602711809497731994035628689666322904923368824343322943897077533662696509093532125560433883239720615037830617553062569400982442551469212711958432874003095252511501251544368163946986793533762477996739664587856894977815882349958159300266076187992625866248371863178211081986479246265805496439281433789465210502472287353963749371542009248496304898171325225431490404443696275192260731587223678231773234700501786989060062073372663103468326762818735022839079304658268264383403675611385203208802610883443153396372155598085767531581987651375303196560138048749012301078065330371665264754684135929975327450958445710569685713002470385735812499009271125281912305498904570924803427650562790575789311044993863517834700777416970146268592915939173835339588498234255520467622101245918125290891960721252962341466913538814589814214723753781664749478425706364352461070224233708179564135246880492730639677674623872309076224196922090720446752424962016499908060928640446088590198190025780328393379622363600793252241003767266825105789787022775751765687273282872681784817235974474959304500106923652827770175776376057866784637584218919587715646859185759124581929407837290204615476399831255232642772149604749965883742550558896424909600890318701200878005426405783690223803023797534308676408970377177829432708888482899871770661919987560426133634342816194791652942901002649991930864509397547495136799464971411961885951448364705084776854218557154068032421447791593957493800552595011736497560627402048363722641737191562791467192752850831819871126942696603819688457632571061264341307436496659871052442884327358088521230434779757325515620881755317489614893979565115465466459134952019342787508889329177160466567164607203135727175727007576133217386625201585733132524102256267135974095667268967387808616588507490403645684015340306735062054190431238197422650374750608082120129477961774411707229963815811485877200700501734026677170462507781454324736384494629139100648590234634063450890873793218123159652262636940460561659812567660405111805037271771919133677053378340571763804818663579984080144826950600742568620996921074204543790255158895558727569627833033922369940173618424508834111810651656048535574444567986963711635689671493979686086392051590735412326987468072321026945906095052728783747681972245983868013037928884763904299129826301670561248217272709934758302637217436483609049259979017913572017677999917451517664593806401100830094206113930664869181230286977905241453163705128560161844356057897016629444587321825339889932073812247330853655199279654850681643123911145550445824784071197446536929226480929787125781620877835455757799725872429412183788180777229189273296533362017032457858813870135280647619436731981832381160911893129851064121020987511004669726225726728447523886592540185823062928562680797115677436491664945960425463840352618701257065715147975721913145513121975941816861627415802916250662475683313221460810083733560259082176304656979800876036280685013224264755601477814078188584904150365677219720532288211268983178369847544314641858955739505549156547927819249161988086454580912459896288180831839198694747159727783540431533139780840118503526092188395999937083438859471424422484895173339353662013418404633914278270531257635152842306416202901968927515006838776193126399890861893238570955140721902636602451481280533397113331997181668368168114113211417441091536660280740752073688197951869383500740801485250371189839664555255637862300294894725338807388545090253060968823072953675487974449697590292547112002691372243223615249165249747041660867764509155511159477802075808850762651193636610867311554992969899613510446151689019965900866044828778159525923906714414752885574464308524982926278589922516043567064422228451889411464404645562403027336145425521604775172340420217961207569279554941274837915390099345785110541869546066004279176509714969623554456015482986407451412652305793262123648552417609567710229212341687156454311883528279150390985919008321641915631234630542109381453293097771127251164835846456017032621220535159510911806712579812990017904201396748639648986580416830392353504059649048195263808560060144490097812861709892171321718078141652344634889987253449435365479232110959791057112787715767591956424199236727218939549730947807636035618617124214592974632640888278642920646150269913678711900700105591753932021927544248495416598915245127805617973028286807341594473386206410511414428389049099794186454102765796914905933255458663787331998410234134210186357410895835541247415216366309533445597853759036910747535179357644751896549954802762133472758890605527381638477541022802894735646799360073180253868675653146890507692412609328780793399715860489456638327779713788516054313521050756108383748787190630773384260645245277015038626404267544599526329137987727604904731562738505220497843816310101861170621100872755427778464809073169584368881349788891479628643600529445515580370114613383736664314978973619136220173478287784163951945648158666739841536848953175419910538486514713806203315648665785618237610350582300314779025897090284284080969250933457877228872443367222249154142248644276474288044127432827952859178595732895202190015471726020796066245204963376906354394976290239211712022794927835141158864526574570946923047666699485949903120984263356978168759479817623935013795014196775910220111958690782426346191285770042525098984695899814199136259926824361465285823048578317155487790775485313929046655222874042698387928987865423117119839944817973165334672655644240394784576751152259628370824434663024024418575011518490382064521827913667162089667112747753535124207783675418967511974700275667309012046788487060329223754816307592779170924531501164340119876000139327544408024106973184674625473383812276564724893335841539005571654820183265759775079589751747626589104877587523415006319142401438844584683685256184472651725051979384269512266601971450685653366718533020065953355981712508860345534161752796241189385496331101145400268056092980486470369444513019881534614061799341395392897417347975110433595794498856720510672308772750213294104276272132667497463492787282710357371813082428478468377819129538727211815622333666816660354583565438907819881292081303387043386670876926764469958036489231885191131050114302131977936474847279924851923137714263077854243985023606988127523596289821331500111059950584764623037107983656960989438380956968393260575271072778863957365450795572899629582643385628639710611546711708409238271955614736601631291370395060012833231421354443797341554577170376506036564132217557077652411894117329603768900109332749511859736210742285027560130448468034446432758727729638990040491574996250063104797738677059556962784396811723371443252662772605997510646452758982125426031044458649357552995121303204693338942472794723310009789920455359278131277695870668310315876389946031424494549763773146136063430889417701887448847015328003015451499112860909942403248329916941358489871131665319203260702546158995642204910162911659670018116940727018797217171686323023556118323193198342370803796953278053782977187454671829418430921721985095232819212480102940486000736338657164939674716847410850866338919788038362565117722358348690989096737227059283378387520150072310475969531030512284930329368248541131113766926569221020923296593566377299675247629189109056398144800021591742635347744703956072123890797151089046108298526010507197557242777201909634714422471270603537857950184437259093361956113283048564569574122170292703201825073022983566835511332308338851334507372273081202885655714787807833951944184851958437229989794757451452736941245634812065844048175235449024407397606058411010621436622691612507865446029785762584964939590202876090478392978007566584355372687291804000734909051848660440791202433127588453190203200783903284912792280548420676834695155901857566765932088926634171356382407121102180333281700812579308596278561884268236429082157465746397088329202574170766452511505505609003041124950089258440827042552762430618486885201276510552341532342351164734524285396714462005001978788690975960312082731929333386050252112006807345880064713266643891024391700346350471880262858040712474770262634884317585612572195523131314179386278947285577465324615711086122333531902738278585784646020600313701514942125391959071309667102965885213697839889156290939743771636780743647494786980566347580750783699119643179162204062000548787439490012304199473697303589997900840621652874808426421326071990248127528436949608115779005494179734937511431781806145857785045035166485825750634750296960306410410179563289780730826789234509202931820390586826950654104129396809093876099264731036820798174964438055115624044199738101662825807851197445426685021856220844261848759266200674656511060029362486031624820819678918152181355926111923461166345822665086176145950743789341584980812952752231860843257985965288802261190266665922655937859396637134691957840093532444525473306658768602008060074798781369928554199058085681741549030727173827517234927484381244144270371887360574934364399214113609316363985218988683805111173090608023338304021000410004993333783004263450282560060958459050745590194592895933947062092079507573081523402757767724788144449830636192589330164576778830549052766661774876685632674136307814153444590770266999239828355457576813955421195065159397418434372715876860476997930972151568408519046320497117726447903332629934498123201460718775034315147902361476205883702162559670339483592737874161365824447049081019047867077729938161516575462820068029800463721563526770860295002450363435919771658499908957051051713169210155056685711478948292601652283703664279729412723327993385676972068945177529247890734902739568992396004082005895239640239584914895675194441732990455908284962508388272481664809644013695108530643590237328537639688567194704667459259852194847009346130261141412179411299994375826249494565666674099752312940749960678432841327379608811354294970105991967067932527833097758928415762643944723789054971807292766811411062804902336531718448905647640615296706335520835436041593386648611858094071235308269292644418143791110200993361422914793119640919331990182443330345380585754214640238824260774995215366915341497235208474057031765422776345411042327893101949992571577825558691897895422945443680380208657578495349595586606235401227143323363094432958840171215550050203924175856785197077586124718868813101246599573589030798669834807255201536300814627715056943239448585159116823195136012406495891984611338805585159868346247052637564031114665756371321951326231045738075829116360629934323624216434728253094934162532761445177538547165024471725562255682921126585840210275028026032072889156454737530566706272562834758199753126146886585122828302440171763025247744940890748240827209734322451822354861070551316853275578081420600654807730862579379336164296300651251035620903073641444759072951433003329108395228654468968443998724991943750648399825412774577834064138787246298154005871653201690041161564805619094094950177728315165333892502449398614595846310753261175601850635807705775203998921942871973931019055845469784764447913903988508253744480825540367906677867871057567478493188656741810436755808948879038430592843598118575241573451984420451874438273802788249941071249303464372879792957737080283657705694830680260355087766018017548240826889393233567613079361639516134438559058561470248595710630583243521624876087878849326799727058325744525127686358697175227126042729704763198212221500110961927927031953451726345983879650304506115735253749823992717894744913635383053788207368902228723257035589214660773099731574328578894614609958412257841707173544840654053687963529161718339377820673974804275660397594495763320761934541624154607081082091431381630887662852444276208094195753892541482888964133078632756060019952316521890141964819830541862502886279942861929515434864567266354539499955976735355894393495991004445955069390234829281284926336527704287398385545271066278910515123558177655155124804872688188708038652699563430158718539676417362165324740950301161676147226987091336686975730078772316774484804082212792921345388911884307584665906933970070288913666161767306556816492529686126542330576930427952309859851945687695616787391724886208606078219586577521157997471925755521830252778574776276558662045076936010197431001405073169538271205697390441457933908374685337544753066892359751986805458682161120599250577029450471790531116688637592044725816809350715401468061886209608998308808761053155925047485763330982810135796784437153235684378855933935608225979566539014908874229318867856908106633416008188397781368955225608754496472366002973989622781331076327936906421333836156329940767987829949219414282739937552368742050095369670510834581278968845142676270307586970560344050293627832921967047772968940770231187440894414891611957992234348384361908134992564366682665696510978419367665490400052255968546785818638881481409824051219338973454619317589006191281840488521392932267525779747925510077945960279398495734167739330399574628957203655424637187995438121309889157318399563297897718347938915006476879059728332276590034174776666804805807585137415933903539371546508657211772037063013142093943376911484717585548985036753668986990778732349370860695937442389869679255309585195314500199898018163496806602205369815418049524140539038443752983715573321216713716303309876573223472073494658660387196143966238355254434272031875166654429112534708035265585042313178039140504966786200157779032253018379775395031624177802409362800776274088937204606438009792960229334141357316853027529326270934813060617513040349194939506111829667596679721724554842338458197057324866302813949134291966549465895240393949176765935059682165276533388253260395177273452448414734481084363051946017495590145528378728694589718770632641502417259843086559611204202453814610339462803726715365311373975645333786896813006476033470456391277472796397664318741782445580539265623629643719879907041630801149589490342214249683643075413638713825740975202255710524519005628410890292248754754939152754157107953000785347651731062707781298031248059008088083511571893341447743035315052308357772390705357815401965655229378522974863831081531326498095411458206016343526704502197334552693425313951442693600699979416793419044571047950054591933973470783926474430571876070606494546076496652235432486913277445868254001418092467524424087719936981330245844189018050669626927477561635971967675947936667840573264315222817706208841363096504161459299455789615473844664822043191643886065072888244114235145369904453860898233956764637008735231406874585372559803108174040402975992668970470323458706663340829004120177247777909390407650943557103557176164798280730176947885600023350422406684015217003439639897364954618944020288720946937413542886098604075227026482788702174057857719036625711012261058982176805769679934893705049041439972935657555686872759565537429136163222780629831139827737682328273538007173604361766686339194080863757502388242360541635097206494291599132259373964992477759699130503679859467387685858969458881363954404384016848950761974795313353392698993567078740170008504367063192312102584020548165945222524105239691877251826775214235888083623030633684703867930130650125295968428623742677462191715457239299389032287069336032372302828098382506936703358757555827103340491155787211743066715263418577384309801993728612813203556766993754656540038816495840381520797028440484282254884632112821925210033546824602794396854826423202843726689970480869195071650949154727258460224485143154709172855637969394753939537534842454461823870448127360033316087549390339491932603424096663377705656553981384251344651715053403923964417851970419752086799349480032265992581424000705801737101791445964258963875786190924396690033057790178748531407381054411659092462411237526877645210411022521678216396060020924621034172725054413396654304600511543838181495559908429007654906632941883397253075597857634654462449755501594356663254192887988476758127961551318345779438588059118960711018114915926214069348039421926460721297822408069255012690250178221901583499188663372994201653644081755046119923887957198992066054340294114974546071159657605660183300202102344309467802093991861862965216891368515339833603657760186751215707978850910662690444513903724718434232835066662847876807387275374320546636913075891542321272611108399646743762333862252602882930547232324311990485665318593042026396489306780598510984447945017700408320977028919172057048382181924135570226760960898139417290817645998917756855185172967724992933123052909118247462398492666928951967247431522756106437050491531797002473836449419068540277472068963138393177448233961148030322348372301545504016732072510497336139578845609651207819365400056853303027235062359420018098760449076899084941741369357339039371012080828320780934162749276755522409809098153174862234168142466848375913203535996417859932173938627851656219636450621416451865792169471928789091851626456347026830292184338577370915000158169528450080894744186642838772985819834529563611933373632440708524703027899883434677586606441445529530405836184308602571764765354456106254643446906140012957381572512463660138820345199166078432074790037248546139205726353557158090656959024185745345956546890947422882539337183883406929169297400044137877815260349485959875657881972792337911693367611917919131915027920557706737769810315715359926487713855353321793871564010753738106086321230546595044476485010200470235649943642098272637082343166210803794993910337605136239806876905139720151979070575500255076889855737572108112919425325518445248006933632368025157148533351689787936121880720836116653840743617415571493745387797691042574418704937861768435997110148267844022966899508273305125680545431462825242960113760480968529000760808009707472576440561766071700939806743526995640583592236944120793230124851216017592161718568695361629331621064836815339177400421921220156618102527651553489597482005681543009594232948075392858721451225712296026349598054076571694498983982619415761813379326410749885515537518666751789095081260226732887008501369033072022423311241991556050372244766164397155244356247926874588767338935163683327933554702277547935287703755133035368418595728953591127644725043878325718984441974471692217612825126396314128770579712175562666092567978624210753782825275802681456221191328149519567354816438303073809218496633499815268520022429717046018825658842467015385712669468265707555696525948903227914864246346468870618605734062682911322413808861525616756567945364657325139882917475692209277183304968538734947428728388582797185751925085125363729075173796643775804671009928949220293268670456975658752584332903400349503949011586021175082326448210272758388252815782194585442203117090992668634959462750022443452546012055002758055127454792702255890205631701275211122693794920290417833369691631162589900706279105985583858392017695508708913053733434385675958920310284847781339811291863191093386084475914087239356382800972352347223372355619360570354411451544244307940032823148529609638296958288902010391872278763245256372127500248817419151015466871343223054572424151488837160849087690844793830186151432135847711240614541446439183938044066695316622116741046472939622004638961665608819717101930135624767270181741989733125492003140924411241153224900070754907516184957543551611208022204023968376636880451822691297708293688894074998217185540931850449663735709971989960908519813174658217406440733137654410084264390199313344416298280201059159586221741529060546858446825609039282323617534880583845852642034407748295813317970457691956263225675641685811512670217066518907796204233575773817564814095574905621916350619556603859001230105241016047652273704404479564336649968708539745125105915160022240368627482259079202336430778070946622175011973214230565495684814465576107906033710595350568611341645767396110859401880245617579689883266256409894693280104365291970684730005887925438391662019569596571533373614115187189312356643389006800187024689032302797342271128282171799878713212117329036060371547786892810406560993783700207922558468011335587906261901093629494719347614610784908347727972664981060886160896302867201510015108566161825129634975425024272081557002265941815391290337945136518047397974376034831138219062938133831604578871761305972624279786410979461568839594456833208172319195856872204542603316087926558321489377543723491132201816700479397540948217989075370768230671731249702531673564543406062253586483721876364885815656468440728188332621030006260484399864535626813077449518708844252479808421884652431126530875716970356579193081754594545979226680522690302736699184607929615623142663354132052863597405323796639870431453066308061197943832308479553993128427148101202879692518240366933913835269757022542403389041102563931777385856395150760422381552306943437155154770876052232484595793376372779715779096638669304485249549423986081793893310670696881891161170144901546778001550049111602186286345163199534989815372560517348564641269606632792272652115204168983118001639477232503487517975266466538605885310375386323449185231709798124778365598533541593980958124433491037239259424061787818955206789639301137224039378855362946151869759563140264720906997750013611877360612394880182302599632772460731913224265247765843851870907483675299829361720529022209380906861000458689821676603902075564791012594713699959332168445898305343858211764958004751287406251595999467293204674470870715167851421656776355939143657993736347249925156645471605043233097281630642396809038021750687833536173404097614118680059037340312341605883455235067338752800787033133391707487966849528493075647320868840934380554883195960251773502083727624240339456212211925683490737454112277877641954542607470029658579411795883383494012636284071606370192505278671353911009904407560251382987723241502706898676119014622076654875776162540892477299357715761700750960446391506332058899436675190871956939800022687432780180818392178709073123353331373011315965680280896735755650091675680722007667153708728485188186965653450591919415129897772500704531083484204256009802043625565542287774299566636078316295125113411325583706020566573294986977164698547137703200443022008505653377365378947288543862725055911788727943036314460020086504429170778872386381956215475209306444914466262735267509651875004139279370893320240127688827675054296294093093354920744403327434214120799757340314496705538078219995180518082515428583740839433883842984823268317117814453641785347046845620463915826027190815790559731433923858312882529042132987246860789417898096245935117545754705002593969747758470845487352156660639391962457416095124403612942059946284579486042861317902103275464677157584106545775551518446983441064825708631574744541847215534147110002165755331087323942894411304556036096' ) ; +test( macro , '1073741824' , '0' , '1' ) ; +test( macro , '-1073741824' , '0' , '1' ) ; +test( macro , '1073741824' , '1' , '1073741824' ) ; +test( macro , '-1073741824' , '1' , '-1073741824' ) ; +test( macro , '1073741824' , '3' , '1237940039285380274899124224' ) ; +test( macro , '-1073741824' , '3' , '-1237940039285380274899124224' ) ; +test( macro , '1073741824' , '7' , '1645504557321206042154969182557350504982735865633579863348609024' ) ; +test( macro , '-1073741824' , '7' , '-1645504557321206042154969182557350504982735865633579863348609024' ) ; +test( macro , '1073741824' , '9' , '1897137590064188545819787018382342682267975428761855001222473056385648716020711424' ) ; +test( macro , '-1073741824' , '9' , '-1897137590064188545819787018382342682267975428761855001222473056385648716020711424' ) ; +test( macro , '1073741824' , '11' , '2187250724783011924372502227117621365353169430893212436425770606409952999199375923223513177023053824' ) ; +test( macro , '-1073741824' , '11' , '-2187250724783011924372502227117621365353169430893212436425770606409952999199375923223513177023053824' ) ; +test( macro , '1073741824' , '17' , '3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024' ) ; +test( macro , '-1073741824' , '17' , '-3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024' ) ; +test( macro , '1073741824' , '22' , '4784065733063810973581885157618788676291241975216665977767007373648750357731006099232824032039924032894289638403441329240212719241920971274455782595989040464660523567661989180298099889009174801022976' ) ; +test( macro , '-1073741824' , '22' , '4784065733063810973581885157618788676291241975216665977767007373648750357731006099232824032039924032894289638403441329240212719241920971274455782595989040464660523567661989180298099889009174801022976' ) ; +test( macro , '1073741824' , '24' , '5515652263101987298728728207430913795608113109085112352897269396216198887424215820128660001943808587833784893551335930816647064191168732319583111500951066614122648616177179922993422016587311577585463592732098692120576' ) ; +test( macro , '-1073741824' , '24' , '5515652263101987298728728207430913795608113109085112352897269396216198887424215820128660001943808587833784893551335930816647064191168732319583111500951066614122648616177179922993422016587311577585463592732098692120576' ) ; +test( macro , '1073741824' , '27' , '6828046779268970776657768233698567984276232522051489956245767999246374131525255241237946573692471593720760228447675638216590132893818229842292076597586769967201441361422350907866192164773697561322460176523147880429251325990375896362151810433024' ) ; +test( macro , '-1073741824' , '27' , '-6828046779268970776657768233698567984276232522051489956245767999246374131525255241237946573692471593720760228447675638216590132893818229842292076597586769967201441361422350907866192164773697561322460176523147880429251325990375896362151810433024' ) ; +test( macro , '1073741824' , '29' , '7872201966280717348342236651726314522606839627565764220475565031568317153405023507392663596386569558004653379220621715171372109048108541030444785631640845193093816697582678260933332408613360539868835105124282664122403089594119217080450011771426148362301864935424' ) ; +test( macro , '-1073741824' , '29' , '-7872201966280717348342236651726314522606839627565764220475565031568317153405023507392663596386569558004653379220621715171372109048108541030444785631640845193093816697582678260933332408613360539868835105124282664122403089594119217080450011771426148362301864935424' ) ; +test( macro , '1073741824' , '1234' , '135032864495417264161796347776955705785892222817973553418838034178314956028897546684160639856425763595503385824329054755201421463563212980917112733900937587464576847323832924136423515380546856668025289567166571296527646275461473028717333267141003518332467805495676717695347879685792063703697070949206732122179518994434776335316458684468092377731792188239016034485284630253586964894185124335453057822293914949906863158326432012623661553678396250401107915138994915256878813546994860886329001648396962604356523710403969300362981938297962596264354907403355610003410746213618666434661128903020244869263896170471066369182082892608827489848219714660341764073206537992528782425500311374732638679622889592596379830695201794132135693911769551065799954240113610377067376683502257705550961373070910821982440913313765403579054599921224319207778610832609088192808064360990585104697667138615140446175879997439210654552913976627035980457885269693547247688226220637387637045378917414583352542513965899437900025330512737621517111697083031434057763772292768696151657707923184295380055081923115043272032888153271224470285860092716037417011085867348183777640814999517894828296507433835585929567261420420462344313146389909474179332054613893650718599796623059768279453815288538594004374465681087299360879696203325418022962651748866461417173042714747088991460375318785407702300361444578324217092319160985594722221278104937860539603355035209045656876866415381803837578632001346316535288568593998708433385135715755188408423372052774222216062791048328356892426522413633286855317150328892404110603628893696215163566867442031835287126762113760377467604420360968473120576018581379277564986140009067855235173575587538977545428601733720192069320627430054733306784720670681238722112369930138992200505842377717496879786984447202871740228658026814953856942888153479080568126661272713405724755303867126253550104922434031984783644501692789857112933381811554363124855689663968314433936452490388268436076601610796805828686914442925663191706651004835742754007540713785525346442305287873815143574033326807511787052642265739017004565917956613363367471933672846629587711796258007368503719485449080451730511414011638477972141851445718086957116808591931107452359052957804865633522313939899601083954314084664652521357737845635635594429769313821802217558277658299721865464301558666750790259183567098179113274454668640485452931068066002908997277843409635151859336573513012860151545891329235097673549964928547801966932932777277610659955980339629366284864226600662175274920200231799911374929694310790998989788523133581837411706270099109279459393672455713820011546843294753524645198035778900516714217425354013155387659200293566814809279617708397538819427548364362324788662653106656895970337977138117687158105548389244431881662586459290188692191645535827574319724588383784870507646115475296972326304672165083538472785124541284886058416994446142617361494723365850552096782926362377318561314608226102827450344958934465468245954006024257745239912802322669809977564421376969565655823452390561157232875258411436971600411470668202989843565841480016584687122684712266492502542278163229587079707811073162054156571019054961062952927977983554302015866971342580754327070415115073966145426561158662194502911612889959593112256884020821481134001501231980935188947653774740923939867063867862219999510114357601167654576478400771215648552504675553652631911512293697639701046365273307557081624386985153768458592210790101466864820465666077389235557282441554467556137942439039191407590628851042708228500292413849444833651262460968069570764996387290215723393788781245642804553333508408301261343724697551028018989537881749905976076338448452394908535816426586597030779896515482117647557447860634450527101713121746502484479941152499856376739864275419495610691316310634478200363068897623674033337430538837932663020502333882835672567028049270502480555370060999493787391837671108324652717939749490597481250676971715293682844252870745501145551758940066811058992261248151841276017611811411887274572413802287051107702233361626519940861991365151787177732149135343171325963570255705926609298821759763745740605618507883067662117450926227987106288796642374051280660094717537306446983341125766514345467801301022109170850857456333788167674306579695352752143676166869626035002861003680151141687395013408918901196436576953798322233993027260775444170722889022629783177992510442629535947158550432935980049655104057058621049474066059547684213926506563385023004213643849612559790681501591969143956634858312507054320677326538188275884275107886773666192492559052155330294262524555672315514034789884026392912345926416901360808651772382910047100655600280544831642567723450232097407181605364971159781140990727057283670253338705128542777670983899963185946930240111611346828021014300849527667380963493241772072243503208897153563615767202700820461479775801950340023203862180599061144940297631835377016813742279451921894644661911014611402981461194280564179453079023523411900246837570509101994534431957542873784483700881074971158165429546479001645257417913405525852266215205603087742174929432327288507482831107662551472614657976383161884377268463657025482687656063877010334242025290874089994813121457120585350369438678750482445541628164325776911259393529988611879496239373025342855694600744246027039218591404431155722013586923335365589621061845464264820717668612915592171183491557882072775450347227785803371128754402118852662696497779734299037300726805751376345509065452470499771152338656741540759667286001807828234665941391188447950478415299791715469552242795959977483249749098144154729856726398843394843136479906418546581912783694281934186249899746840563706877029836122779488478015849960103559937024687849690515515689170897889503967015459345616938867807167382350934016893152627043030526997853293078436718226621464395154690848550466482856381991831742986166751803513242752173233490694252183014711530077920709629933842242926656727149369031087137074130182692159013533974804462296354847649804625060701458152488648760236684887914355314516265818917796761265782595118181981681044254889996850913972129942574101636910767699459646998565563334934817729091557460304359721174908710624610165520926996466684432035990548126234720976930050635146064837916857286368443462256725410214925359769688795382559406991790923193015325212536964901024443651640395352239064142041323998597222052931115684682639641634800512022146941484482355702865668732720081140181922030567504656879986036737923027379371333794512102069490267986276796423969331880136840719651462034396200061876091366707548763496112346222123232248230388694153688276766328691064711815330435460610088491421888195612048740193844188314932702563544622667512558911661710630118364274196170285674349766269310062034958003334299954120247304438475039760866057864514345508533138628508770723222951065702526427845206142448239674333189634298931074576766130399670656349372266937207854772004314241332793691477905804194502714575051020048862726839370657406000869875185698670555381280201599182665294886015354833856011808620179345081837914124086071187518476483594847918835733763073473814523558994575501588763392130790088638634309767210564561156248614464688514525041131096155150204607020153647966454650761265273455261627425314514074528596787641024836845254467857223858579509706178001258970617383401025827829579991212553362569959842654814709014550315424922111780290827915930414726165818710997646590887384752885393971444427639715814163996840822838498023284380865733129768795804080108863886307701355417615576573589725489445560015923098909783946350493434691086273697821816061793195812770178371503741153108240688178150147461201688003004263999364357199123049902951417798592453452403101562071608640099027564271983356263970688542541011654918968049984647651232137086895404259830149749220416879709959182020123061308112888239461649235275893165452695700741882252283027093045450482557353241644181353530529653471719973518815321814018114021209910092621976503477515448618895747516994954217971534012469546841874151849040054346531026855470552536470226180210581952214311535603720572039239234584559973566186577426541184455268877699457062169502204867831831763139996332553492281719620044008348442819347402916347449063826287493279275546962303367251145148862797186077453729802990592616042296098334476139933758210139481670253798728685880004650690300243587853634793764661363939548941992865429829630011064793643332258817519440699413641147721299779933762272040597516388553460177074372616592967741331217479003988681016928742585365278732728251483499212078891220690889658188156539798384331139356971957782445900967760132357158387747329622665956719786329684268357644498465257273930645057475745581973619803774790375513161774140411043479424601685237941073465868677839867198646929631273490654610573573656534496084196010506741518390113797703827155068331674200699131411229929426209680688487714374805974168983332553493786309966923567293209378744360953393793837125430206186894839350307705730235833717173154106746899348996486996231198585887923276258550483914940308115576604381833814866652308982829995287823135115578881841683647985874625837749874589942687788384192613487693851248999443749739642785826605231657455343877879315308426560948548969337045420424230665445855165336217895834289470720467926611740468031169083110333367765062731740323306977689561405194787701475443626301894061597784690178137908223901264029854714026072728307465863936978689722771921158057199058515421972406268544249165602289029057506413446029967238761073334521038239699127377613786798068608688136455403186419278380623768639967693818903002914091657689851030323485482272515883706497395534650119809423124565836391369793842875038747816600835980202179604622141185688760485442517152962269215524720968096159687665960838433942792005418796157545207812339197623327607879244889471757058218065058047984089888544282248414904169827449234143857530585526799957307705003072573479826497347064437602871900701432264712373284911700095912533127999896443887782038410277845379907218733591984612184226296351103012869133391467968434446494841517603701783596211408280361807750260109809286092555909870372810146591135183334539196312751504033478470726845817388732348939299912436932024285485403024073626586251026026899899295415467127267737038677726809661009108302376683834416191919481724680647658317867588060396025374752516402209355880386153514329598353790340684707527726798504415578402359843949160793333347705630484913082537803617023770261845303091364666015596737350934362512646919111958540171867785831140669826682679983246022184079073759821259756221015486738276522189431610413723028908457172736855850746058294313588226728849768689794812414866669348870741591827776664772445325863669071829320107144423553422120538225532216445443836199238118227392732940295380857114186288402531225261406147809210925336362075376428503158948931501742771923187008514442594711388876951547491075456021295349274877008031010408946253351724911972191625857419453217284075817281481549626955942730030530589242183647212102223686706445886268268877799837073315208919568520733667353137904980761596821645748802852145377472403345961092081642831719685504154626740435161580568576' ) ; +test( macro , '-1073741824' , '1234' , '135032864495417264161796347776955705785892222817973553418838034178314956028897546684160639856425763595503385824329054755201421463563212980917112733900937587464576847323832924136423515380546856668025289567166571296527646275461473028717333267141003518332467805495676717695347879685792063703697070949206732122179518994434776335316458684468092377731792188239016034485284630253586964894185124335453057822293914949906863158326432012623661553678396250401107915138994915256878813546994860886329001648396962604356523710403969300362981938297962596264354907403355610003410746213618666434661128903020244869263896170471066369182082892608827489848219714660341764073206537992528782425500311374732638679622889592596379830695201794132135693911769551065799954240113610377067376683502257705550961373070910821982440913313765403579054599921224319207778610832609088192808064360990585104697667138615140446175879997439210654552913976627035980457885269693547247688226220637387637045378917414583352542513965899437900025330512737621517111697083031434057763772292768696151657707923184295380055081923115043272032888153271224470285860092716037417011085867348183777640814999517894828296507433835585929567261420420462344313146389909474179332054613893650718599796623059768279453815288538594004374465681087299360879696203325418022962651748866461417173042714747088991460375318785407702300361444578324217092319160985594722221278104937860539603355035209045656876866415381803837578632001346316535288568593998708433385135715755188408423372052774222216062791048328356892426522413633286855317150328892404110603628893696215163566867442031835287126762113760377467604420360968473120576018581379277564986140009067855235173575587538977545428601733720192069320627430054733306784720670681238722112369930138992200505842377717496879786984447202871740228658026814953856942888153479080568126661272713405724755303867126253550104922434031984783644501692789857112933381811554363124855689663968314433936452490388268436076601610796805828686914442925663191706651004835742754007540713785525346442305287873815143574033326807511787052642265739017004565917956613363367471933672846629587711796258007368503719485449080451730511414011638477972141851445718086957116808591931107452359052957804865633522313939899601083954314084664652521357737845635635594429769313821802217558277658299721865464301558666750790259183567098179113274454668640485452931068066002908997277843409635151859336573513012860151545891329235097673549964928547801966932932777277610659955980339629366284864226600662175274920200231799911374929694310790998989788523133581837411706270099109279459393672455713820011546843294753524645198035778900516714217425354013155387659200293566814809279617708397538819427548364362324788662653106656895970337977138117687158105548389244431881662586459290188692191645535827574319724588383784870507646115475296972326304672165083538472785124541284886058416994446142617361494723365850552096782926362377318561314608226102827450344958934465468245954006024257745239912802322669809977564421376969565655823452390561157232875258411436971600411470668202989843565841480016584687122684712266492502542278163229587079707811073162054156571019054961062952927977983554302015866971342580754327070415115073966145426561158662194502911612889959593112256884020821481134001501231980935188947653774740923939867063867862219999510114357601167654576478400771215648552504675553652631911512293697639701046365273307557081624386985153768458592210790101466864820465666077389235557282441554467556137942439039191407590628851042708228500292413849444833651262460968069570764996387290215723393788781245642804553333508408301261343724697551028018989537881749905976076338448452394908535816426586597030779896515482117647557447860634450527101713121746502484479941152499856376739864275419495610691316310634478200363068897623674033337430538837932663020502333882835672567028049270502480555370060999493787391837671108324652717939749490597481250676971715293682844252870745501145551758940066811058992261248151841276017611811411887274572413802287051107702233361626519940861991365151787177732149135343171325963570255705926609298821759763745740605618507883067662117450926227987106288796642374051280660094717537306446983341125766514345467801301022109170850857456333788167674306579695352752143676166869626035002861003680151141687395013408918901196436576953798322233993027260775444170722889022629783177992510442629535947158550432935980049655104057058621049474066059547684213926506563385023004213643849612559790681501591969143956634858312507054320677326538188275884275107886773666192492559052155330294262524555672315514034789884026392912345926416901360808651772382910047100655600280544831642567723450232097407181605364971159781140990727057283670253338705128542777670983899963185946930240111611346828021014300849527667380963493241772072243503208897153563615767202700820461479775801950340023203862180599061144940297631835377016813742279451921894644661911014611402981461194280564179453079023523411900246837570509101994534431957542873784483700881074971158165429546479001645257417913405525852266215205603087742174929432327288507482831107662551472614657976383161884377268463657025482687656063877010334242025290874089994813121457120585350369438678750482445541628164325776911259393529988611879496239373025342855694600744246027039218591404431155722013586923335365589621061845464264820717668612915592171183491557882072775450347227785803371128754402118852662696497779734299037300726805751376345509065452470499771152338656741540759667286001807828234665941391188447950478415299791715469552242795959977483249749098144154729856726398843394843136479906418546581912783694281934186249899746840563706877029836122779488478015849960103559937024687849690515515689170897889503967015459345616938867807167382350934016893152627043030526997853293078436718226621464395154690848550466482856381991831742986166751803513242752173233490694252183014711530077920709629933842242926656727149369031087137074130182692159013533974804462296354847649804625060701458152488648760236684887914355314516265818917796761265782595118181981681044254889996850913972129942574101636910767699459646998565563334934817729091557460304359721174908710624610165520926996466684432035990548126234720976930050635146064837916857286368443462256725410214925359769688795382559406991790923193015325212536964901024443651640395352239064142041323998597222052931115684682639641634800512022146941484482355702865668732720081140181922030567504656879986036737923027379371333794512102069490267986276796423969331880136840719651462034396200061876091366707548763496112346222123232248230388694153688276766328691064711815330435460610088491421888195612048740193844188314932702563544622667512558911661710630118364274196170285674349766269310062034958003334299954120247304438475039760866057864514345508533138628508770723222951065702526427845206142448239674333189634298931074576766130399670656349372266937207854772004314241332793691477905804194502714575051020048862726839370657406000869875185698670555381280201599182665294886015354833856011808620179345081837914124086071187518476483594847918835733763073473814523558994575501588763392130790088638634309767210564561156248614464688514525041131096155150204607020153647966454650761265273455261627425314514074528596787641024836845254467857223858579509706178001258970617383401025827829579991212553362569959842654814709014550315424922111780290827915930414726165818710997646590887384752885393971444427639715814163996840822838498023284380865733129768795804080108863886307701355417615576573589725489445560015923098909783946350493434691086273697821816061793195812770178371503741153108240688178150147461201688003004263999364357199123049902951417798592453452403101562071608640099027564271983356263970688542541011654918968049984647651232137086895404259830149749220416879709959182020123061308112888239461649235275893165452695700741882252283027093045450482557353241644181353530529653471719973518815321814018114021209910092621976503477515448618895747516994954217971534012469546841874151849040054346531026855470552536470226180210581952214311535603720572039239234584559973566186577426541184455268877699457062169502204867831831763139996332553492281719620044008348442819347402916347449063826287493279275546962303367251145148862797186077453729802990592616042296098334476139933758210139481670253798728685880004650690300243587853634793764661363939548941992865429829630011064793643332258817519440699413641147721299779933762272040597516388553460177074372616592967741331217479003988681016928742585365278732728251483499212078891220690889658188156539798384331139356971957782445900967760132357158387747329622665956719786329684268357644498465257273930645057475745581973619803774790375513161774140411043479424601685237941073465868677839867198646929631273490654610573573656534496084196010506741518390113797703827155068331674200699131411229929426209680688487714374805974168983332553493786309966923567293209378744360953393793837125430206186894839350307705730235833717173154106746899348996486996231198585887923276258550483914940308115576604381833814866652308982829995287823135115578881841683647985874625837749874589942687788384192613487693851248999443749739642785826605231657455343877879315308426560948548969337045420424230665445855165336217895834289470720467926611740468031169083110333367765062731740323306977689561405194787701475443626301894061597784690178137908223901264029854714026072728307465863936978689722771921158057199058515421972406268544249165602289029057506413446029967238761073334521038239699127377613786798068608688136455403186419278380623768639967693818903002914091657689851030323485482272515883706497395534650119809423124565836391369793842875038747816600835980202179604622141185688760485442517152962269215524720968096159687665960838433942792005418796157545207812339197623327607879244889471757058218065058047984089888544282248414904169827449234143857530585526799957307705003072573479826497347064437602871900701432264712373284911700095912533127999896443887782038410277845379907218733591984612184226296351103012869133391467968434446494841517603701783596211408280361807750260109809286092555909870372810146591135183334539196312751504033478470726845817388732348939299912436932024285485403024073626586251026026899899295415467127267737038677726809661009108302376683834416191919481724680647658317867588060396025374752516402209355880386153514329598353790340684707527726798504415578402359843949160793333347705630484913082537803617023770261845303091364666015596737350934362512646919111958540171867785831140669826682679983246022184079073759821259756221015486738276522189431610413723028908457172736855850746058294313588226728849768689794812414866669348870741591827776664772445325863669071829320107144423553422120538225532216445443836199238118227392732940295380857114186288402531225261406147809210925336362075376428503158948931501742771923187008514442594711388876951547491075456021295349274877008031010408946253351724911972191625857419453217284075817281481549626955942730030530589242183647212102223686706445886268268877799837073315208919568520733667353137904980761596821645748802852145377472403345961092081642831719685504154626740435161580568576' ) ; +test( macro , '1073741824' , '5678' , '28148898337860105994977487045818154315885187098857720123923019503536550068661096672354637598480165134022041984837084308868395452311053157640615896546050985553558586892645700423928507935726495168161698045415140497515602386527627319206488017355554288186119966734541348472345944365178980166309150611812365395806608007167010671798672218072170128957907439061754394300128594626814429645477396628406899347464530711061456854894379095840425674956808441653400041181506139011927908393244086335493121681302022622095101860620829845276309901056671871394201026397395171820873860291913878080280170380979892472296164150372296767377145551512657194585337453691634475382711660977481092241928982823053143625635560423178221937797712042117395219329456302241242041523769729459117196674726421874136677546084294826873902192894352596290458993633922997209073832114653500019746006542685067098597091796593235383026677957632827401939309333387666537839316094357314127534920705674404309028805143966637229018794907522055172849778130036761405770603918926933967928498088220730576083729725145992964744748428164200419463740275487586933626822729962824800560240761474558428430552602958126365583033236298214451648931511755996108094562356049299254807663118738845759260918867850503834415322452603653397365429159370357398957195114808416983753993622244836716555146831907033098694343145327951581021334647653286088313114479559741196437718942355964184601385362964266877652784804939052253222575619622416395426846679242522689602653790030499520892085577500725499201404182852867226125589028845844427853042309885329741850855526415975172436890910632693916719523636332471118794070682433535223602563287248795595868253883675189904726519119448801915261351526420699337492762857231988691678382926943587916545335155283702413750409505677924941689908432596377494319662783929468093868450608410231488451353317560659020100954006099204197631204922322164052615891958008133081819761014762487524836715828049458561031763108536694043217084348793653430411896364791299284106421121855831489687835195476115378899943269695006351002750960984964426672142770799033138424141023720291141340435508636127792984379054343612312021179919125313130082850457997100339188672577640528770106417201838870495993792046104170422555977835287298352499757882230600591394487250631375216854641145304444397854662472195749485109206617330733383898435103350307488437904097790795468490159665178407362104384319804361651012650220132889393331591715558188458831449467209968941910069520056730023723713589013657691484906132221013788386184219197754113246865122654385680123164873741763553852763331300981166654373006819001402186381647154946999554421873268375821628561307292124869782352332192908982894920263895011772173577732089662917292761688897717750366293629569204248484060863934466108937195948443800932184673102763342937824460121045896218443122360882698024688871403860910852370898051562718960418260546695613954738347691519692022893663002976632717861663007580356823097781646192222209252702435357691413104372734064147456843965665955652873096110765830684236182089087886565807972209217987226299585696168982138854941280194328335120626512261001331081248654357371396176501075032152655115462224365334172115688122152776903406306442312011439667376618560819888585728027310382981804901247107028140882078332241335878660689097272500434681089309886067525115434143986130726703706878433743992681042628744048964001570508077876948518135387246241479296880092162188798942915085422997374189631465329853471853984489176174861323479075234363120290867769013702739919612009426292832097099802965008680479851809369240814572285623180146280697670984531193650342503967101652478766807739947358226388629806728654389375296457819784548065774571293116718672409678564611844170365489608651048260596575158516893594390739121659741649999445353536303503061294401994598214548838049962733817701620624687363493549713852174836185700963467241090073849191740103227875513619343224494993071747822732607018496581774525356633102020037794640774098109121417106381829411247224212510736696706825452538654935037259956407630578146638429226378102600142256743099393349884190724617199388463752205790794440451940454605274720879574121263752007572801341506805655067825631941739793740936589208965150634092530408044204662895618653609322262359163887982449970383124228287512441583793977627962068395199273400344976325835945060297779883770211181669216457812349694314847337342309957623761533535923980598873005880875269599846465045392510668257169787436828598047252165951647190114307062027405441868359474835271630041202717715681530050858890904183091778324015733255757236109101580482580441967985828890176389397718041212941356619163330226370976268329734773630524413753494529257754781863229577908457569032718062086750844184472834347570239536056326155201810881038696860481717433476664625621082241586991225812173672952437197866259897373157784743844679729067516736518800101031672599250959815137720332161848205045025007611471141186707050967888154770682560924038751737207811193901992570725369435103201791686524505756647772640472180936813395743439078761800234463478180846516292693783004681080895964724137021083746991000603574423399483472642365997697739565793596648669477318614358267250383134596038860702874813526614432265002227880708968988988737493080405962374293053076826540765411717793130826541346297462776836630777435661531826481318792145062405811198530844655829858226912380798813160973881440163721569917634885574462693105998116146807054360746972666730885604323790569427284253076223964273715359978030815340692680006321945430455280199860142711370872816427712142263431097232719784998704069638989755157328661993441529401194894894909869599801115592481835323158814300011842131902588936147873994871847028405399169811064272549350520174591847212829792438106825404534383049157807382417071716548998177187833979248225968420666706416390190707768457675226123463626193995384720198209759936791376844052254490031460575054413862573529726918023653700705063568941702083630891996044965826722959248558923416329510449787545274111154340053470755669172749024818935495960038271562190088388398068258567446215438429638813416144469861387009096942616760208032476355018814040329680679835588802653484030011247737226987035720770688024054612187818344447061414642220551886870397419965104800759185726414865048332705445586347178339611571166805268460025130817411913319730985020314703929369141828244979458118746350794440972469365515773623521735815053404694400936400473790547133327308952286757212455297814986317480141532831981218157144776502263149001123086063793023408647358626440541879077132102385221082903921513070649860566861228278306927456359858970160082545255406851398044427390606896847739909856033659996912142151062203182419823681576029939545766232546225798544936003488100493795546219182495490312417078545669619133839724414087313221443223560772275469655787068013125130766170757522755288995196083208632760367504798374588838275982584188716625435557712975930208506356967363937122210773117642423759034688847074262569157860691733884420095472655868693804788798853460305074114676050174059869840188238249706756922707852403016294480987516418402809622158722332117912191322396344308046005168529470763240755288495911503467885568547110796443005962189288373077954193026536584426645858119360236884973893893358131236585957253729142968547596265350388138211504681166184873067638534159817198960647922530056737171392998222652344768890440903942958874497053450492657340534404950722261826476694600389620993991121412934627781512375531587430119694418600921042491946241808425609218148001707575278154030998716384895216667657329409014393641864525969281112155349965482510043869560234065512374117610382279304357796353832138535779361023572767566136655174688134341190085638519772716269105777397667544752112308407281551063186641110391181368268011784028035535033180997148034817583725977310854347328290703963033914233260949053078632664379976313477320469323833039980151301644772548530801510197665795747529811668583071320734297978242386191013538568847456151931045213697759408021294424885981327060102359352968094713641880316402184069434459849295665713894902493734764537578851014033582135990357328370745283459359873866508862907217949984436520976291123753201389817868962086019717213048013769401358081253749874316414733761110700403879731481327366128134414614015062028812312964841192776605772461602572237848579751596062846119891809475923058727329328606164325877380198476851130919034536367632484283364665496341548696606675798822283175208724674569561785917038686953070189275754779088627350245328334100342506484849574784279451309720531675563912478225243235012917746633631513142936777117922425886154614922105224375020527023628916774071542994620484847765716560515554737127344964768600124294594714592715001471003807303089010784319406981481509952504990850744144964515173603048334536187116309970688343136766612177268007668348523128350364138371524518071578343144952047467567938905941913593215582743180827679406961185115865886327377643057697587542832729089317101509237763970252435463768975389494971467359397430380888536860037432765702651569010253133830734119885207436369488914639018501744924571605683611573454465059643881519676195549227750953450440893566116496066519058403193663154983497437154203819963260242165229405208778700716060684766534758748916704009916082633385168020080405048885760694176577865460810820723540078488639369178154320241426505293354277745875660846622369288568123133292561261235256785531922213375332813363516492867281651918872071496312751377718845934838314667391677793894714490889453532680855202389134062406106528371557396680459568935062620695390268278489516786937751530412550577162465259150382716339278325770531171352930227692196632869620798522311181142960193953850924687498620070544338109430949277948159507329879155210160241450119748611369522285092212852813824570293032227779647026176189223572123084451190061745506256343264326562147424832561761153522386762221700802908370661822157393320044695725445229989991188431755677388407747966911115439215417944956153478651673184696643896949254524276369957021748106422271849652943735723075220056207411130072896924286451944171527022637264455020523596282445070630771934761579048221305568215457139994617211411085307850660300120371189812200827308583395539820589069061017861328862614076955537014856977190049697039330309651801348304720476087039640721882498623638587478814436784569169724978777030982272340221145046578552827191352546947143035275990939793413754422719012024556590240543018750125119716435776594606691472552962887122631806058400823255622524530384727573782908089505801222820975600456796411789607997183949633694399179379455469571927557602044778175978015388866388477893024649939309704230972907459714140113585529896807765412294459996359442449522528811461650087362667428633366378783346662514627715854569781388778149878012550900142410424032639113511075518363232906427235201384917342979688961765962102151375425532423292393037112830729746922825304316043663626837496782405688495899065655537216405612388901278198928051245924054604064320232470222166534446528962122067805923069489828996675843271638295113384222501506572543452808653339012061245181593399976731212745904191650313808438588548016446126120674226308029977326300360093713369252084641668517986682964017531891894972707847947894703397603382187246975964105692629345413266060528347071427038400660608705761598293765664181968080597125867912583308892435338706392483149232139991310577488003922853083026387762353546878968616781786702320683290245408076838623224983658193002922968799601420269991247101304606880493000638853120262969345837845575632652594203162116188047397369127024269086257206506049305152721408369249824397488170653226655559449775665832715337829296847540526548358288035657313921214610780153539347835226207976076946168876430114358524272233723646988855002094455275840302962666856844081766293291452137772048110790637266536704660807449519739327018721619044684676011960134044956848557708417750475836513642574721735576244762978717150713261667412716273664438107629604313094428969497371965141673202051915817445633979326940820989733688568069901109275117585286470786533583664247227757623461868123616550942380510328263064047797942151063136084100508835563648567547381317493212871351484118995384664462190866589013506449874230637279552571417457669151996916924270409859368135881488538365606716772030232698811184558469064636039865808366906057231656211951193116937650377253371722258540457313473237383533121791937083143459043495393649754643213866611930380243460376842178995100338772584518299046902703748625190488159098692582062884386819474282872980115522829156617371896871414855580179892864231619779226423289057203279126691229766046555328864768267364321578175263384079348441103395394618249025089795196954124821643685972538912223482310109199583464708899243992298931497078502095787511123559987214651034665741434614829428967428333802394306584477458469633359430987362811953453518400356509454058669839297226788372776367280158730642818372182875605917838630804855852420246178189659203437587382007313143987554772337361728272583250185719831437811387405182412368783988197961286391351624156213505940541094805465500164206288920572949611162162113050402038557325431333024558950631067367936611318153854810023507303764110973942973756954917700791836575148652033411756519651474800034591874142970228482783950150557217039469375536911748110596177461367744944289602462137274637274069720165611598466507748445243616769937369465337749866771841938628315536271843426900115553507410869477054081430287053781532316668174001761433261847823250273169400494042990324465308492795796008958697421991828212877366624163731089097149011406345956531300275914140023841183483485265586993192321555157485947797690816166469044557255832260658892615942710042684013595996265472441252752479660126933682227709014013002675508541470117652788250994783969626624171862885916722522793464173019418067898505345599496735174015977358875619968199716219533552738926637031051890494978338580207273924479022246491648620522810980430864243281885381172828258575698372088024439462447934958632586064921165575955786537269481483937723577490467737221720409666604585388204859474442997324805317238786488235195413838346371458154199153397286434670625395599277956221756084293733060481746683886469999967199808248860997598988465769993529406058206112180431991132713457015628241212019583216636957380809911503435447564199491276079636441647078944643232895303344668713941249744967791690209229128883799300994462500424955736495750871431874087322800538276593777301272661937240773237633293854544754939117218573431236413676044727898884777030673570034488739595200946297274238360844588881821427893674692289872719794617552712949171013259904704167278643987743105273334320443413659380726864695786527091362412670288650332875617283949480199386204263527209082186767929892326304543956845184355613429740397723016551419039154318260427281778819523773313505580722929854977110755322952416544942744038661223221183759746326498482668536001557277096914159111874312153517083375211013183593250726321533259140501285618966863802490518474254707070066879721010077181030496698210597599398932161175581512349806140123118157674998684530687977209656109669570842567739926631008487026917889091286956137809901880327742971892768270601951934752109320934869765144253043800750296293513146606452851069332013443570630554704382747449487485536496427956274784905893103873987768740604182379428000525642086938721704335210558279257980735181414966979314982367116027137599914079057701202907012346767620471172401133094852140947507709878927974690819147519376781258916641942410215263854181358354623399721795114283058445754664116386572155146227613060724837022655475289960130851827789796741182786701725436689175126115738951255328459283705735673792038332771275966384139356869886544157959423900159524818315186940605161679257955706740318466678645508179828694369147823415549800070451991820864586919375260489703149506500802123898113416334762997208596193606353010669216102269842389887094552624430998968131186451615404193377168588441373578538825728592377440448612020203066191898235515693843215931480135839738134274029581253133656093204899636776425859689995495873537309952309610072133005212939182414561325696226801098867717882906061991955075678342181331882095542089225604653021264291770836186590776579787363667069660002867694074402468427249988282181175359142889347493588450134025762040336381857980331092417620342654222801867511538594654519800002440876114049836951162662750192372554175899061991906290784393548297931360854697304660217388326454025385317464060515392460270735562634219706400179619734817004536958508273604064174329604012897892903752485301302318494759650641425275359084845658186671712160266483012379281979192335879671133821261746570768835599550683335228772226084199813244119457702012788644482031756025391901885339469726868198018085491130601667643050694626140156924968196367534431524629400571184798126488006430721476852350356305114701192180938078185596501406019121622406459154304979668159832955371593225491929291926247593357479974910111035479049436421729173094079651242582981533593842859642090017067207572422151856331378087765898272716477356116505494492527760323026755374093035374204268993047047278479131391553691647838872720204941034872333171803661000114147594995620657679606204475115479977905970944031101379807757313636918891924602682562733654982817525199083912568378542859662922923704736713241305728532013661459371953714893728644715593769353695924513479019412720277833400288463057686946226328790417273092172568136932546842785412317831005776620608067442091003848742510088030854918907472765326404312356309549410618389906172934527763348333129738356175599668898544090809612543931015042371463710234727490208128449271087498194070337397932790231655494664919249685556900070331820527927700923879904712981785622980056040860293852786608014416839444705794599237330395343625677231165730337929171123427679896358733212313404887778628928451238376200468283542093779290360409735166492249355597416078350393046779330842606201068250136256437582935384024422088122049514231186924987486386922255709770571686751402668463117086056087909722759647760111192263760999074221853531262551997916860630419344885774566813330605196726150306444911793623636315706197278750196545874376400639813558827027494733550174136896390860197943805543393966475454387001187325653165083037204644787454406449433808128377060422465144611339962742733002574791924410578469257487544550966959852204997217505241888127436816371252790120771208092431156862674023113879531236174297777218690854959431629046382150819392457019720688697146956554700635427875989653883984765265971447058319231040626981527727045895977255770905523050300664800936806107450054604610397698279501524594807393099512501267065236510023558743136424070008416804213522349576537960765214664370640100210453084611914479027691656864136391290070746628452999965623824867446732398214983818615825977108668636422441563513003831975312156804175525835009983723583171193533501782236576964961510324559549005090600262768394195823389119794969001830645368080861318691095973101919011548228483763812949239379397626324227241369442235711216350246757630159193695160367142155317905915084581982797609343509326821521911481105188403479863217823202421104691839244143919644602509537137465590142091458129871968626743829025365323860594221268369465152742323854658707635430807412874755583770885944383748932124569993895933658098650493753903580677968213439946116629845206367354440478040241152208147047847884378168346630550895572113154003279420848335567732550380587563785065372446579951171277007080376181880859588508139391302063701382117980942753440726346766393542850829543275168072355642671555135145516266084215524110054708924580833152698259832144444062702113296080126316162775848061402470651419774813974402257085656428945474157242235893836799387584558606751664927393493334857578593093025923033903249925802452928325559868490477635990253074330537697360009102142806389826773193350715830565814882983312166010168578638318113581909715614425901966904069916789058597977766919792967752743913284801516270290058840699327499070875081504588210302710253892626213023043634438957621385860258666727257127841683811540495720040171541891264342129606769050464645389966030356482089900989596777679522985065453229500095190697538100163379643439267150956032532346334280315920319424327896526362404605954432140230470878470882264003739306894517976684362812045551613042852192669772965726304705516783708137205632647644097851889002247751584331244400558203132964873335621281299717509879304619288476150109332057109283431502529001299150493028581031388664548216000769077942923394288901958119435090722574806233751271973249874552746532634460237024563407790213999716314923882457446186579151315812380783168745156472877906107226071419443707680584882191451197597628219448713650209673215406805360654332701478226078972457384732586255866424341772998013397576055716829423544245310237330356105227120287256517184974300181658805985949145921001482457911564043446049296375077517623765343452571128748736683475042340324486422980741771950961157672017460212375000343093255257855859277198951018128053837238080978550325407234199361789853768134577442527702115229975219525718789959045191073349653955820878281896398142889923003479767972076383190379298185808476922809215238314249626074164796021558425557210308754766801631838440222800550783465777015428522380797710835404996664778131573332303144318415473153348891859475225796874442481044462069842108821743637445608331048146899622744287339341798591369054634267513173964115613718772637770100806267461469864702974890809600842718955909073251470396524319777099477171768967587473664352749169748604394124828227185348843004451978265273237048553782545156365567001316028448768834710532422641102380518061679205162015773801588206664244457180510418277261829269152549407626154892937631258492719033672820382433466745502235228363223303303588498621164057491411472890847331713440771748363429011212793517034275378352451698293411530204186563333810558260562682373432930496010859284665817691922432863011084933699996961786462463745048747116470391194990030628015332701370191200450760857094229809065249035739502022559141983819390742711457191605178020143282612262800696462461845326859864102767722533666771388582815245205576926226742350534264234612616163494445478555919018674566723039443492562381116590300549213807725226129072939143803666847794403804034573197127632276495815673691688391776493042924568568460383396331869780349811708739849417094527914268223170364569506352973511214621114908992490959875119891914002201928543340360020016065452018805546551793704705117911784155214540116673803430547871133266630619513912440304683435504710983133680288052313077803153090031854465575440001750060605408581808515948034989770356122583873261823440265390089426304521951729320287328409207700383100123151876966524323583031388935239745236968350327632037316230013986711095983640286158845854503322070918325810361899675959053468566534714906108407864581052288055415062268431577178677164927351157974624449718170551912415953093539272615139170040559982269069144788537260760097258745113985468798064087385257717936930463104173511481167429308423462459460962543960069832104794421579983837186447051182599950438328122680458288337425520120137574451732030637289392014736022854027545044245408438033635786397265945453723332808703182454632061130743471916259007228432728541803309270197500946096444605584853072197436724505877621601824420511356681513957999452264448682983769699343994225768926072658063255358146106163505098999696551897853532925142643283744909834395865851620590128292004057571404777642678387685668703868806130918608461650915274491926100585166495256709407294941727457418325940432516141904359150294292748288413140787948986359366462074746713836604803390213998570822968145438813731705421355204337496672010739199285545674998128780178114493708777570231591229449657604145369857370727860129063567167048674305858866375066717347101711427057387739505853397158515841254093617246606188397586238440372102294736076889840979753873898793143249127390280808824855731104585046537769857330026521552755052259518063241611856641516275156726512986189523254888151278812592686063111446785816181415218227445732930445311585144011106096911480434585749527586559521968949018049836045512020729497009550286634399863511982953971128118927749655951377838933784252855345681378774160557470438174481259093651353914975509617330930104363369097847558011805545516823230152705422673827213285554606402424177535395875396349439257879147269990316570555566363631107873583908853302109598741956597344312363552802425107351220022316890426842094449146094093908848454232919398697089400054268720672186047939476318363153358024503206934420826394819801998769864748411198961176921530138349929123130568849437161791761185855627806231398428339981489989031517554700169925879901481360164293541370512956624760397990743413674286804847840458699624232365464488482648339370331099527120400687180993305421299234942550487704295774851922811662380580543940934664708380776764694636606791934436854233668907969931816983166891497973095943662588130142677860603610047337982454343702508574417771555874499100448295382819121831778816886809637030681464951442852987045658744822323017354193015398929135356947939839140306698866302482879187121853214437761579840307617080110522099185105281184531897202070221182174780155244891343031372681720259990267379551766505422208965641261232230697112205687652134593678103177579970271087834049239379072209949397401559634057001243257514833108769363888955683621052565237599125728261239118022575912894175987408009344745117251993238187747886278888586407900202408943623153890915214818002421838815923966958787049692850878031566893781773464813916368968542781397442084762131956466252849726966494397504673443856343004132647844309750841983656463183520640918053128194362601997214048354393807871873141019891406717655832279814142519576502831792032213339668060138693124678086147323694655541522077131244528253802212257686660195802890422055107005242552590674759212912277749904354621960351337529800061117715230093493340418671330565674438486174036271062712551650355860019081761842688678384695345181209344993751433013590249265630411818871254942665247341590902374863056013659912681932484952788985051121820811227358115551518694832616404366490062429428314767614403471928494311323127965060377740115015320155059011183773686991112928134219938238861942579094187368578097611857130108971701774055507254283957072531780780052063471633303056993180268811324636908498651379339810544455043184362168932560296467858789354987134340096423851366091213584971916411716002520202011394261611806506910717102336647860845390923567597373075328613344631519251210849547351316195902683921154170420914315410594227945953667999824864089646190094752335728668593487864038958074636801121239687073243551314746481125760217832551027923488199932464686665557283280854081782932546169494512387423905425853523327120893410410728807263709579745414874034347298836164872219912390950976376370657059966587673786130299383959548096535839326684422935261597602533478601891806412747416883653296136723782138835982528170764256084886875777597602961751140496094774423625070287438285325047835576946313794396636877736116310029692958421411875762799468941694906926445604500237069120930529645136448763546020507845697850054138785172342116922512128840514349291988431425294645753905990244686733733410385281678970312606729383537299554607797672907990394591796359202264492486835738568186180945133516707434961240365199176036679479430505970223502962244183781380913196804818441600413779120622805317818799661043554644440443705675483765184690435438142246744131509594661229983124492357221608279423279364533295157372659250705441584344308292111187384818184306257974181607894350319552740374868519341191483135283763350477192196383786427703966689423831363409240725954775713154895328593988160732590160054997239929414823714727974826024035217860503862168944433455274636864484104518503915125790030638481521747050177942348449246957290358941785218596751364264136325302012127514536979011995360578526074657060450670609980645092613668861127834866905147761396712739540375500705135160407800946104520181528985815263489926159911880084213321212768952431725838938601672188812651102720142982130177098645113732975494219793752073889227065759762609687893651335914924691660042543013159140121403093465609000857166311112970382917214818048185101582696684107408042143042945014390810480019118356949537099663818754715059209366691270390106111853299655506660134809491448878987832685380104145003045774887739416422218687559783784403589016023706079260754932303246949584114360114089506475306440896925694575031099223891967798964042809303692120072723649900326855730217433709980256225249076797838874125035531112686624813374295588750086023037138555024936706002261539102751472102701168353855022613318138841001365460254229596701129402640443828649877042750795516229713646589327314125732074265431844531268182493212072736085146019842646560868628969743149933436726067266230293919685332063288083684098369674426608064526187772953954892826318674314993417979569039823495888917128289051117477198054203719038275454185022748040457767103249901035731885373830510569953185345260681492090178619428435327767997448105824239005042284690390909455119903699725245439425773459997919739647511506450037183108134359259135471444850889646470849065205304395614092274471027676451130301998192579884981980383331004755985458519740718112147812962705310617555010259274607985705228893551463836617686124231748426817936045494654384933976330192421266623131254582148198369659191509650211552964003305770959771233149223935846202962723117218456932567654472669816733803847092639735772223976250554596127643265710435182191800068647592743527104298607516812775387380003886771219532565745981432787326595836968342349008462815121251789385562875463614831060974949395788692980727720786032761748572416672895325498419331366014371448904732847968285929375551256672205371236319010761607531035489389025830582442491033340311783200278400330573275229324139285691959682207033048166845240280073722049031522270750064451502205702838802314453492907125113196867357626343878692666709910893945062710386453480965984908868928331852364750709250772228522623061255781933618377709440518884675617168771208213362028807000568991336640250325843144807507365386167323430530383757386514877678566741578803351624259009223626044690394968507237740190193077024096179943106691946391713265839010095279092109535492123342892233114535396448888859072578357724845567858023341418639436957064116245382812764104096389861125288235620089839796959708844667271837724791853923155783350300837209697417124820469598763421016230556944144273578255047209140685603269167269642662464781417402044138800193094975708451596078152422131206951630446037496865433989208174418961047669463435692646401380865304211042807149992732461476622644253291650530746199877456840901162470871578154957110644808251440332624321213214254142116691052442993385768448482702905034603814208635913143936488381755746324155738630413306167461255699186732545319102104515653378661263778599973833109965924889965578020478609385756785428483645146480030473312941683848824619427905074772081786032588682913441577171034065769355232243310095044798628461790230246155642424833564029628986053338033122509288271156493098356126356548508541821956447282864237858810739664866039796867178105481303341995681155609103956708352541385258044674233021538488882256047867864755689487264233200251948632434367557411696985908027963208271722356561030717196004391383906360151985343954617673570213543813895091001157665808641175774156333012362213294444222039514585400935738306777816189406291014204426171617177142780096988819473458459887462124401026378144063946634234937478266777216707400466276855252285387625315985860983345555708831049494034215551909856922269254608364369447708759473754568912693844211940774320914411502602340550200223765229096489309938496752456919270003385668591424974211318904032650304107631242385298382914407054967999534142551977432253069569518207821850880260921220586532594795739409805616209429954329604196061909860469006839106493724703640208556506345365382655886368345271812409551029573250054776291206004935504682461872164043783174653715005083196118181680022375451553428281102240058446959296955227821993514685348539842528436786789259135360096841258032925547689013177486729459318947085055431774319351281557368747716393992737693541108230965435660525692480717964031924241664724388845193264670242141356326509471299306016413454162671571381531753658371397956451669887495352630248631157664761965740380082152914081452732415621628375282370868233950168887184531780269004718739099708910660900090201255053397723188285495192828542314394947620483330304687649237120551521237832434525777447953092911201834715259217245519280176880179885337857732604864405057483694102485505256429471768330406332418310295400408419432432940963470934061812695129941627390018523946146290853393677169776503143927133001591974399819542958121940959619409121036386106497029519948200613092346225268222984335952952211870862507812271819553684431413604081858429624556100379315289298469968791166103454024434690367788140204407001004669551371707738311759495150757612726027877731029702306303481073738582347882595922394576946021621186829772467105355572710477124514971906584017529758090618910480942805666401277004037346463984772905375809948144463853491825056157101189240572959686371293182284160480818545596306440473897493917768183499944319205900645179847295735484551449225229261645269968906429508149998138016622129015857135775809846587750617782253958791389940037001143544832241065010658361305409557331037342515976928994199426578267553413249193592307251067458813978078291350669052525953950112448480003624625092254818432528874435095079342421604083110240934432048412320452642368267544141594660095901465974593532827701312505826582575011497446990637441740616567155660949020249228616684830320354314707270016757257201734175571113012610174151094479944413698938350396910278103547991209738636261259356477694949886515282971734718664058449032335352583037449070952755124611382023143401658303667877578519296296527334023449638130475844470991345333618511394777165597830452951636561490737471919475646861928324359374967832521186421053437409487480470461954966554705773855950738645971740817037823241512416093275245345820788368984925734262305322634441156380026457447197182213483013402950350246138649304465256498219312777160525099167726998120704957725403800575045490582281116114994378718817183032439438208226746360325766986720916774835054649560456316259175632867603045141112409889552612372622765216331693789078480741915298207295555848306263838407170482811223590205255671667422964415870641962144241361255726603720198161298973619057586912427934170325155184902616599199143436064767051953442782556327831427853713857411098088989225849680427893366785692117780023838758363675203567047751767933295657237755027185531691483903456972232893961200648229859233228579781125136864313569508852945160079164443773633476981446295403950535828103167719751726784350601629663178850550389728335502140195564260831725188380387307159781158911038797569919167004945795140577149749170901864075423619030300911182620763077511907189012876305215130787412613925421216160360751332520310931569700798283937005333531483817004253266974122408656002783119309246945216360789948717449837131577677922669864583629782440739388630470181967026233829667565773873102079102987908580164142215769036178315875089633501680791005716918960107298151922455023391131279507844863316483788898011992028922935242614044660187284736254085622682834529882590617733762378374747202648059522912576707100472276664571181081828497963723051983320823361890551873317486588183597041968899647405888812769324885665206175649824784331136051942330320955997813290150374169555690598341682414758358005345032263076159951017735855589303019820663937187166738223420643133072273883753060709742405287892650826450075887658352906610591407918098029363694819236430463321771822021175150958737396912367945520530338753965695796553479705539515710152369148055346684802318377472296952509107769076222779644096906583067893946837767792663232669048207226484434581284994990609048194589647870843829686890438595763980976771026423557663089024892131001305788227380520948975891163833166047675665100986690807244435880890604269549826217825523138658314976275936944089547382635813595490748259777205666498345149897846304836074875260873003896477439834091090867636750095043118229481634887286877880618142748512183455056884216089061037969239651354971148328982756655369145281624013806819439797157064508394810115585016956024709722310092594188732446592100117958881002635994259708482658147888287467568985217077229723202214489094759132716574769640290873606782618033552995230016319587100167955339887968922205047010011389063615635451818872082020951265796370440182994059107927214391413065859873935945939866806647249901995379512541102421318646178957796346016199498645184725987268058320037711898529749988840623868356343243014613790813886854385271790938818469590098025543064598325239352259049625770848587072012496241155997192163530260660709931448706553743372471711358996628745306173083673087048269342745699715075360398067471245252833958545215646060059000665959497705967713122400751567337815731755845116818658270900111989799269094832164568929732353735566608022923214255026340432900765571233256796055879631067021720614281128969644791733928937006346217595371531877564139995663256573848449072798997910083484619753891994751816910829518221088342707669386410746832407567737548811686421700767615090296347645343686568901979295358016279996388099431659129877979491614467543895195928365541638941655634949364961607403740873577172023120167622227906175594503905136634860440145452083845427286042679614121738077233331267751337860968115995259442772881335900849426085481298429404772477164459261951878223611738672150293049444078426200516395163393367687521048654041265810615151381063263935652729823202648067856665037222449646098366399836365825764298326138044202049679510635928460540367467980830027780617634593554463824431146300071372144602579306617234168891833603527083083269873328058909495444334975114655549063249720495617631057572031874245243997961001300513101362881251642646541467566216418471740031857891367923431107308911790203560135760701742446161244397707823612390132206932904487297474667708365158321867415005381327784224688971310518664331206516637603593863201168061905577055537633677360364992716387876270201457406093693672211367026066251359512820184684258506560590497065152819145724007871945726278627820342047898093019876389613692251293554098133528921703415241378403497988370527212999054917321986991814063285400208883044316721908821428731628645291282887066115443721552877170570604616124348447368192516248043205025944481980530204535986716383404018559523989983031812399260867758441326518650885918827088514421998934133330104671880369209347348081232645725979472839249731922910513395615257747541668539314925713185740795246049806364284790354471628315103815173988609118640232034770300847089190756094694855291947481048264317280061195943077860015918935087735267314720428607580533653591482200744245764521762708826753820707439580086465928632736043303848285308853903855332348614871305843065583952661440745127334275983316524983354636338311850616828793114631386447872731549903896191810618225811994194258543856474840852403622495390802298101905113183569217747553051194324637039769564669265685730461935387485745474548531803797420197881185660590162228866272412460152679622021094012535010728078962481494326411253419325936549782831143489394327333139421162015929032280145593875719333520986496480401015368469256210183619123828239613847237761325489122341426463456792867754427053754130540233036035263170583560480037008121865434631069654336463838256630571872029280200897225456315873962517477987515356054666388335880482803738335843281234886361107822104373467807207148152456587769815724600397786335996139383096925464081053403190812702627052226018164361018089519728465893624253132229741126080320799891756070655845964271557907548948044677077363863257868119670264756034808085525933006104325450582318119445844371631130489034386859999641254958672328012330708972446485735538272452812683116142324976642281414157806727682979925482140939388726958044973071808687704736117992808583199418428491405610310555841404113412524512607651482794741704104508555513921174117909699949944138077122359611486542282513706246826158111267704327564719834230477914342600808913796656021750262931585150361150826736050413848790484905133275593843111446885863249713473516993295032625202150709018861820843089366420307862925612315011763286059087359702646725316162907318251933248352262736009240653208822499846306085714364841289204210934994061604517285057191437038278296329720531577065146776291030097029355798319414150197610941914453739920532379971545817364964168876652813969275610223555143453902384109425782195979757650614340946753732503697778300949396933922189195629933830643427842357993425928608221704765171398421314049866443720720332523788140277791693319134495238776754114249069486675919919115524635059068477480012114318640538800382974854180294512160755863961496844546963247293230634774004814278524154396815808981949969899661609677131701008847067152145047651867360230416267953917241882452727879680761316075541059208603633056503562463652855050253493849478608019628492062758037223414401417765687997128882287982851856003322488026022040865006856147528873435385875797540153930164571391471671391160042539309854941702496529294867154798015788742502152230116550540162661693692539273155844284794665714954330600878709559778016078241522501246825227935293632552928387677803748341379225975660508623451899520006550271647002585568931118574545455659515660038345490294841747607977013620826761777237291808944805985937922773779602164771924014259621421398152048641717356805328377078270519526709847397617420484043908676504757819931941243041177123618041199834460478895183606359631910158614297021460961506443641195117499315571630596201425150181128388605065882437056059202356631642243208507714451165052845415067097808080851672441966218691001993587878740388639996683623023734138001598565353767664950990981120035086276433367022305016868201908444769762114808566372599134247909095865960176282379704629611831845169982707258625668463208361346123275876520219495822276097730472791775307022937656401471570150603123068394019432703602830427629891416112019683710380141408360658819167165008669555364748658228361388799129393430801106411036742406503306803992584318621042791299946447585114169600357210438157957095528391813802687194266709630039430263970789169155406821880784658555589183142366431661016710970043339646209991971708490052667399949393124645885563312313000565256168576816471242098741078655616401684618105443606700332167319459199324804559567998844314002622600802628881188006088161891775688908776969324799915484922813295198723011775033753773984506158063112672102525281790176367584254556349673906995336472433972094889433283905354468728810249741810297092250546619901076403998845317693420655635133057775389193863669306991834605425655868705164472180005264501435736678480521635938716050416503207778590785511538467619550627020032108893492813556129597923638223179897023498575923081788821088015804957415400699801583142361538757925647242388065271363797533919781055008828224632453178217449526824788604797672702208962436493342699356518705273202494331071951221069318730689993098592688654567904468057095325225333473423398110323034834929517178574105226269026108740903170496491984283872607251986315802385098293436390674754854459924659801591397981418582800158623004657928930499141495824770952134245875818682387530291630027075762725947865821227819368622145724985158466580099763293854618850180801176478217411245219876559766971294143696106113612302343864027910528445943043133916663267112690598511400033628218370711265166997699353177108131047643498369142260604016608498278071054060236977815657846742243817272015351033515462368642825223680361745623868563711420294182888855363490410712215539677378212792938504001171148596659381275262256682730800334574549206704438125823923904766613486206013683813771293988827994751308475891995988301215387152574419412381447476226068834648858706639617162206593451235290457471618073014725679837379893842150101611995440452298353244439201356304245337965099464541409401494998025031536565597836490234188808696463603490112721627711519596821915331825959575551885212518211442269003344859271286227913506007307492776291453029668960179359667440503179328412171436131912330530510150770695249381710538279056954140700591999368475200255875436698833909225866367218550888340455501359261125896501916510656688648535225387182212843221884399211433135403492193025160357801967177079276486051857093141011025001336496825522387474808295736361392021889554180981081598463622614232871932724282534643030508717884192962595416173373901132147755094503249975052901677902751297694205366921037547465221635547109834317374178362148899395469037802172487094585186770930012509897916799608892358494351340358146933481155823397177111871069488870844726702308338279055819352376060712105984288779181524985526892916898169771532756305479326497428699889380770355624262738057395122369955283094631409213654957473184032227153342629154545066740409513258489251745894951453040542909925854317157799562581760030422099105501627694451657079935138142010860784796990853862871522191280775790778371590639687771159316980947819357536812939905863927717243432556756272342151545076411956132389217805472604221690864013707763682018315188952607119946758811062148170296556777942812437533627450340974634326975205472489671702387269156909914717782582977963643216463960975465090627229265120385884158666145053132529879199674915773930220784503882143864875273224940706693965405173279072485994435371203100135615211846813669839874064050008341057733642309562593482175302832142539877643154259022027570686612027858107329925902923992533804455918636701337810809181701161499325971154106538957803193456380395910615088491686184579554366213353862404529468229005466380181873403409584627731219911460708898848941094056348224778795961427666141965047354825879067952211675767220530116000295439261008669342189007742280071068070049356315167614419942532751651005774976056088498859079183494367859475921643977167294332870981630985883183324300422297953590981162371465213620389531664792862643382599634861925000395120572493802624931228823781014097594009428931662915167760327883521129852617756650413448593360913038295175844623203494974914165179908375706734492901224902529747574979742050002106663406003731866003308390615816816885072065325693182794964309658585406733281728826923008660251012331523873157425596492124889226549015883614419445399308078104363183239762732476535449006179002325229065282571464204281914919738887388806093573140020542097502020482802396957530453128838606753183180413618231714722120716858511620673458780848212762689022503174722516119261588243338767449952444434492732505531744736476097910021749893176437861458807350602081308059329158498808470348829171596127767256507414629365764148529834296644442209403194238593555813227361493776673378092377609835480829848834776365785714688656577506221151558342984932908100108088372100268085844151793490975148337058265267421349296237603497728123188032647729521086794670644515840940201571775430350624975038471658580078746878268495164463287848960878856056346450934896163169743105045165581323819513175905223706128682491544237639104590089628822641723836875903418320273003356617592635747925184879866743725876316742503710595986069001288762512476804118154783404812514751164897754250989522763124616991870608224785876468099785756699995690777785521839922485175041682536651172403481264582149129122640889832309992014062260099244291268883993005187894563801642518228414478270295351387046868187081518459838095851978514656128229212018856271178656781951865372510349741871729755268077300762982107262353653936518893638816222941960957234072662945228277096588212009569956941412021462076133412738736146790862165840981502021144402381041280424251250883937325527577117337986616772117322486188058793070661939091520797904347760947648229902630915645259852652351426082406577287674223134756799727233169989521419114425894731716176653550245770496344605597265572794815166192064124403378151092763885978383102009455257854519465550301246995381640601210343662742827682420934279626373395652395999817378249059327854481350431454370932564627625133649242512820576486994269314077980997512181283650077115840159571482838806660739273917501233904422474377532434136501025892293378909898783835997744621072578866963094511489842039592491140393655505817457506101458107717258837998857511634160292786691167461904365591738425550323512909380910134644272821236782228219560211903524789255642834093938631309207016144273343561768392015946096695071260787134006919955539723059270708621799610107543927526866927300423827447908075410338089761911335554236211607220959786761543017923621639938468989547957660767931657662555862328888341958281025006331151526846302872456080086024493507245030108230400783031595576151219819834046954989509826434061777922015202698717273136926158519899556374615974574751476743761878619405436331799448199218707421684180814768572994000075233007328760708771469685534860487027489184792709249535333983754626094433733032515199669313204947984860617843400446621737370155244778071837898583388336317051871475231701394053764483680409312689893186371509520310162182341717820195936661217314875571498709625015897265778525908426192975934981499327876012898297481801302513955401656740742216850342293182123512761948372907243591709809867936260493428885126511278718652820255574252494032278725612072481843951172165236478241369093618112853011844718845683244161791308969305441124717285732154355994917446499020686931075617421667334186609165302628815065613660124919531779983740755489097111398429642375934585615080318880945851714180064949364535973649030877678201116971542188813985546353470746080703026718628888167099094905487828127808372458317234986212227785960019744988804796058282310039384459545585269109729037178184648276479018986182113845519243079489398133256876630653378351331911274848188248662596501979226917582116118414287306394568957790733295371259982778148292520276396147454871187308323855969429534148144661681789463134733719964597750987783364244289405724721486331025051689631320360354172622130078192112932513759893682282761898438094232952668404869672405207574076058791075187428450213304735992945688679113077409644110920248046893065024931964522048240938556520005706710005859495886813562695510970268577213963715728820134124358408738944689728844164577395064088737288423942837489012346099566084287150267414187495425649479841848385871962820959477885446374521648256438103084109135495704911087255494677079761801565634611237266318594849791726944047395235607649191909852897356458928629738104459452802907338153775097668122498603398192996423582181648082577188518353374547684930803109595187299401366263822653454162234774772311308453961738397188217257178280423339056239809467587898119899705455896748544161972100059530059884503731622192443130376572006764511595596363774526764097092375628909773455008189308634710975487576532392383165983021315524343179231843380356936802680309074711077530643449857659333638389866129257243516335469244971824181245127687203135672398351564301811199850315776' ) ; +test( macro , '-1073741824' , '5678' , '28148898337860105994977487045818154315885187098857720123923019503536550068661096672354637598480165134022041984837084308868395452311053157640615896546050985553558586892645700423928507935726495168161698045415140497515602386527627319206488017355554288186119966734541348472345944365178980166309150611812365395806608007167010671798672218072170128957907439061754394300128594626814429645477396628406899347464530711061456854894379095840425674956808441653400041181506139011927908393244086335493121681302022622095101860620829845276309901056671871394201026397395171820873860291913878080280170380979892472296164150372296767377145551512657194585337453691634475382711660977481092241928982823053143625635560423178221937797712042117395219329456302241242041523769729459117196674726421874136677546084294826873902192894352596290458993633922997209073832114653500019746006542685067098597091796593235383026677957632827401939309333387666537839316094357314127534920705674404309028805143966637229018794907522055172849778130036761405770603918926933967928498088220730576083729725145992964744748428164200419463740275487586933626822729962824800560240761474558428430552602958126365583033236298214451648931511755996108094562356049299254807663118738845759260918867850503834415322452603653397365429159370357398957195114808416983753993622244836716555146831907033098694343145327951581021334647653286088313114479559741196437718942355964184601385362964266877652784804939052253222575619622416395426846679242522689602653790030499520892085577500725499201404182852867226125589028845844427853042309885329741850855526415975172436890910632693916719523636332471118794070682433535223602563287248795595868253883675189904726519119448801915261351526420699337492762857231988691678382926943587916545335155283702413750409505677924941689908432596377494319662783929468093868450608410231488451353317560659020100954006099204197631204922322164052615891958008133081819761014762487524836715828049458561031763108536694043217084348793653430411896364791299284106421121855831489687835195476115378899943269695006351002750960984964426672142770799033138424141023720291141340435508636127792984379054343612312021179919125313130082850457997100339188672577640528770106417201838870495993792046104170422555977835287298352499757882230600591394487250631375216854641145304444397854662472195749485109206617330733383898435103350307488437904097790795468490159665178407362104384319804361651012650220132889393331591715558188458831449467209968941910069520056730023723713589013657691484906132221013788386184219197754113246865122654385680123164873741763553852763331300981166654373006819001402186381647154946999554421873268375821628561307292124869782352332192908982894920263895011772173577732089662917292761688897717750366293629569204248484060863934466108937195948443800932184673102763342937824460121045896218443122360882698024688871403860910852370898051562718960418260546695613954738347691519692022893663002976632717861663007580356823097781646192222209252702435357691413104372734064147456843965665955652873096110765830684236182089087886565807972209217987226299585696168982138854941280194328335120626512261001331081248654357371396176501075032152655115462224365334172115688122152776903406306442312011439667376618560819888585728027310382981804901247107028140882078332241335878660689097272500434681089309886067525115434143986130726703706878433743992681042628744048964001570508077876948518135387246241479296880092162188798942915085422997374189631465329853471853984489176174861323479075234363120290867769013702739919612009426292832097099802965008680479851809369240814572285623180146280697670984531193650342503967101652478766807739947358226388629806728654389375296457819784548065774571293116718672409678564611844170365489608651048260596575158516893594390739121659741649999445353536303503061294401994598214548838049962733817701620624687363493549713852174836185700963467241090073849191740103227875513619343224494993071747822732607018496581774525356633102020037794640774098109121417106381829411247224212510736696706825452538654935037259956407630578146638429226378102600142256743099393349884190724617199388463752205790794440451940454605274720879574121263752007572801341506805655067825631941739793740936589208965150634092530408044204662895618653609322262359163887982449970383124228287512441583793977627962068395199273400344976325835945060297779883770211181669216457812349694314847337342309957623761533535923980598873005880875269599846465045392510668257169787436828598047252165951647190114307062027405441868359474835271630041202717715681530050858890904183091778324015733255757236109101580482580441967985828890176389397718041212941356619163330226370976268329734773630524413753494529257754781863229577908457569032718062086750844184472834347570239536056326155201810881038696860481717433476664625621082241586991225812173672952437197866259897373157784743844679729067516736518800101031672599250959815137720332161848205045025007611471141186707050967888154770682560924038751737207811193901992570725369435103201791686524505756647772640472180936813395743439078761800234463478180846516292693783004681080895964724137021083746991000603574423399483472642365997697739565793596648669477318614358267250383134596038860702874813526614432265002227880708968988988737493080405962374293053076826540765411717793130826541346297462776836630777435661531826481318792145062405811198530844655829858226912380798813160973881440163721569917634885574462693105998116146807054360746972666730885604323790569427284253076223964273715359978030815340692680006321945430455280199860142711370872816427712142263431097232719784998704069638989755157328661993441529401194894894909869599801115592481835323158814300011842131902588936147873994871847028405399169811064272549350520174591847212829792438106825404534383049157807382417071716548998177187833979248225968420666706416390190707768457675226123463626193995384720198209759936791376844052254490031460575054413862573529726918023653700705063568941702083630891996044965826722959248558923416329510449787545274111154340053470755669172749024818935495960038271562190088388398068258567446215438429638813416144469861387009096942616760208032476355018814040329680679835588802653484030011247737226987035720770688024054612187818344447061414642220551886870397419965104800759185726414865048332705445586347178339611571166805268460025130817411913319730985020314703929369141828244979458118746350794440972469365515773623521735815053404694400936400473790547133327308952286757212455297814986317480141532831981218157144776502263149001123086063793023408647358626440541879077132102385221082903921513070649860566861228278306927456359858970160082545255406851398044427390606896847739909856033659996912142151062203182419823681576029939545766232546225798544936003488100493795546219182495490312417078545669619133839724414087313221443223560772275469655787068013125130766170757522755288995196083208632760367504798374588838275982584188716625435557712975930208506356967363937122210773117642423759034688847074262569157860691733884420095472655868693804788798853460305074114676050174059869840188238249706756922707852403016294480987516418402809622158722332117912191322396344308046005168529470763240755288495911503467885568547110796443005962189288373077954193026536584426645858119360236884973893893358131236585957253729142968547596265350388138211504681166184873067638534159817198960647922530056737171392998222652344768890440903942958874497053450492657340534404950722261826476694600389620993991121412934627781512375531587430119694418600921042491946241808425609218148001707575278154030998716384895216667657329409014393641864525969281112155349965482510043869560234065512374117610382279304357796353832138535779361023572767566136655174688134341190085638519772716269105777397667544752112308407281551063186641110391181368268011784028035535033180997148034817583725977310854347328290703963033914233260949053078632664379976313477320469323833039980151301644772548530801510197665795747529811668583071320734297978242386191013538568847456151931045213697759408021294424885981327060102359352968094713641880316402184069434459849295665713894902493734764537578851014033582135990357328370745283459359873866508862907217949984436520976291123753201389817868962086019717213048013769401358081253749874316414733761110700403879731481327366128134414614015062028812312964841192776605772461602572237848579751596062846119891809475923058727329328606164325877380198476851130919034536367632484283364665496341548696606675798822283175208724674569561785917038686953070189275754779088627350245328334100342506484849574784279451309720531675563912478225243235012917746633631513142936777117922425886154614922105224375020527023628916774071542994620484847765716560515554737127344964768600124294594714592715001471003807303089010784319406981481509952504990850744144964515173603048334536187116309970688343136766612177268007668348523128350364138371524518071578343144952047467567938905941913593215582743180827679406961185115865886327377643057697587542832729089317101509237763970252435463768975389494971467359397430380888536860037432765702651569010253133830734119885207436369488914639018501744924571605683611573454465059643881519676195549227750953450440893566116496066519058403193663154983497437154203819963260242165229405208778700716060684766534758748916704009916082633385168020080405048885760694176577865460810820723540078488639369178154320241426505293354277745875660846622369288568123133292561261235256785531922213375332813363516492867281651918872071496312751377718845934838314667391677793894714490889453532680855202389134062406106528371557396680459568935062620695390268278489516786937751530412550577162465259150382716339278325770531171352930227692196632869620798522311181142960193953850924687498620070544338109430949277948159507329879155210160241450119748611369522285092212852813824570293032227779647026176189223572123084451190061745506256343264326562147424832561761153522386762221700802908370661822157393320044695725445229989991188431755677388407747966911115439215417944956153478651673184696643896949254524276369957021748106422271849652943735723075220056207411130072896924286451944171527022637264455020523596282445070630771934761579048221305568215457139994617211411085307850660300120371189812200827308583395539820589069061017861328862614076955537014856977190049697039330309651801348304720476087039640721882498623638587478814436784569169724978777030982272340221145046578552827191352546947143035275990939793413754422719012024556590240543018750125119716435776594606691472552962887122631806058400823255622524530384727573782908089505801222820975600456796411789607997183949633694399179379455469571927557602044778175978015388866388477893024649939309704230972907459714140113585529896807765412294459996359442449522528811461650087362667428633366378783346662514627715854569781388778149878012550900142410424032639113511075518363232906427235201384917342979688961765962102151375425532423292393037112830729746922825304316043663626837496782405688495899065655537216405612388901278198928051245924054604064320232470222166534446528962122067805923069489828996675843271638295113384222501506572543452808653339012061245181593399976731212745904191650313808438588548016446126120674226308029977326300360093713369252084641668517986682964017531891894972707847947894703397603382187246975964105692629345413266060528347071427038400660608705761598293765664181968080597125867912583308892435338706392483149232139991310577488003922853083026387762353546878968616781786702320683290245408076838623224983658193002922968799601420269991247101304606880493000638853120262969345837845575632652594203162116188047397369127024269086257206506049305152721408369249824397488170653226655559449775665832715337829296847540526548358288035657313921214610780153539347835226207976076946168876430114358524272233723646988855002094455275840302962666856844081766293291452137772048110790637266536704660807449519739327018721619044684676011960134044956848557708417750475836513642574721735576244762978717150713261667412716273664438107629604313094428969497371965141673202051915817445633979326940820989733688568069901109275117585286470786533583664247227757623461868123616550942380510328263064047797942151063136084100508835563648567547381317493212871351484118995384664462190866589013506449874230637279552571417457669151996916924270409859368135881488538365606716772030232698811184558469064636039865808366906057231656211951193116937650377253371722258540457313473237383533121791937083143459043495393649754643213866611930380243460376842178995100338772584518299046902703748625190488159098692582062884386819474282872980115522829156617371896871414855580179892864231619779226423289057203279126691229766046555328864768267364321578175263384079348441103395394618249025089795196954124821643685972538912223482310109199583464708899243992298931497078502095787511123559987214651034665741434614829428967428333802394306584477458469633359430987362811953453518400356509454058669839297226788372776367280158730642818372182875605917838630804855852420246178189659203437587382007313143987554772337361728272583250185719831437811387405182412368783988197961286391351624156213505940541094805465500164206288920572949611162162113050402038557325431333024558950631067367936611318153854810023507303764110973942973756954917700791836575148652033411756519651474800034591874142970228482783950150557217039469375536911748110596177461367744944289602462137274637274069720165611598466507748445243616769937369465337749866771841938628315536271843426900115553507410869477054081430287053781532316668174001761433261847823250273169400494042990324465308492795796008958697421991828212877366624163731089097149011406345956531300275914140023841183483485265586993192321555157485947797690816166469044557255832260658892615942710042684013595996265472441252752479660126933682227709014013002675508541470117652788250994783969626624171862885916722522793464173019418067898505345599496735174015977358875619968199716219533552738926637031051890494978338580207273924479022246491648620522810980430864243281885381172828258575698372088024439462447934958632586064921165575955786537269481483937723577490467737221720409666604585388204859474442997324805317238786488235195413838346371458154199153397286434670625395599277956221756084293733060481746683886469999967199808248860997598988465769993529406058206112180431991132713457015628241212019583216636957380809911503435447564199491276079636441647078944643232895303344668713941249744967791690209229128883799300994462500424955736495750871431874087322800538276593777301272661937240773237633293854544754939117218573431236413676044727898884777030673570034488739595200946297274238360844588881821427893674692289872719794617552712949171013259904704167278643987743105273334320443413659380726864695786527091362412670288650332875617283949480199386204263527209082186767929892326304543956845184355613429740397723016551419039154318260427281778819523773313505580722929854977110755322952416544942744038661223221183759746326498482668536001557277096914159111874312153517083375211013183593250726321533259140501285618966863802490518474254707070066879721010077181030496698210597599398932161175581512349806140123118157674998684530687977209656109669570842567739926631008487026917889091286956137809901880327742971892768270601951934752109320934869765144253043800750296293513146606452851069332013443570630554704382747449487485536496427956274784905893103873987768740604182379428000525642086938721704335210558279257980735181414966979314982367116027137599914079057701202907012346767620471172401133094852140947507709878927974690819147519376781258916641942410215263854181358354623399721795114283058445754664116386572155146227613060724837022655475289960130851827789796741182786701725436689175126115738951255328459283705735673792038332771275966384139356869886544157959423900159524818315186940605161679257955706740318466678645508179828694369147823415549800070451991820864586919375260489703149506500802123898113416334762997208596193606353010669216102269842389887094552624430998968131186451615404193377168588441373578538825728592377440448612020203066191898235515693843215931480135839738134274029581253133656093204899636776425859689995495873537309952309610072133005212939182414561325696226801098867717882906061991955075678342181331882095542089225604653021264291770836186590776579787363667069660002867694074402468427249988282181175359142889347493588450134025762040336381857980331092417620342654222801867511538594654519800002440876114049836951162662750192372554175899061991906290784393548297931360854697304660217388326454025385317464060515392460270735562634219706400179619734817004536958508273604064174329604012897892903752485301302318494759650641425275359084845658186671712160266483012379281979192335879671133821261746570768835599550683335228772226084199813244119457702012788644482031756025391901885339469726868198018085491130601667643050694626140156924968196367534431524629400571184798126488006430721476852350356305114701192180938078185596501406019121622406459154304979668159832955371593225491929291926247593357479974910111035479049436421729173094079651242582981533593842859642090017067207572422151856331378087765898272716477356116505494492527760323026755374093035374204268993047047278479131391553691647838872720204941034872333171803661000114147594995620657679606204475115479977905970944031101379807757313636918891924602682562733654982817525199083912568378542859662922923704736713241305728532013661459371953714893728644715593769353695924513479019412720277833400288463057686946226328790417273092172568136932546842785412317831005776620608067442091003848742510088030854918907472765326404312356309549410618389906172934527763348333129738356175599668898544090809612543931015042371463710234727490208128449271087498194070337397932790231655494664919249685556900070331820527927700923879904712981785622980056040860293852786608014416839444705794599237330395343625677231165730337929171123427679896358733212313404887778628928451238376200468283542093779290360409735166492249355597416078350393046779330842606201068250136256437582935384024422088122049514231186924987486386922255709770571686751402668463117086056087909722759647760111192263760999074221853531262551997916860630419344885774566813330605196726150306444911793623636315706197278750196545874376400639813558827027494733550174136896390860197943805543393966475454387001187325653165083037204644787454406449433808128377060422465144611339962742733002574791924410578469257487544550966959852204997217505241888127436816371252790120771208092431156862674023113879531236174297777218690854959431629046382150819392457019720688697146956554700635427875989653883984765265971447058319231040626981527727045895977255770905523050300664800936806107450054604610397698279501524594807393099512501267065236510023558743136424070008416804213522349576537960765214664370640100210453084611914479027691656864136391290070746628452999965623824867446732398214983818615825977108668636422441563513003831975312156804175525835009983723583171193533501782236576964961510324559549005090600262768394195823389119794969001830645368080861318691095973101919011548228483763812949239379397626324227241369442235711216350246757630159193695160367142155317905915084581982797609343509326821521911481105188403479863217823202421104691839244143919644602509537137465590142091458129871968626743829025365323860594221268369465152742323854658707635430807412874755583770885944383748932124569993895933658098650493753903580677968213439946116629845206367354440478040241152208147047847884378168346630550895572113154003279420848335567732550380587563785065372446579951171277007080376181880859588508139391302063701382117980942753440726346766393542850829543275168072355642671555135145516266084215524110054708924580833152698259832144444062702113296080126316162775848061402470651419774813974402257085656428945474157242235893836799387584558606751664927393493334857578593093025923033903249925802452928325559868490477635990253074330537697360009102142806389826773193350715830565814882983312166010168578638318113581909715614425901966904069916789058597977766919792967752743913284801516270290058840699327499070875081504588210302710253892626213023043634438957621385860258666727257127841683811540495720040171541891264342129606769050464645389966030356482089900989596777679522985065453229500095190697538100163379643439267150956032532346334280315920319424327896526362404605954432140230470878470882264003739306894517976684362812045551613042852192669772965726304705516783708137205632647644097851889002247751584331244400558203132964873335621281299717509879304619288476150109332057109283431502529001299150493028581031388664548216000769077942923394288901958119435090722574806233751271973249874552746532634460237024563407790213999716314923882457446186579151315812380783168745156472877906107226071419443707680584882191451197597628219448713650209673215406805360654332701478226078972457384732586255866424341772998013397576055716829423544245310237330356105227120287256517184974300181658805985949145921001482457911564043446049296375077517623765343452571128748736683475042340324486422980741771950961157672017460212375000343093255257855859277198951018128053837238080978550325407234199361789853768134577442527702115229975219525718789959045191073349653955820878281896398142889923003479767972076383190379298185808476922809215238314249626074164796021558425557210308754766801631838440222800550783465777015428522380797710835404996664778131573332303144318415473153348891859475225796874442481044462069842108821743637445608331048146899622744287339341798591369054634267513173964115613718772637770100806267461469864702974890809600842718955909073251470396524319777099477171768967587473664352749169748604394124828227185348843004451978265273237048553782545156365567001316028448768834710532422641102380518061679205162015773801588206664244457180510418277261829269152549407626154892937631258492719033672820382433466745502235228363223303303588498621164057491411472890847331713440771748363429011212793517034275378352451698293411530204186563333810558260562682373432930496010859284665817691922432863011084933699996961786462463745048747116470391194990030628015332701370191200450760857094229809065249035739502022559141983819390742711457191605178020143282612262800696462461845326859864102767722533666771388582815245205576926226742350534264234612616163494445478555919018674566723039443492562381116590300549213807725226129072939143803666847794403804034573197127632276495815673691688391776493042924568568460383396331869780349811708739849417094527914268223170364569506352973511214621114908992490959875119891914002201928543340360020016065452018805546551793704705117911784155214540116673803430547871133266630619513912440304683435504710983133680288052313077803153090031854465575440001750060605408581808515948034989770356122583873261823440265390089426304521951729320287328409207700383100123151876966524323583031388935239745236968350327632037316230013986711095983640286158845854503322070918325810361899675959053468566534714906108407864581052288055415062268431577178677164927351157974624449718170551912415953093539272615139170040559982269069144788537260760097258745113985468798064087385257717936930463104173511481167429308423462459460962543960069832104794421579983837186447051182599950438328122680458288337425520120137574451732030637289392014736022854027545044245408438033635786397265945453723332808703182454632061130743471916259007228432728541803309270197500946096444605584853072197436724505877621601824420511356681513957999452264448682983769699343994225768926072658063255358146106163505098999696551897853532925142643283744909834395865851620590128292004057571404777642678387685668703868806130918608461650915274491926100585166495256709407294941727457418325940432516141904359150294292748288413140787948986359366462074746713836604803390213998570822968145438813731705421355204337496672010739199285545674998128780178114493708777570231591229449657604145369857370727860129063567167048674305858866375066717347101711427057387739505853397158515841254093617246606188397586238440372102294736076889840979753873898793143249127390280808824855731104585046537769857330026521552755052259518063241611856641516275156726512986189523254888151278812592686063111446785816181415218227445732930445311585144011106096911480434585749527586559521968949018049836045512020729497009550286634399863511982953971128118927749655951377838933784252855345681378774160557470438174481259093651353914975509617330930104363369097847558011805545516823230152705422673827213285554606402424177535395875396349439257879147269990316570555566363631107873583908853302109598741956597344312363552802425107351220022316890426842094449146094093908848454232919398697089400054268720672186047939476318363153358024503206934420826394819801998769864748411198961176921530138349929123130568849437161791761185855627806231398428339981489989031517554700169925879901481360164293541370512956624760397990743413674286804847840458699624232365464488482648339370331099527120400687180993305421299234942550487704295774851922811662380580543940934664708380776764694636606791934436854233668907969931816983166891497973095943662588130142677860603610047337982454343702508574417771555874499100448295382819121831778816886809637030681464951442852987045658744822323017354193015398929135356947939839140306698866302482879187121853214437761579840307617080110522099185105281184531897202070221182174780155244891343031372681720259990267379551766505422208965641261232230697112205687652134593678103177579970271087834049239379072209949397401559634057001243257514833108769363888955683621052565237599125728261239118022575912894175987408009344745117251993238187747886278888586407900202408943623153890915214818002421838815923966958787049692850878031566893781773464813916368968542781397442084762131956466252849726966494397504673443856343004132647844309750841983656463183520640918053128194362601997214048354393807871873141019891406717655832279814142519576502831792032213339668060138693124678086147323694655541522077131244528253802212257686660195802890422055107005242552590674759212912277749904354621960351337529800061117715230093493340418671330565674438486174036271062712551650355860019081761842688678384695345181209344993751433013590249265630411818871254942665247341590902374863056013659912681932484952788985051121820811227358115551518694832616404366490062429428314767614403471928494311323127965060377740115015320155059011183773686991112928134219938238861942579094187368578097611857130108971701774055507254283957072531780780052063471633303056993180268811324636908498651379339810544455043184362168932560296467858789354987134340096423851366091213584971916411716002520202011394261611806506910717102336647860845390923567597373075328613344631519251210849547351316195902683921154170420914315410594227945953667999824864089646190094752335728668593487864038958074636801121239687073243551314746481125760217832551027923488199932464686665557283280854081782932546169494512387423905425853523327120893410410728807263709579745414874034347298836164872219912390950976376370657059966587673786130299383959548096535839326684422935261597602533478601891806412747416883653296136723782138835982528170764256084886875777597602961751140496094774423625070287438285325047835576946313794396636877736116310029692958421411875762799468941694906926445604500237069120930529645136448763546020507845697850054138785172342116922512128840514349291988431425294645753905990244686733733410385281678970312606729383537299554607797672907990394591796359202264492486835738568186180945133516707434961240365199176036679479430505970223502962244183781380913196804818441600413779120622805317818799661043554644440443705675483765184690435438142246744131509594661229983124492357221608279423279364533295157372659250705441584344308292111187384818184306257974181607894350319552740374868519341191483135283763350477192196383786427703966689423831363409240725954775713154895328593988160732590160054997239929414823714727974826024035217860503862168944433455274636864484104518503915125790030638481521747050177942348449246957290358941785218596751364264136325302012127514536979011995360578526074657060450670609980645092613668861127834866905147761396712739540375500705135160407800946104520181528985815263489926159911880084213321212768952431725838938601672188812651102720142982130177098645113732975494219793752073889227065759762609687893651335914924691660042543013159140121403093465609000857166311112970382917214818048185101582696684107408042143042945014390810480019118356949537099663818754715059209366691270390106111853299655506660134809491448878987832685380104145003045774887739416422218687559783784403589016023706079260754932303246949584114360114089506475306440896925694575031099223891967798964042809303692120072723649900326855730217433709980256225249076797838874125035531112686624813374295588750086023037138555024936706002261539102751472102701168353855022613318138841001365460254229596701129402640443828649877042750795516229713646589327314125732074265431844531268182493212072736085146019842646560868628969743149933436726067266230293919685332063288083684098369674426608064526187772953954892826318674314993417979569039823495888917128289051117477198054203719038275454185022748040457767103249901035731885373830510569953185345260681492090178619428435327767997448105824239005042284690390909455119903699725245439425773459997919739647511506450037183108134359259135471444850889646470849065205304395614092274471027676451130301998192579884981980383331004755985458519740718112147812962705310617555010259274607985705228893551463836617686124231748426817936045494654384933976330192421266623131254582148198369659191509650211552964003305770959771233149223935846202962723117218456932567654472669816733803847092639735772223976250554596127643265710435182191800068647592743527104298607516812775387380003886771219532565745981432787326595836968342349008462815121251789385562875463614831060974949395788692980727720786032761748572416672895325498419331366014371448904732847968285929375551256672205371236319010761607531035489389025830582442491033340311783200278400330573275229324139285691959682207033048166845240280073722049031522270750064451502205702838802314453492907125113196867357626343878692666709910893945062710386453480965984908868928331852364750709250772228522623061255781933618377709440518884675617168771208213362028807000568991336640250325843144807507365386167323430530383757386514877678566741578803351624259009223626044690394968507237740190193077024096179943106691946391713265839010095279092109535492123342892233114535396448888859072578357724845567858023341418639436957064116245382812764104096389861125288235620089839796959708844667271837724791853923155783350300837209697417124820469598763421016230556944144273578255047209140685603269167269642662464781417402044138800193094975708451596078152422131206951630446037496865433989208174418961047669463435692646401380865304211042807149992732461476622644253291650530746199877456840901162470871578154957110644808251440332624321213214254142116691052442993385768448482702905034603814208635913143936488381755746324155738630413306167461255699186732545319102104515653378661263778599973833109965924889965578020478609385756785428483645146480030473312941683848824619427905074772081786032588682913441577171034065769355232243310095044798628461790230246155642424833564029628986053338033122509288271156493098356126356548508541821956447282864237858810739664866039796867178105481303341995681155609103956708352541385258044674233021538488882256047867864755689487264233200251948632434367557411696985908027963208271722356561030717196004391383906360151985343954617673570213543813895091001157665808641175774156333012362213294444222039514585400935738306777816189406291014204426171617177142780096988819473458459887462124401026378144063946634234937478266777216707400466276855252285387625315985860983345555708831049494034215551909856922269254608364369447708759473754568912693844211940774320914411502602340550200223765229096489309938496752456919270003385668591424974211318904032650304107631242385298382914407054967999534142551977432253069569518207821850880260921220586532594795739409805616209429954329604196061909860469006839106493724703640208556506345365382655886368345271812409551029573250054776291206004935504682461872164043783174653715005083196118181680022375451553428281102240058446959296955227821993514685348539842528436786789259135360096841258032925547689013177486729459318947085055431774319351281557368747716393992737693541108230965435660525692480717964031924241664724388845193264670242141356326509471299306016413454162671571381531753658371397956451669887495352630248631157664761965740380082152914081452732415621628375282370868233950168887184531780269004718739099708910660900090201255053397723188285495192828542314394947620483330304687649237120551521237832434525777447953092911201834715259217245519280176880179885337857732604864405057483694102485505256429471768330406332418310295400408419432432940963470934061812695129941627390018523946146290853393677169776503143927133001591974399819542958121940959619409121036386106497029519948200613092346225268222984335952952211870862507812271819553684431413604081858429624556100379315289298469968791166103454024434690367788140204407001004669551371707738311759495150757612726027877731029702306303481073738582347882595922394576946021621186829772467105355572710477124514971906584017529758090618910480942805666401277004037346463984772905375809948144463853491825056157101189240572959686371293182284160480818545596306440473897493917768183499944319205900645179847295735484551449225229261645269968906429508149998138016622129015857135775809846587750617782253958791389940037001143544832241065010658361305409557331037342515976928994199426578267553413249193592307251067458813978078291350669052525953950112448480003624625092254818432528874435095079342421604083110240934432048412320452642368267544141594660095901465974593532827701312505826582575011497446990637441740616567155660949020249228616684830320354314707270016757257201734175571113012610174151094479944413698938350396910278103547991209738636261259356477694949886515282971734718664058449032335352583037449070952755124611382023143401658303667877578519296296527334023449638130475844470991345333618511394777165597830452951636561490737471919475646861928324359374967832521186421053437409487480470461954966554705773855950738645971740817037823241512416093275245345820788368984925734262305322634441156380026457447197182213483013402950350246138649304465256498219312777160525099167726998120704957725403800575045490582281116114994378718817183032439438208226746360325766986720916774835054649560456316259175632867603045141112409889552612372622765216331693789078480741915298207295555848306263838407170482811223590205255671667422964415870641962144241361255726603720198161298973619057586912427934170325155184902616599199143436064767051953442782556327831427853713857411098088989225849680427893366785692117780023838758363675203567047751767933295657237755027185531691483903456972232893961200648229859233228579781125136864313569508852945160079164443773633476981446295403950535828103167719751726784350601629663178850550389728335502140195564260831725188380387307159781158911038797569919167004945795140577149749170901864075423619030300911182620763077511907189012876305215130787412613925421216160360751332520310931569700798283937005333531483817004253266974122408656002783119309246945216360789948717449837131577677922669864583629782440739388630470181967026233829667565773873102079102987908580164142215769036178315875089633501680791005716918960107298151922455023391131279507844863316483788898011992028922935242614044660187284736254085622682834529882590617733762378374747202648059522912576707100472276664571181081828497963723051983320823361890551873317486588183597041968899647405888812769324885665206175649824784331136051942330320955997813290150374169555690598341682414758358005345032263076159951017735855589303019820663937187166738223420643133072273883753060709742405287892650826450075887658352906610591407918098029363694819236430463321771822021175150958737396912367945520530338753965695796553479705539515710152369148055346684802318377472296952509107769076222779644096906583067893946837767792663232669048207226484434581284994990609048194589647870843829686890438595763980976771026423557663089024892131001305788227380520948975891163833166047675665100986690807244435880890604269549826217825523138658314976275936944089547382635813595490748259777205666498345149897846304836074875260873003896477439834091090867636750095043118229481634887286877880618142748512183455056884216089061037969239651354971148328982756655369145281624013806819439797157064508394810115585016956024709722310092594188732446592100117958881002635994259708482658147888287467568985217077229723202214489094759132716574769640290873606782618033552995230016319587100167955339887968922205047010011389063615635451818872082020951265796370440182994059107927214391413065859873935945939866806647249901995379512541102421318646178957796346016199498645184725987268058320037711898529749988840623868356343243014613790813886854385271790938818469590098025543064598325239352259049625770848587072012496241155997192163530260660709931448706553743372471711358996628745306173083673087048269342745699715075360398067471245252833958545215646060059000665959497705967713122400751567337815731755845116818658270900111989799269094832164568929732353735566608022923214255026340432900765571233256796055879631067021720614281128969644791733928937006346217595371531877564139995663256573848449072798997910083484619753891994751816910829518221088342707669386410746832407567737548811686421700767615090296347645343686568901979295358016279996388099431659129877979491614467543895195928365541638941655634949364961607403740873577172023120167622227906175594503905136634860440145452083845427286042679614121738077233331267751337860968115995259442772881335900849426085481298429404772477164459261951878223611738672150293049444078426200516395163393367687521048654041265810615151381063263935652729823202648067856665037222449646098366399836365825764298326138044202049679510635928460540367467980830027780617634593554463824431146300071372144602579306617234168891833603527083083269873328058909495444334975114655549063249720495617631057572031874245243997961001300513101362881251642646541467566216418471740031857891367923431107308911790203560135760701742446161244397707823612390132206932904487297474667708365158321867415005381327784224688971310518664331206516637603593863201168061905577055537633677360364992716387876270201457406093693672211367026066251359512820184684258506560590497065152819145724007871945726278627820342047898093019876389613692251293554098133528921703415241378403497988370527212999054917321986991814063285400208883044316721908821428731628645291282887066115443721552877170570604616124348447368192516248043205025944481980530204535986716383404018559523989983031812399260867758441326518650885918827088514421998934133330104671880369209347348081232645725979472839249731922910513395615257747541668539314925713185740795246049806364284790354471628315103815173988609118640232034770300847089190756094694855291947481048264317280061195943077860015918935087735267314720428607580533653591482200744245764521762708826753820707439580086465928632736043303848285308853903855332348614871305843065583952661440745127334275983316524983354636338311850616828793114631386447872731549903896191810618225811994194258543856474840852403622495390802298101905113183569217747553051194324637039769564669265685730461935387485745474548531803797420197881185660590162228866272412460152679622021094012535010728078962481494326411253419325936549782831143489394327333139421162015929032280145593875719333520986496480401015368469256210183619123828239613847237761325489122341426463456792867754427053754130540233036035263170583560480037008121865434631069654336463838256630571872029280200897225456315873962517477987515356054666388335880482803738335843281234886361107822104373467807207148152456587769815724600397786335996139383096925464081053403190812702627052226018164361018089519728465893624253132229741126080320799891756070655845964271557907548948044677077363863257868119670264756034808085525933006104325450582318119445844371631130489034386859999641254958672328012330708972446485735538272452812683116142324976642281414157806727682979925482140939388726958044973071808687704736117992808583199418428491405610310555841404113412524512607651482794741704104508555513921174117909699949944138077122359611486542282513706246826158111267704327564719834230477914342600808913796656021750262931585150361150826736050413848790484905133275593843111446885863249713473516993295032625202150709018861820843089366420307862925612315011763286059087359702646725316162907318251933248352262736009240653208822499846306085714364841289204210934994061604517285057191437038278296329720531577065146776291030097029355798319414150197610941914453739920532379971545817364964168876652813969275610223555143453902384109425782195979757650614340946753732503697778300949396933922189195629933830643427842357993425928608221704765171398421314049866443720720332523788140277791693319134495238776754114249069486675919919115524635059068477480012114318640538800382974854180294512160755863961496844546963247293230634774004814278524154396815808981949969899661609677131701008847067152145047651867360230416267953917241882452727879680761316075541059208603633056503562463652855050253493849478608019628492062758037223414401417765687997128882287982851856003322488026022040865006856147528873435385875797540153930164571391471671391160042539309854941702496529294867154798015788742502152230116550540162661693692539273155844284794665714954330600878709559778016078241522501246825227935293632552928387677803748341379225975660508623451899520006550271647002585568931118574545455659515660038345490294841747607977013620826761777237291808944805985937922773779602164771924014259621421398152048641717356805328377078270519526709847397617420484043908676504757819931941243041177123618041199834460478895183606359631910158614297021460961506443641195117499315571630596201425150181128388605065882437056059202356631642243208507714451165052845415067097808080851672441966218691001993587878740388639996683623023734138001598565353767664950990981120035086276433367022305016868201908444769762114808566372599134247909095865960176282379704629611831845169982707258625668463208361346123275876520219495822276097730472791775307022937656401471570150603123068394019432703602830427629891416112019683710380141408360658819167165008669555364748658228361388799129393430801106411036742406503306803992584318621042791299946447585114169600357210438157957095528391813802687194266709630039430263970789169155406821880784658555589183142366431661016710970043339646209991971708490052667399949393124645885563312313000565256168576816471242098741078655616401684618105443606700332167319459199324804559567998844314002622600802628881188006088161891775688908776969324799915484922813295198723011775033753773984506158063112672102525281790176367584254556349673906995336472433972094889433283905354468728810249741810297092250546619901076403998845317693420655635133057775389193863669306991834605425655868705164472180005264501435736678480521635938716050416503207778590785511538467619550627020032108893492813556129597923638223179897023498575923081788821088015804957415400699801583142361538757925647242388065271363797533919781055008828224632453178217449526824788604797672702208962436493342699356518705273202494331071951221069318730689993098592688654567904468057095325225333473423398110323034834929517178574105226269026108740903170496491984283872607251986315802385098293436390674754854459924659801591397981418582800158623004657928930499141495824770952134245875818682387530291630027075762725947865821227819368622145724985158466580099763293854618850180801176478217411245219876559766971294143696106113612302343864027910528445943043133916663267112690598511400033628218370711265166997699353177108131047643498369142260604016608498278071054060236977815657846742243817272015351033515462368642825223680361745623868563711420294182888855363490410712215539677378212792938504001171148596659381275262256682730800334574549206704438125823923904766613486206013683813771293988827994751308475891995988301215387152574419412381447476226068834648858706639617162206593451235290457471618073014725679837379893842150101611995440452298353244439201356304245337965099464541409401494998025031536565597836490234188808696463603490112721627711519596821915331825959575551885212518211442269003344859271286227913506007307492776291453029668960179359667440503179328412171436131912330530510150770695249381710538279056954140700591999368475200255875436698833909225866367218550888340455501359261125896501916510656688648535225387182212843221884399211433135403492193025160357801967177079276486051857093141011025001336496825522387474808295736361392021889554180981081598463622614232871932724282534643030508717884192962595416173373901132147755094503249975052901677902751297694205366921037547465221635547109834317374178362148899395469037802172487094585186770930012509897916799608892358494351340358146933481155823397177111871069488870844726702308338279055819352376060712105984288779181524985526892916898169771532756305479326497428699889380770355624262738057395122369955283094631409213654957473184032227153342629154545066740409513258489251745894951453040542909925854317157799562581760030422099105501627694451657079935138142010860784796990853862871522191280775790778371590639687771159316980947819357536812939905863927717243432556756272342151545076411956132389217805472604221690864013707763682018315188952607119946758811062148170296556777942812437533627450340974634326975205472489671702387269156909914717782582977963643216463960975465090627229265120385884158666145053132529879199674915773930220784503882143864875273224940706693965405173279072485994435371203100135615211846813669839874064050008341057733642309562593482175302832142539877643154259022027570686612027858107329925902923992533804455918636701337810809181701161499325971154106538957803193456380395910615088491686184579554366213353862404529468229005466380181873403409584627731219911460708898848941094056348224778795961427666141965047354825879067952211675767220530116000295439261008669342189007742280071068070049356315167614419942532751651005774976056088498859079183494367859475921643977167294332870981630985883183324300422297953590981162371465213620389531664792862643382599634861925000395120572493802624931228823781014097594009428931662915167760327883521129852617756650413448593360913038295175844623203494974914165179908375706734492901224902529747574979742050002106663406003731866003308390615816816885072065325693182794964309658585406733281728826923008660251012331523873157425596492124889226549015883614419445399308078104363183239762732476535449006179002325229065282571464204281914919738887388806093573140020542097502020482802396957530453128838606753183180413618231714722120716858511620673458780848212762689022503174722516119261588243338767449952444434492732505531744736476097910021749893176437861458807350602081308059329158498808470348829171596127767256507414629365764148529834296644442209403194238593555813227361493776673378092377609835480829848834776365785714688656577506221151558342984932908100108088372100268085844151793490975148337058265267421349296237603497728123188032647729521086794670644515840940201571775430350624975038471658580078746878268495164463287848960878856056346450934896163169743105045165581323819513175905223706128682491544237639104590089628822641723836875903418320273003356617592635747925184879866743725876316742503710595986069001288762512476804118154783404812514751164897754250989522763124616991870608224785876468099785756699995690777785521839922485175041682536651172403481264582149129122640889832309992014062260099244291268883993005187894563801642518228414478270295351387046868187081518459838095851978514656128229212018856271178656781951865372510349741871729755268077300762982107262353653936518893638816222941960957234072662945228277096588212009569956941412021462076133412738736146790862165840981502021144402381041280424251250883937325527577117337986616772117322486188058793070661939091520797904347760947648229902630915645259852652351426082406577287674223134756799727233169989521419114425894731716176653550245770496344605597265572794815166192064124403378151092763885978383102009455257854519465550301246995381640601210343662742827682420934279626373395652395999817378249059327854481350431454370932564627625133649242512820576486994269314077980997512181283650077115840159571482838806660739273917501233904422474377532434136501025892293378909898783835997744621072578866963094511489842039592491140393655505817457506101458107717258837998857511634160292786691167461904365591738425550323512909380910134644272821236782228219560211903524789255642834093938631309207016144273343561768392015946096695071260787134006919955539723059270708621799610107543927526866927300423827447908075410338089761911335554236211607220959786761543017923621639938468989547957660767931657662555862328888341958281025006331151526846302872456080086024493507245030108230400783031595576151219819834046954989509826434061777922015202698717273136926158519899556374615974574751476743761878619405436331799448199218707421684180814768572994000075233007328760708771469685534860487027489184792709249535333983754626094433733032515199669313204947984860617843400446621737370155244778071837898583388336317051871475231701394053764483680409312689893186371509520310162182341717820195936661217314875571498709625015897265778525908426192975934981499327876012898297481801302513955401656740742216850342293182123512761948372907243591709809867936260493428885126511278718652820255574252494032278725612072481843951172165236478241369093618112853011844718845683244161791308969305441124717285732154355994917446499020686931075617421667334186609165302628815065613660124919531779983740755489097111398429642375934585615080318880945851714180064949364535973649030877678201116971542188813985546353470746080703026718628888167099094905487828127808372458317234986212227785960019744988804796058282310039384459545585269109729037178184648276479018986182113845519243079489398133256876630653378351331911274848188248662596501979226917582116118414287306394568957790733295371259982778148292520276396147454871187308323855969429534148144661681789463134733719964597750987783364244289405724721486331025051689631320360354172622130078192112932513759893682282761898438094232952668404869672405207574076058791075187428450213304735992945688679113077409644110920248046893065024931964522048240938556520005706710005859495886813562695510970268577213963715728820134124358408738944689728844164577395064088737288423942837489012346099566084287150267414187495425649479841848385871962820959477885446374521648256438103084109135495704911087255494677079761801565634611237266318594849791726944047395235607649191909852897356458928629738104459452802907338153775097668122498603398192996423582181648082577188518353374547684930803109595187299401366263822653454162234774772311308453961738397188217257178280423339056239809467587898119899705455896748544161972100059530059884503731622192443130376572006764511595596363774526764097092375628909773455008189308634710975487576532392383165983021315524343179231843380356936802680309074711077530643449857659333638389866129257243516335469244971824181245127687203135672398351564301811199850315776' ) ; +test( macro , '51676101935731' , '0' , '1' ) ; +test( macro , '-51676101935731' , '0' , '1' ) ; +test( macro , '51676101935731' , '1' , '51676101935731' ) ; +test( macro , '-51676101935731' , '1' , '-51676101935731' ) ; +test( macro , '51676101935731' , '3' , '137996870875659993023030601717979081222891' ) ; +test( macro , '-51676101935731' , '3' , '-137996870875659993023030601717979081222891' ) ; +test( macro , '51676101935731' , '7' , '984075056308295134728924301613024127189711420386591471717924665943308236455086452620716372586011' ) ; +test( macro , '-51676101935731' , '7' , '-984075056308295134728924301613024127189711420386591471717924665943308236455086452620716372586011' ) ; +test( macro , '51676101935731' , '9' , '2627893230921823604806622170301238567075367550796577156262388588821361374710043228118573957775035487173592314570495647093971' ) ; +test( macro , '-51676101935731' , '9' , '-2627893230921823604806622170301238567075367550796577156262388588821361374710043228118573957775035487173592314570495647093971' ) ; +test( macro , '51676101935731' , '11' , '7017577357393414069660702103810709794111639796715410950809665871416156554402226865497006924403635139554341331701687118636537520158096482611987596307531' ) ; +test( macro , '-51676101935731' , '11' , '-7017577357393414069660702103810709794111639796715410950809665871416156554402226865497006924403635139554341331701687118636537520158096482611987596307531' ) ; +test( macro , '51676101935731' , '17' , '133636682614207953928748833850325980733386921434321011865528143804403832298431098135380464855882180500142250108938933037601304663280771463018430933459134652554649625077355814284452093494072216581175752265212265439075492239388118741811' ) ; +test( macro , '-51676101935731' , '17' , '-133636682614207953928748833850325980733386921434321011865528143804403832298431098135380464855882180500142250108938933037601304663280771463018430933459134652554649625077355814284452093494072216581175752265212265439075492239388118741811' ) ; +test( macro , '51676101935731' , '22' , '49246391967000732783507102143055596698062541496879424569521554617507032914914454137461679988278650797334594157775094696043090861230475376194375316521688783968615512922433798610465048085885649879473134467691860598529596944970613815754223330498710317737303087189649634312376508482500446153530865527315961' ) ; +test( macro , '-51676101935731' , '22' , '49246391967000732783507102143055596698062541496879424569521554617507032914914454137461679988278650797334594157775094696043090861230475376194375316521688783968615512922433798610465048085885649879473134467691860598529596944970613815754223330498710317737303087189649634312376508482500446153530865527315961' ) ; +test( macro , '51676101935731' , '24' , '131508525968430457729352665685966579498949401101062972415020772435432844742532822029053861945108891212811973673289631212054118103889130601356311755368990255559386038292351210647400499145803946225847945057201109848257891860310495954779113656786197608913596258321184172812660728137089758780590575321178923726688892590199481699405921' ) ; +test( macro , '-51676101935731' , '24' , '131508525968430457729352665685966579498949401101062972415020772435432844742532822029053861945108891212811973673289631212054118103889130601356311755368990255559386038292351210647400499145803946225847945057201109848257891860310495954779113656786197608913596258321184172812660728137089758780590575321178923726688892590199481699405921' ) ; +test( macro , '51676101935731' , '27' , '18147765077113876911302828311188973140568509988864514321318950227295742688037464926647103633287511191936183601316483196589434477469945433422640225075158236638385320220491900270340310290917462596573996639230442725247179360636496672307042746911978502976958429476017502296658675079086344867081673179346751656568649207060344721536870325119505423628920139126455081000886137611' ) ; +test( macro , '-51676101935731' , '27' , '-18147765077113876911302828311188973140568509988864514321318950227295742688037464926647103633287511191936183601316483196589434477469945433422640225075158236638385320220491900270340310290917462596573996639230442725247179360636496672307042746911978502976958429476017502296658675079086344867081673179346751656568649207060344721536870325119505423628920139126455081000886137611' ) ; +test( macro , '51676101935731' , '29' , '48462145947906619312350693780921922040423061718629753751200616100444307162466564390962728897898203939025561944853542772935543250149935950441420073115202129685015069493947975962419875285445358970303515733347425597885530386757928989657327135942306712537754584065199854414524879131878269249276451508346267360984001689290919795053747833808800804304207297975041606946075388009728565472578248141445621571' ) ; +test( macro , '-51676101935731' , '29' , '-48462145947906619312350693780921922040423061718629753751200616100444307162466564390962728897898203939025561944853542772935543250149935950441420073115202129685015069493947975962419875285445358970303515733347425597885530386757928989657327135942306712537754584065199854414524879131878269249276451508346267360984001689290919795053747833808800804304207297975041606946075388009728565472578248141445621571' ) ; +test( macro , '51676101935731' , '1234' , '158324042278377313925303658781524871614898748673989982468397056801513262659968003390685627949704258611320160536626820028889962136800384219988465148278031573450509106387239568116863743081510112367947744316933204800345240432247765898932280221777380025886378197115150023156888075592661959629600638394821303250632425654059380834813385429980578207356778680885151122557244823021413539337390766886386023683774012622502869673441546686299110751211243381992933447873142802156806866162053801684285033755846634081232710212999710106103508622919082329128210235683603138941762803368001142605648619008990425285579947768914521571612053244135664040468206471912029995462838737725025722037780961352097655556940963081046269689524507058695919021145649857025466601631832206335908714770892218847010797983061128886699295778458908026100799624592058868604507879625795059341788256071347226801293035257896677449812101619168410274645467937698072600485973695316558617078697826464067560685120905997944243512191651052772680067894809080799438615784588878741144055738313954890688400429893361117159935248693696396627137695916187850803885204391372040167551605832355933919492494203181745050697494649819656173693467296980021705890813609884785517604611253528819574733690077002295678785343609499106604869068180574890180024198538158171783307883610859971770618231149618665209136576442748277494550519027415619444394250603341387572991349015145136953473904476495181684188774626834750617818472938996987683214283309439924103189995535468277303822947364785117218431807701765196665481474819809014739483414625184823572545931155707708389629548395519118401609231979035135464875664607469901894710597734005254396315648601392217921679551086702353136339520705796471641431879666411557946264230276753464580691493861591875142232836387168105624036383384304939623273671227663421382364346405035511757097384178188343056871496957008430970719845337135563975023000121180003910787544177586770185372939136428614465285828597849364223527930973569574297409565906234014152140399051264908028037854285065695691516894764306741200445258651130079726633055035454707400264143396200125546607001935250751700196849819373198663005937089255142210331719097533030824267705354302579492394252054624819810635910772930818973501002381509037985751201262426338686073137167777790210884526513502529974672754561818929196841359487503116806374857279102032619499735463547437917873852231188627313193995709278200744560332235099781528906681845236757294232939540840501710793402651215365559223726732901232304332589555728463490815104762256836437378942770237781171541242665277050803400441103245698206078424116844542305855433985742997194723110120559706402361837255518215431654983113821256777518566578007246638117303300813282471059695780960937192471342720483093022397272639388862609111334563922759362521380716417092672083635856258692643635802385292897608203124530755925272475970099885482900647144339393451148660375139200420049453396533433237007433364495099843124339385777936467767832834097532992680258633382504023134945528051080162773976630522027388364871860673885601145463850278499705365785873574057496070902362590690329163430582931012722823339673749687448879341947128478168108948119496075857326371621272158040967590212259705607234109590371908430237962275467620195565091210074536958791316104893306127805978301999920209853998214358942944312450676988966603743669909381196873223441882204064076740792698565324619823892332131678341250397203399047128712276865053621353068705821363484016988865027435388961661676827059827201761588689945100159628259798636637114887843908407692866645165407556635346270470882762478678318748969509612841224405192451391751679491699159481451781132856593225478798461105500650078302736522399508859604061090018430782371103406780095793970327199466172644652070455424994736654900037878682536762730674188797509195743679412902718668219372565376042254451189328399930173247680691539750124735316777490200616789118915166628770213641217493993403209087930983866118739242363270739641673142095457606027878252411764298206871520866755170134693811548956683565065642028688637479006103660374113920609307215137832756503673451270374534771904030303590041498702749217222999004759003357602091152034722604948534571885348781516114248627593361371966083846505528180094830427733303359954633778102329930129088225944419675472344592340947633203426100068451070062748913329381430835928677944810202891752490896892126540425812163639252121628049481160408647454747378481685454865724857469700081698360897592285719829250458270700796398492146131941376976151305748227248367443062739785389412243719697174747793918305844429511703312893537458763839752259611393771379620065253777610623533134188428935625387641575540926717563311541862831476044794518109895950317069739650023453809779525953218406298837457049987396316333779299477763690386671808883206738746473461031527288187096362547392481733828192703691811275652684091878491782335647464304090599317117223713118270154362644379673966875526023251794033742058280817715606901272370694953811351940143399555738367916981834656631234106492867315013462578161451861851222727927484978513364472656866134489436147990440601567348247368143427992571647342689311925448855042244915814046156681924587686088299035248256687768173138305271776131448783660494290452155267493170780209088260573726810563594020164626876894543544776117725891695956937655222596747253562951739070430520784626532005865397891770599810947915766027843984225809506465099491726669647675836542704925940472862292458103317707001664851510631632483368333519166567495603149523436655902927352564469259379326902513957700266530203095978420437621994997883942015182535685373952581674954526368979534376580657019506688748132488994259649481602782027268796321496293234619922858621277867678825491370164615078298949196552511455124851536133799925473329405250474593913924912551804901403390831450711740501508314471344016110507593788337973582789067759260879539344607152262224215382333489330153894940009834586533901180095846730855291500939551837669345284373711184756405666180209071363312585030301685774779292178313316406602373255646327348281134955048336338727490454877812787617492427362023670761057324483134159661968729511955276617697409266496712072219753283729016198339234913450671856683431220026361896256233229763483100008432120294903953687352831503401656888244700073250811277269623445793796563405171676855616924791868998241051758600745245397052440394156686933344580101379617401437696817984459028218921041977399588148719347919096302390719921087960315851964586936208155974897770793714626502400010799023394074901830556484876564044019461148646704484745692998552151910298131789877533559303845220138187074792203552289300587811989652204054350569388609355366352079539773210398305281469358542324938107197041217218595947653381833043778081164511742732935680326233241131641428417476654793443376871059887960714321380031930204997295874730540407682218645410154547363569726463842192519870398072169036254497989626119475346195254734474880846366685010394270094459050207503355330015842707449098167167948112211428609169028462215066248890291708247636295839908593225052889285032180148515349175791108452276764174092593481970638911935180284154383805459092545680971655577656000718287895404174650864444487637275330486618588627887913198091137313600079403324248364944559239416972594744134017813214704259974060248545972845617599594908395004708799034010940349453335426733467851508855124434739037794790113915284799938282633515926124039300489403274166512016144314450767050504019696951073496152282334971591755531534918527658116356766005810018865387036502835277104484897521399845192578397217389066546258015343671781439530194484186424336132467982739290593716534087153430243415506786743021432802857971661907233602499902567387941782564166386342672410874812089691799529503443000488843767817702945159240603649832489196454539442081235188719658702765814391130506231315568011273524165094617918503831867012569022324402969461007866076655261544955353941677901200948344001405059672259174534803855786509381749106901797774448058734457124149367609992922544375497404889378084258630248150919968340293441413856717836345219286003180349374207341129088557493435423239964391016550727225456481162350628594289395184071310300179756589174536625319150383798785373066376691658528761564820534618453895379491843182268871603588369275077855410841475816916672608469381494765293579645251398504292250764825206147001031380918536905798997324364665442675157885496504116737588881183129820652811664336805124175412738167561167253417906013601281586840716605226757932860034772050966241473341886952885772364434302876604236880399216981777408544673261443252042495657687251968928902101306694702738065723310727043271924859335698667952366365883749591917139742105118753077931026478251365210693917236917159155967697763044367201149926693443948539699579913602708706722711432838021246855315885038460450756859122906583939756348652891700451630407133090901515174232078445554725093208016341426376158610309666955884603433032223065165852248565738599860177261970078536206931153975848971431287001632805433404957578207772941765098112799264026267445074698665059729145576674938934608054531809788773719961126616990316210326818453980080321988760982334379271531791369297582640574651520702873403331880456606970974892343433336446248718921846000086640006680764293893307983492389270379130633842798650803348158429980408513212973097444321318667389109611955924135884714672638284288772566998005211664934734547822982660638379730254204195834897865492728459422863551908452096176425627547324850175172784662840168613264736639310780854731722004175205456083684478275667370139311794044918888433282117891203786131932421524201946630405904103705604352951344094166243627023050380063835187325378976884921927883069821201742308833558695341662261151498959733037164633952848288492505505197499859566019268823236129754425893906449877905855504081397182635782376853937776733107007960687910397361651834577002303143087866448497366428780519572180278375369679225575668491891544012967905489645541044473614128660244742603437904495496004459121145000204660640788761369040236852666481807337266045681038338455762663801212249239773760849573135339910245942472057741897143798714888511942994856977741299663716890747044572844810556164536063761986767836402140711391146026318746472684683736517628592458110701485687350372867786408697530159165580262455780381579264667555447984957739182385760977780225061084004806106049112388374908757400568145385583888461889658540915335972493538978104321154519123769320702224831927212063777898343511469299130626487155185875277476235831577797403193411734525969805530291201270196761046479780099300862785898294670735985568048204412072182439508001601125949813004653714414454010147969834379658692070731355494945150892188648577526049837658909733330381505835664398796899002686901365148731947521928717964471059772305071463737374874406416651278356408918633301449776192835629215568915731374744480004571009884843731735476903477562446584279323243628329043070154171111030416954029897290949469967976161666719811003325138761099757410714225754805089491754951146648993331480859725730046281101542321018226211161218032808157377990274486574775247295293446271999216933362071677144037958846938035870357017121382946099997460180182187217217820316108638070949402341509021488404838623964004697749860791584971181351855741948571771355034517420282039098468418778809673122690363103723019689210278682644736222976118509622284207375261241784528558945409584782281603428222482076644739841708067658443152632760947992710970595496336571116020117920899681972595692145247586867390993275854296221489381933037318139292360281964291441764499495760508673368168379423816602792242572983422830229937308653522404847350290384106194221461480553536360110558204157177392001034747822538121785134044265222471502565785788526018168367500851854368644667069187608053339694123467967831636497181955436837184144618605482450617195904135269079047201637007435156663520051298601126128369945944529481020638321516198582623214543218826748293953436296165935049635820455993901167665818294125029492356440701038244166842363513621908344320848585686797979439878826598478637355993217261347336958935084397089381198078856022083300330117262456180993049915148012467532881768933263035840131555093550707791000541507741393303110968532024193273602133335942404611643551498070626757534418055263575760282736414364452938769778575091320674432871296496661879381856396240520797406048137637370857663757380205251562705321737487489618016878804542225487729084746708529820375811443132907266237938994474813800033631766739207459417966080119828341415764580961209459326665346025307463631064586254511715110933308682061703769489020980806855962724479591125787395163620658259594004092166562170516032834000268855499213998125944650816177533565867482786957117566835113604843003762380044014420897831990140335889989942967539299895614370850827546132043892135670514224732115622279448086834055661975850510059575409653558505225706327368788238605905950679120827356203968736553949603508567674941011900196065319763868748440255691811431275690300510418853466423120699880274299502906401428179717337224051460708185153900592946400931539055519213456766111907891650507124264750664276520240241037246834114060324514820797852416016033426385928748625138008254308550145235061493199996695892684482660951996875137704256478179472342925959911345035957714418554051230886742531878578912441446768201652221881141572325507385719459138517136751018669079028246205826509211255942319179978511691727159374093169411671988666216994674771387581235589884768273625075469787220620863887485675316340301843253576693265829584060863611223658502419013220705349254141879296678287934598990177839246206875955136263946160336147575157943154184876112942552766291737477532772806816444968335075758603052677831616530597162083339994792052192524435339516491271771018617304228747316364353881326364901896898510732593688984287402238373219422623300832304655724736690619601526746558520579969086684975110249886471858004298619330841151157594042888413560753001085286164089989253446994193592178607918900886160044643360093127301377281151260181516816234448235332218822653468714779419621593045561237278383012807110518306356320302829822203975624356719898344296257410860244073851008991224738267988788643891504893485173066765606602131746590564072891775528764778009114601909601715732204601099651995466171422428561778738906387340637322539207184732852648369340774890627245756174444189797920171705224195397835012801944668568199244460984454556749562726348626755008071045094089456543538334719344496279903285819785473638260950225191989064998217546604935254843644830354787903047294704085156710060314626981157703292007319217920772059875929487108231502602963313451208908800123467770051210962134514589094511232458059331648208202240238411255010578542406383889733905056465012899219382378659412932505825923945018151275013771662079650082951456689539196985442677624790938978370091323150932644989813926815926713764846502628535537778970161281065391987916405930855478432409513765364564416242604015243337740020591190036055281150381447998127901685806875751795496258487587782150231045731795366439544769654743511101346187573916565954617871601220556806571910322664035856441943067590583463139288226902843506064510903232434224397360091696338842373040990564260619541435411792673618388777689980307230201828335309818088702867877855077758454325070909742544384843822430367944236208743002020404743158305208417720634625853803097299728910140526037383656368066889205000542592984418496643069772107977370892309483087973050493056264411495806490399183836440009935339770300091372817892264236279135289290245333645902675314110412649989844978340728685671821112290828829269519229582863992855788155443525507663925117628911796188678980556041341513060132014775432709153262923597668710862496337413472675889360137051840453387185317746367448685333562536587961087795964381494602518709912953530990322369678697647756220485903298571233830750815526500393713347618692958695894950510589138728887035609091986740671003066902402415899517198377159897977346749717804687344625438051024990052589164200510168556411467500390153089322228903919050120669166638660142562191207450620162728156493213454482792702092126905050509757880809402415274410795695253751046401154902184294192597738198949251837113299325218278871891594334354748578529416161681277186999781125923908898170603590196546728188587904407695359656110397019078754943031963775608531765690045741190503521917787960634065347919180851301558862438424029407982357071724159087489759092692094168623631500220272025560981867388778272041688773757867813778995307938836220728347748425397447066334129722102586996109604827849770056592342207245854658461155777410922160788502132706011423014788196149318932156333527262500699228183533489815176386063167069054855402190127471059557044073327189922247461125984452832296717571418178543557996289436839762935964681924754366975350149396326998775147547939177889984004415721' ) ; +test( macro , '-51676101935731' , '1234' , '158324042278377313925303658781524871614898748673989982468397056801513262659968003390685627949704258611320160536626820028889962136800384219988465148278031573450509106387239568116863743081510112367947744316933204800345240432247765898932280221777380025886378197115150023156888075592661959629600638394821303250632425654059380834813385429980578207356778680885151122557244823021413539337390766886386023683774012622502869673441546686299110751211243381992933447873142802156806866162053801684285033755846634081232710212999710106103508622919082329128210235683603138941762803368001142605648619008990425285579947768914521571612053244135664040468206471912029995462838737725025722037780961352097655556940963081046269689524507058695919021145649857025466601631832206335908714770892218847010797983061128886699295778458908026100799624592058868604507879625795059341788256071347226801293035257896677449812101619168410274645467937698072600485973695316558617078697826464067560685120905997944243512191651052772680067894809080799438615784588878741144055738313954890688400429893361117159935248693696396627137695916187850803885204391372040167551605832355933919492494203181745050697494649819656173693467296980021705890813609884785517604611253528819574733690077002295678785343609499106604869068180574890180024198538158171783307883610859971770618231149618665209136576442748277494550519027415619444394250603341387572991349015145136953473904476495181684188774626834750617818472938996987683214283309439924103189995535468277303822947364785117218431807701765196665481474819809014739483414625184823572545931155707708389629548395519118401609231979035135464875664607469901894710597734005254396315648601392217921679551086702353136339520705796471641431879666411557946264230276753464580691493861591875142232836387168105624036383384304939623273671227663421382364346405035511757097384178188343056871496957008430970719845337135563975023000121180003910787544177586770185372939136428614465285828597849364223527930973569574297409565906234014152140399051264908028037854285065695691516894764306741200445258651130079726633055035454707400264143396200125546607001935250751700196849819373198663005937089255142210331719097533030824267705354302579492394252054624819810635910772930818973501002381509037985751201262426338686073137167777790210884526513502529974672754561818929196841359487503116806374857279102032619499735463547437917873852231188627313193995709278200744560332235099781528906681845236757294232939540840501710793402651215365559223726732901232304332589555728463490815104762256836437378942770237781171541242665277050803400441103245698206078424116844542305855433985742997194723110120559706402361837255518215431654983113821256777518566578007246638117303300813282471059695780960937192471342720483093022397272639388862609111334563922759362521380716417092672083635856258692643635802385292897608203124530755925272475970099885482900647144339393451148660375139200420049453396533433237007433364495099843124339385777936467767832834097532992680258633382504023134945528051080162773976630522027388364871860673885601145463850278499705365785873574057496070902362590690329163430582931012722823339673749687448879341947128478168108948119496075857326371621272158040967590212259705607234109590371908430237962275467620195565091210074536958791316104893306127805978301999920209853998214358942944312450676988966603743669909381196873223441882204064076740792698565324619823892332131678341250397203399047128712276865053621353068705821363484016988865027435388961661676827059827201761588689945100159628259798636637114887843908407692866645165407556635346270470882762478678318748969509612841224405192451391751679491699159481451781132856593225478798461105500650078302736522399508859604061090018430782371103406780095793970327199466172644652070455424994736654900037878682536762730674188797509195743679412902718668219372565376042254451189328399930173247680691539750124735316777490200616789118915166628770213641217493993403209087930983866118739242363270739641673142095457606027878252411764298206871520866755170134693811548956683565065642028688637479006103660374113920609307215137832756503673451270374534771904030303590041498702749217222999004759003357602091152034722604948534571885348781516114248627593361371966083846505528180094830427733303359954633778102329930129088225944419675472344592340947633203426100068451070062748913329381430835928677944810202891752490896892126540425812163639252121628049481160408647454747378481685454865724857469700081698360897592285719829250458270700796398492146131941376976151305748227248367443062739785389412243719697174747793918305844429511703312893537458763839752259611393771379620065253777610623533134188428935625387641575540926717563311541862831476044794518109895950317069739650023453809779525953218406298837457049987396316333779299477763690386671808883206738746473461031527288187096362547392481733828192703691811275652684091878491782335647464304090599317117223713118270154362644379673966875526023251794033742058280817715606901272370694953811351940143399555738367916981834656631234106492867315013462578161451861851222727927484978513364472656866134489436147990440601567348247368143427992571647342689311925448855042244915814046156681924587686088299035248256687768173138305271776131448783660494290452155267493170780209088260573726810563594020164626876894543544776117725891695956937655222596747253562951739070430520784626532005865397891770599810947915766027843984225809506465099491726669647675836542704925940472862292458103317707001664851510631632483368333519166567495603149523436655902927352564469259379326902513957700266530203095978420437621994997883942015182535685373952581674954526368979534376580657019506688748132488994259649481602782027268796321496293234619922858621277867678825491370164615078298949196552511455124851536133799925473329405250474593913924912551804901403390831450711740501508314471344016110507593788337973582789067759260879539344607152262224215382333489330153894940009834586533901180095846730855291500939551837669345284373711184756405666180209071363312585030301685774779292178313316406602373255646327348281134955048336338727490454877812787617492427362023670761057324483134159661968729511955276617697409266496712072219753283729016198339234913450671856683431220026361896256233229763483100008432120294903953687352831503401656888244700073250811277269623445793796563405171676855616924791868998241051758600745245397052440394156686933344580101379617401437696817984459028218921041977399588148719347919096302390719921087960315851964586936208155974897770793714626502400010799023394074901830556484876564044019461148646704484745692998552151910298131789877533559303845220138187074792203552289300587811989652204054350569388609355366352079539773210398305281469358542324938107197041217218595947653381833043778081164511742732935680326233241131641428417476654793443376871059887960714321380031930204997295874730540407682218645410154547363569726463842192519870398072169036254497989626119475346195254734474880846366685010394270094459050207503355330015842707449098167167948112211428609169028462215066248890291708247636295839908593225052889285032180148515349175791108452276764174092593481970638911935180284154383805459092545680971655577656000718287895404174650864444487637275330486618588627887913198091137313600079403324248364944559239416972594744134017813214704259974060248545972845617599594908395004708799034010940349453335426733467851508855124434739037794790113915284799938282633515926124039300489403274166512016144314450767050504019696951073496152282334971591755531534918527658116356766005810018865387036502835277104484897521399845192578397217389066546258015343671781439530194484186424336132467982739290593716534087153430243415506786743021432802857971661907233602499902567387941782564166386342672410874812089691799529503443000488843767817702945159240603649832489196454539442081235188719658702765814391130506231315568011273524165094617918503831867012569022324402969461007866076655261544955353941677901200948344001405059672259174534803855786509381749106901797774448058734457124149367609992922544375497404889378084258630248150919968340293441413856717836345219286003180349374207341129088557493435423239964391016550727225456481162350628594289395184071310300179756589174536625319150383798785373066376691658528761564820534618453895379491843182268871603588369275077855410841475816916672608469381494765293579645251398504292250764825206147001031380918536905798997324364665442675157885496504116737588881183129820652811664336805124175412738167561167253417906013601281586840716605226757932860034772050966241473341886952885772364434302876604236880399216981777408544673261443252042495657687251968928902101306694702738065723310727043271924859335698667952366365883749591917139742105118753077931026478251365210693917236917159155967697763044367201149926693443948539699579913602708706722711432838021246855315885038460450756859122906583939756348652891700451630407133090901515174232078445554725093208016341426376158610309666955884603433032223065165852248565738599860177261970078536206931153975848971431287001632805433404957578207772941765098112799264026267445074698665059729145576674938934608054531809788773719961126616990316210326818453980080321988760982334379271531791369297582640574651520702873403331880456606970974892343433336446248718921846000086640006680764293893307983492389270379130633842798650803348158429980408513212973097444321318667389109611955924135884714672638284288772566998005211664934734547822982660638379730254204195834897865492728459422863551908452096176425627547324850175172784662840168613264736639310780854731722004175205456083684478275667370139311794044918888433282117891203786131932421524201946630405904103705604352951344094166243627023050380063835187325378976884921927883069821201742308833558695341662261151498959733037164633952848288492505505197499859566019268823236129754425893906449877905855504081397182635782376853937776733107007960687910397361651834577002303143087866448497366428780519572180278375369679225575668491891544012967905489645541044473614128660244742603437904495496004459121145000204660640788761369040236852666481807337266045681038338455762663801212249239773760849573135339910245942472057741897143798714888511942994856977741299663716890747044572844810556164536063761986767836402140711391146026318746472684683736517628592458110701485687350372867786408697530159165580262455780381579264667555447984957739182385760977780225061084004806106049112388374908757400568145385583888461889658540915335972493538978104321154519123769320702224831927212063777898343511469299130626487155185875277476235831577797403193411734525969805530291201270196761046479780099300862785898294670735985568048204412072182439508001601125949813004653714414454010147969834379658692070731355494945150892188648577526049837658909733330381505835664398796899002686901365148731947521928717964471059772305071463737374874406416651278356408918633301449776192835629215568915731374744480004571009884843731735476903477562446584279323243628329043070154171111030416954029897290949469967976161666719811003325138761099757410714225754805089491754951146648993331480859725730046281101542321018226211161218032808157377990274486574775247295293446271999216933362071677144037958846938035870357017121382946099997460180182187217217820316108638070949402341509021488404838623964004697749860791584971181351855741948571771355034517420282039098468418778809673122690363103723019689210278682644736222976118509622284207375261241784528558945409584782281603428222482076644739841708067658443152632760947992710970595496336571116020117920899681972595692145247586867390993275854296221489381933037318139292360281964291441764499495760508673368168379423816602792242572983422830229937308653522404847350290384106194221461480553536360110558204157177392001034747822538121785134044265222471502565785788526018168367500851854368644667069187608053339694123467967831636497181955436837184144618605482450617195904135269079047201637007435156663520051298601126128369945944529481020638321516198582623214543218826748293953436296165935049635820455993901167665818294125029492356440701038244166842363513621908344320848585686797979439878826598478637355993217261347336958935084397089381198078856022083300330117262456180993049915148012467532881768933263035840131555093550707791000541507741393303110968532024193273602133335942404611643551498070626757534418055263575760282736414364452938769778575091320674432871296496661879381856396240520797406048137637370857663757380205251562705321737487489618016878804542225487729084746708529820375811443132907266237938994474813800033631766739207459417966080119828341415764580961209459326665346025307463631064586254511715110933308682061703769489020980806855962724479591125787395163620658259594004092166562170516032834000268855499213998125944650816177533565867482786957117566835113604843003762380044014420897831990140335889989942967539299895614370850827546132043892135670514224732115622279448086834055661975850510059575409653558505225706327368788238605905950679120827356203968736553949603508567674941011900196065319763868748440255691811431275690300510418853466423120699880274299502906401428179717337224051460708185153900592946400931539055519213456766111907891650507124264750664276520240241037246834114060324514820797852416016033426385928748625138008254308550145235061493199996695892684482660951996875137704256478179472342925959911345035957714418554051230886742531878578912441446768201652221881141572325507385719459138517136751018669079028246205826509211255942319179978511691727159374093169411671988666216994674771387581235589884768273625075469787220620863887485675316340301843253576693265829584060863611223658502419013220705349254141879296678287934598990177839246206875955136263946160336147575157943154184876112942552766291737477532772806816444968335075758603052677831616530597162083339994792052192524435339516491271771018617304228747316364353881326364901896898510732593688984287402238373219422623300832304655724736690619601526746558520579969086684975110249886471858004298619330841151157594042888413560753001085286164089989253446994193592178607918900886160044643360093127301377281151260181516816234448235332218822653468714779419621593045561237278383012807110518306356320302829822203975624356719898344296257410860244073851008991224738267988788643891504893485173066765606602131746590564072891775528764778009114601909601715732204601099651995466171422428561778738906387340637322539207184732852648369340774890627245756174444189797920171705224195397835012801944668568199244460984454556749562726348626755008071045094089456543538334719344496279903285819785473638260950225191989064998217546604935254843644830354787903047294704085156710060314626981157703292007319217920772059875929487108231502602963313451208908800123467770051210962134514589094511232458059331648208202240238411255010578542406383889733905056465012899219382378659412932505825923945018151275013771662079650082951456689539196985442677624790938978370091323150932644989813926815926713764846502628535537778970161281065391987916405930855478432409513765364564416242604015243337740020591190036055281150381447998127901685806875751795496258487587782150231045731795366439544769654743511101346187573916565954617871601220556806571910322664035856441943067590583463139288226902843506064510903232434224397360091696338842373040990564260619541435411792673618388777689980307230201828335309818088702867877855077758454325070909742544384843822430367944236208743002020404743158305208417720634625853803097299728910140526037383656368066889205000542592984418496643069772107977370892309483087973050493056264411495806490399183836440009935339770300091372817892264236279135289290245333645902675314110412649989844978340728685671821112290828829269519229582863992855788155443525507663925117628911796188678980556041341513060132014775432709153262923597668710862496337413472675889360137051840453387185317746367448685333562536587961087795964381494602518709912953530990322369678697647756220485903298571233830750815526500393713347618692958695894950510589138728887035609091986740671003066902402415899517198377159897977346749717804687344625438051024990052589164200510168556411467500390153089322228903919050120669166638660142562191207450620162728156493213454482792702092126905050509757880809402415274410795695253751046401154902184294192597738198949251837113299325218278871891594334354748578529416161681277186999781125923908898170603590196546728188587904407695359656110397019078754943031963775608531765690045741190503521917787960634065347919180851301558862438424029407982357071724159087489759092692094168623631500220272025560981867388778272041688773757867813778995307938836220728347748425397447066334129722102586996109604827849770056592342207245854658461155777410922160788502132706011423014788196149318932156333527262500699228183533489815176386063167069054855402190127471059557044073327189922247461125984452832296717571418178543557996289436839762935964681924754366975350149396326998775147547939177889984004415721' ) ; +test( macro , '51676101935731' , '5678' , '114598568890558892351277519655251349170512457301108169122918046980237508383487307624081510756564677550336178477302154205298849988621620086922824241203952845169587118918761676702275886803533985126048599159621880798222780212304246817740927997329598603522333259993676023070883723250177300932925278631685866750044996349161018487418710787156824698743699059007370890842841419231416436426583294134280327799008795618556337681789763639042135318458712688112601941846586049438371804926113126508996078777819094310659599757182791807946793330068376689258887811689995072195331087218152210579989587318167100041773383622122477291943850218476496927044272842237554951357422835645664516760841149829622887677523325405719345978782256416220091760753375551941881093250856520343277787117543740369641738849743550250267305042707228709682744788048246753481687183391246480490101912653586013524077299683599506874945043746289984496657526568247754108757916023746860823651106704947454023630829841108532968959604789557821034558282678387782274892400435740522133769190575725840235412871894976415960900858952703549298673487135436478720837173606603965003749202465844411925396601850697464037386444381718980799446621464654550821206321596000370929647608427450678602369409467488634567676260749990886237210425012278562172533337907188794399372225626872733254924000975445679212294865582779159284739536067574648674948637306603357526281158214867606477582551408107503527328338793768794019922917887582376894908153461450324195019808790951956266885107461973925559489970262966079308484289377245650607102408136209843678657317031621605407118233165024507780188477008776626376774732469991901945525053633560386998290497433245057356518070213620275700745654781100039839338506451450577013486892471483552928409289830016271158248107951963293890564868178813169793288638609421552999187733984144553406615257602536512368045676140620190929856992488533649322354718067519310329366233012095782513367770623099210385145306068882019668219811962909945944938303357412007436455159207921731034641005985972731076872404481351411053559046816512985501762256787820371273853296301441525251524961854980951466415757745095790408750111233498938399843328976884101167576106332111369898329073992906185716431137905217592404057225277504661400556077285374257237710751164948498254228336520906926692000699164318088485138209956632046211769172737818805518350576876409911238994857621609965737246540747228915599832803850235006646505920161663461782710578007459880127628658300436718162035702759857413264686037450843066618529962777161180564480610570194083990996868348589497339967832525631952114004244381394862686005465286457021469621822619867151692227701982207711240403754089139160258204655040380941387512320543125847873280531581254727837191059980870831091122923417959861596435814654220789276907248261882603123131749272763005899889970210586720440187361168097472073369327028087807891921073775186041480435653913681928394558065224090076679384591070891307475995293653429635959202548503686994214508788450093243004124213718944072946348546273490462900925735733454594192759136002496877104912413694566063277128709834235803795521599955020375102449787917179385948650401410782450535088196592336719230363010532216782360997264383385827672744353408971592600267691136637128647179666091641390767353626655629610767925329336924814212570169908132079298822259312790776336192539171954812142459076936946385158760440753962659197081868092892356974717649297318187816581273710002222637822422625907248946609177471022616696078166962638903351786881559353388016022793559059422611570772104441502159519678683680896440534678482697361220573057326321241467487140124612227021769519132788278891261578500937493023431494800715316974572061757711388338850673314696559686053949631600706217179936149359062760652855148968218517603478406764660079773518392515740066557654365463358812116383920109518376511927056859803872276659655935142427958378419267026204993883734671725916631060714088945987606306190400841739343960163767980632636951807150346899488246361701225858275512527213850024197265932454942520600005445974264278700061722886358112352180245501375011619481895903494024525948428278732709789878138429844599672738323876521649110855277792436882821166942741738868002576408435397753753580116182952236210916267829966145925028378437875898705477022525397608430772386789943421906088726337517286361167325374608638664447743003669920203279685500192102212678244500280945163720924806258942015670529098264965727843346426114488713290334508104318728502382771728945872501553223396187212916235118458655838036585541800475260873636577479118287025217430116350907433315459696137904514955307303089701947453368286386613774098275500676250943657017383834720061347722825211956235385743059349300184053076658159489552304525616565099968774334572359425467321345729237028949216589829910496148348266399952259506966453084807497614865786568010359718381755280552030450357482091573325492727231276923993244258612115652943501643076670607096916922788985244717748167425031600866371091539018747314619844176434458885344303041217826099156483212620631712885522804065144269853819342281878739269471469710167419263261298426536005724710899328976253518828717132656525336398408521558604682092666618949049723934689800847063844761671282296978918952554214898709123610631472079549040944065036271515445762211638184670207178784047672153843595557392899022269520772862968918684932700339559357972321385437515253951979000296108897236060608128673387896445773358382692008138068938089087965375939805087660261553154170365883140110004255362850999174312472258828659845801114248663995523535651080385407122403810220614699534394862199070170516370529573724426277383249873364882798357333666601674798052228774948816335992020369901620508453181317972153011582161807177844672456985443467954652113777013601630746866436183732233279064589871750135148960495813527709288884229866780850817394534670003825516127760071436525331020214654659944097612888206044199184355427079633744822550780458499778237357353947422296038656940932241020563615278249555508480330508674120678052089502789507188213274173100770916834969313508824784364056056402134407244119638598785990062688861144654163575302227468770905464187883181134822725915136640612107272892247282302709032318098895359710245013039285473099721463792717954735326941637258027020359449474131956608190956922971406645107469617185652049606430376373658432400056414731724407005001708692411063413271177513212657905468790370163043951258130982778875673922295809518571866979572550249035569072335930443175450876647946083312614092963535991789686984682545283358632371449413497269427928750522476008103850277182197862744717478903974777451339726925492684847344667201465331748104805481572363883196797787778153950751138898727728375184289353676704124928349416752637531102490310279351764714073405197836749014690395282266606472002997382187295402889448513435174099451342568509159453242120888320839737697049616714431772174331671258229322246266889685257316038839337528724509464509575560371587287218382144584572419703181295877602278221106570930586664027065311454892200273818659381311150404756262029418161040565111664447264252108585981706307591881047374954123445586938599411011096620619274323216164888259706949545584064116931697419880810232135950719390350713062967911958144149654637677624682217905237402682589189689936992002791828405957862158911334297099480655817390013698092780805866900709190383307511190456176470564094830491741371514412781382471608566016857542175626271815830825751173841300134557318244910059728166314923856198690466209098544666893459074761870150034083238014245526074209050076925214228138545561830243367680472907455390358950492305796631316420731434125187536810546887612854361525903826549660077385607201642040850831267699276814362171286190066768458981549632902853741404667094999899553250446338548089645534133891269993883172431804704263925215719942166060373843805638153594804487097561950457231382850176704556278355177741960834256932103041468108431421024565688930277277827204256767781041934083737995080790793709338041932760953129953324240749245316117068345243350389721646548464456799564122538803508302280206449283869830911336778221946967418555187670963441198271217790496259964780654563445592505556519078267175564184094236772289072470230033320640614537275025449633888698376301092731992965463666856043698716302806693885087426713749261988769556429463390046244837567904659070225420983410009710978888428520162826187731324371494738964988237894717677430862117281326863913479208553025891950712021033737482821762882285969238709814995624715621242460823465809517565513365312665098952226387532971101201851401611211767107556328808562154195909528062579532668678860849786353548436978596941540803973584469644923040177756384343881496136104278613378924581962143710807219315022833887527431763513942927784402594506818541221504288809623165972198540933669494785758163834650407164355749575134198337788610507044159766150241794499149571096051559220223878817602912552525929282957515181558545301005606558272154807998739024160863626434649314036466134847629318039975100093407373104577388406981878656175843258194717523909092875616040477453623785051493436611595002796440848161148666254022016142475461311658387441335732482745839024940608008050016971556249565896984096952364713943123112125591933258703693851493005494192677788993225349131525711396145903045479052901233399936977821783416065979989065328839546014013831203847910851373499087681269273873808794681827032455802487324933071462267161585550348497079770547563318071210788547323150873537668915925365865275006606032948938992420253484030285899801624037645490546643734003092212092762896778094831579400704783040331797648705647138803684988666221643282949518185294231209149700862655885675685742587977247470742881671606128975518282142621174602709267031158360580359120233235473997243785917055987801766020914435512416873713285800875063783960692674329948345063193713090346106430960233900220471049512359484540660252000207287048940904649627356855235310748631701290142334022573624657571685050543054539462593343925120666965564304346218619573761401243630815566172421336337019044921825132743027076074431860266381081919439461501518228192067428154599552061956522454587058878725629423271121973055948964177586675025613775553459402756099732937841164187693906160490012428728615553281749083877569856034002578003805619108603440019554292851568931421048023066958052204343883372931130679073105823557408875100214126784759475874110505599354169570696609784560599958215019928598013718187402289676120592754363058386217976480889644579627120147953445090187876503616327911008391800184735093377883625195033462470489375923507822652512086242908850264792687042789386655227831819214938281104644932640292609019834942621395608142214243559409841197661527772521605594271433534022197568992584336382425215293816118135415822763659169694051345319875623274091939751368133997813845916207449451701850545644437368283792955041875417825002650183812267921554071554148141810545261132326348765749042696757503149872630966032411848943742788719959766685423336348908720532382273782455044811025224688005258724128117375301877446615463103917254847301569577217661986908844517236064250159012321706048888909681124601158873187553237768719599661206118675972473809098983711387501122615038573963236084013215429847727184258992906237874964751406104681742937670985077393504140518585378445945934961441800684055554038233956351167210957484786967705794592308352175762541752214854817124986107384580167149061884866946918670005168162259392927744148326558953622056499756057865517495516987090419182627739373939985152189775038553115538646471075934221909696916621433427020321907211290750366847722032569885358324304825748519823761695735069483610277833391784268305687555417321060681254063601376044472764727209479821068239831947119222642427588604524821548797463869612449236554848366936415329635310834448639523331032214535561193061625240491292472959421415693842751590387163835477828542899873873355067539845115993799752754206275423338217062076744831694087595991582736550683224860678822779524670167708708091493709146151122212285091313848566637581973054913102622054948327816252692080182215324465447499805634653027067312991605368041127365270645100770232874469104024167016075695806268258050422993127312933128697504418653934394765893583568834878949604860449521880438659616802122657499696711371950669696088698654540203231615696906652300496120780993861295366389568887602126999373711575248980111463126737434199999923186123228140458802135764964497499211839068795147064258579583962890520656631190772155927073711649314137404718303647113380977808317817846980386481066453326264620161085488324738434460460038866634635020866393862469381723564361661779993116516911788408702482058657042742027085322886734485737469665890653383965527251028179320635401480247183169549776451102905415564180956069929150480364980253864993561144620337603341026450280648329108363155941423746477676441226330763778143302558927254074511454873470596647216773968167693426794670205504808306963783432036244979681725783341795616208450760202661124160076951242290485270351100016293179519729579532961953093883990623843703845911016699084294413469034800124849706899721051849479889146370628964206263232509984714695180238067877770898591308982070720120248367443358203058594410980465031081259361282748294276045466637842578800793537425693971319078319720309483472991281827652766395632559627448449322724455935973458554816112349560437316476772468508305512367513982203113683319867051472957794682903830326933115041030819168485955295547194534592544854770444190167625774242882339856600323988117721872329621119307065210242378471925603855682602511342933926964022027574473668074767250277614350240898114804833628233917590283331643902799593247663848733995782588708639967040765878261594144333897235212151312166170400673009191876880782817897642797305674083214304116001846541558880139343876729547122660589815784784823845573389037426438950965231475933765920983976255357185318394294462939870923725191627253724661104724674152692069584822984507668895796308777450228162744501914688617738288423774855905509153854844523303840957562160021954437904572106375782764718235463296636952021626993854683250625366396838736958893686683145675963239492023700157535671554883718959215653559018684790556050406047348053882167970909777535677010769091602244371438842557331819164644414366880048931933080199464775719509620992644091954275270680288884109813652088838217429569522796724565190899510248605280475710488565214118916127660760240741412774854958523464875335791354333554221114105991785983393823020076734058183927249261932463022507518378417531613595367008713063568456526553921055526758039628801741635831559596552015920057728581873824235567176123583511244661921620535917294970250780006254560913313662765305807933366774232072453360650960008438817118037078045098657774617616105096015011390156583453754385678396291801322575711617682706241038506687001234836301806498523163010650449912433471614658213754184557683081702691883198005157762869533426985772871548066409461102566074482585186196172527568428897050456306066648582770036459460511184764057517774896339386592062506459252579461592560474665528416239792702809524368229823156443879848127098290936890568640344899841675398255520835326531345996368545121081712559676548972073976307843066272299578779899750067849171423314509815187548244077378329796193933542997364333804995452518983295374300579841041477430234285996531274115737469223410436044734098218596575261885585549688086844423068789246324166549747789727265524050455962780001580710226770900533745079189013929659478693513587745539578848213377469358275467176678200951122297705749503306698574297410712427125825591862363276134686251235055301972061105661224639007183964902695034424436437936253659197166818614429825626676264111882581783852335169138950280191270126993381055654149481441296522956835357856587690439122868336488948939918429473181311497573245935858058048846043815567877289011167331444931953925754671240134069623866836792786186011879777990158691547401988209088233436138946304596662211246080716963940999419458347032733075551690030530582476791228961785738428344668271954394260631144673445131619681560910288236163257493867850591921101601774216283724826035337528992934585854238509545972201306935022486046021526186153884783616668536070352766884410433501411997774544944294529752318683967218547747054919125920723787453768874396140732374376069661038491913390225584336932342777315761255948878551294079902768864779706744004767497971699010857817837320331732586562556917485670513125539936647354410777628785488698349835379591475098154799827267570479952391820096174179651670850574284042676840011853046780858800494312309921469703542619592726263073590976462669364922795234207666005686292826903212848877481605826947453296687451059719061958356539720636942722901955175023641714596609837815361932183405821894237560762724700527878714340752426908901818205438166928697623647899633610409766731686872645318577714032460894835086863906305213902132263709453953046543560314104677422693777305934218298526734878837051106284119542143667788585456657142746665427084921846682769309335227479860142774263718482271045462438363768361342074577613689416306245388036366588228918750297891553343601271116018104061166106299788463499404576467234680999408128685491495431444663757432415240164158488210900819745907723117930120695685024585064625587827493034169505631321361629073305032453650015121172416455507667013522455054423012824659556913170191784272134013229862167933357870440372597009868509136667331096909772244774497523425649971713882182557907497459362685468864499900443106554956344003403877683026526745408126870149084364211072799881433860076306106247851979718211066568293397639539451283955573658564108776175764110532523449193170074167594375276229899521780717952518583208904105756371686598266057406647087463129407379439591678526118563375375353708424759178126712588851088358543556455828259242229752207982655534691287505400579846562914613465114055818872346386918363454946173595045963724905520868541270473697264250446046089642748190999453356935960747546554692305385529475044104740895111094053981210797991140570926872891670773814468169522981197767273686316613791050298552624472953601064874491619431515581298483094974434200152544999972253615705670333910064258013397051190672327809649449512231521002044431168670777665701194943318920142732683570462533039523306263620225871545457775764770604929953997570625951936899909518438534435970611071611463871839879758260799824991623563429811928499039440771973070864273967278618870976632376075488071575461144561219935848976261991995743418626824010282377472581361028454622921441883252823380473535980635040675347266665813701114359254871281962513087998501938848746260785427396775049514168562612073137570353309933421182587431285208099490235882059772793358564991437202016800963518589761455026124188003465061263343783842908952238749299315855490241309786950824004062760976904187502795945035840704763791629996479207882802190639214588281672075545825412562820832491492193486742631064101780835395570244051743402738881730159768458032350492340983945389655058528481715594070179000970782625156057915320413986266019990172337946416918557063800133747641604183437713060443142402624891881249459030992935793527950409840201343706778667031036382270368309922120727685173156943536928765918297523291556499898745165164935596868942828843358938043957961029987646769997740718353298902113509786945580718208991358463177836638025806577481206139581029605232343390118748079783839195843230044920030000293609262840245610181309358224141510030238251805707053062432073731984040628183721390347726139606685474826304883630174052769377584217789247910727483325946473633314792666461326212634921565119552168762472730204002086252124424937891781185484626212876955436221477165360031020231430386214870054108295007899715254119071513260472470230202533983791307938408960011206611455326096801350655243853398472597807466586200601253211741913149771316966742972424796953362829778527691461619646698652901365907319538496395153314189223850326377266970571724729299225616643375250610943592593231827466075999846471798767809815413033084807935411432143738782707086800700249890892016781300755462774204025643372850935993536835930431474211275360661334909180169369108705004893833932685971810039967903674985151600881858004723253102936206563045825118090129751111068119272073957023228117535946104197559484455044224813743551400684035958704844910240433782794543523046179137502988175588334343929604010655262873143788409800103840149709367769678272389350632655653061526909944375166865821226676124073718040169866120459345622225584107723626981527594409083885799002170436455111357966813110193233521883524236223930189338177788877617266977925443568413998134839137304794431773484057275907471161083605792371548269896511232018878269590877998951467990708359705970388117405757636229559483770009754679879169950634139569036627493168743252032958240435946744381139249473095508589299567208080597578309780705860706366590038525752672682617991285144702659613402563158938705017883355247903759797019472262560188954212310667319942679244018502332473572330860141285275142567616352011441717389434820775671752035498192835097210704346762871785843394366619830754655068315068021943501597109761283722605580646118265029950836645428880355482809418017207519930746525482467660956501946286248673803148678778320154527985484392151772657071003568822396992334569447439518931797472794360893625913323930637936123592307936959744134660419379541520223856359015281561124867120268443532762202836358157067397969523277941814805842994278790015196862449348685333746940835406048087120468705315737810814851006986239662973395622981892417635797361552255577200093154926399160041205233526050099942113585424767102462092543693848903032320176365611859456909911464662553394222492702361972492589328743134628042819438985147526265136537852840491772207661691558509954371067469519662258250666590165226871146827599529979187274127942586949484821499948977145043677342942737229631023377843981185400933835831423767351371476191843662990866109519730716132126804072070640870780628344547744782396291260010070383315973397408134147633405837121702299828479485082965001168058308660534087429710071643832112134185681191355797031035640660674171124608581811772720944526748929882880981531600483484334329258782080131950152990379792064594496526209604646130807483497903997981366660814109367081501493013317987778423970445235345262451162417303194219408843842138074967028470582769901836866713822445861935378961772248421345450181825317803057793865331808243999032870740776976064805740571853847337064834310551096634478336669042763136704807586517365797136211624710257953267355206084531695186978286706442628626395149607414222118992574163280333685823680906473269108560879550907146951083501973652650163620691173614434376022074343663278172616794365354028350879611668170977299413329242853102242731460245981931645393086566419168095714547735636341109457537424127013466092829987029469225005609148935719219627886553517060926819156103842061184103249786722102357857380363966877195050686029417164805540813780785634440605334896258106006438094052913691329158675367290141201254618676773332219794175088755775479718673883939486154200593603203954816323103020616423867397093710839615897871898114553682658447075458783118190023366087506978374367440207438924966819405213686487476793825253259734471325657957108673156552118127808366008364042860528540535034950176612182005881123405988511608306144849231503055132715499943836726775291396811671741107037864808220275570128503090451498085660993674239141408137294509508916040084880385126052374726220832131130118877249390053885190862016620304127338330822376885177520007162660545308168910551027048206864259306643403258146047122775364888620470370521404458837255123240697440311548296630455328683555320575028845668660604051631191978861891344050450146706574218145025744150912515431643639763471496084616921691588906643318094161772942444267813744245201380387655455570994259537781139991672727963630401572633729986361556875282295744688790419550042115325815066901167830915280249317272239032336428833326465165088029450553351265755331884109528200193953474902952152924946185562536338925534826199411100653632718279533909714213316643228976513653756607679272611930525331509533360676882289504637968260788530354999017751472236832783844855905587554729452514767314824700008649155270346776891167316609312798908304391728180382885705826358462049930067611387677311125159653938052767644809094689360554558540305110248935812740648171186350593122648008331898865084081910232912772214306873277181550887217911939282490833562582253824958566304651212513938680716752798136384903060676496603824306844521424474974798402169651179277198301900928835877874551786318031213157816266052352420958386807745919890178528945692073978829824318254828803767836945769264370965570278955420236563465318633087533589358061430931666035989509802975402163642667940061694906307745403336415888401856273908779094219374541395289779919505811512398727811277052044628889676576204347887155453152137381991361998780634451422237710883316724087265275331735893833197129258839234716392342611646952816033259950054307629463527993424446629554718055401467323011537168845330459671616005062986429892433717372769708986976311304603813694466876866558852113339228482279288771725065980107614730689732508546319518769065056680957782914367866215918590112732510471009325001837807792226514983632349787121937850873634795369167442047937893608233634609666703704587131733723929085811244615783860405178507877859666805690049528538712275243036223309707838878743093968440740186365488240924198311296922550429467362803938321202544305084030232602891812533837834720169281029831388109862088373636124595410033526477352125408960443495710872004466944740504181430539375974997235191384764262912442475167562557149784655839519095519656973612676149775555468394211684073546313305136429488931374979941004482067517955299494545191338214275004688648850080625425657255697031851628472826812878438128524708409359692881087063253264481220907184058301090967458080899506347453532002995200234316121374098161410900539135981863658581370995732911051446451138998982787447971905437800015184192194998890428219996377737564767442914336298428740825412724669981656100409516386221832151219625497417581073077338087294189592180026420910118672014596652061567734369839911877944565035730463100962767041999720431147498003871428186236484743508773318443952371300988256662194348824041466733754460943324754187692906063468991068425866078952725816706806990970194721942596702352590797837064926809786719427373172154689565613653917663261933894602724198203854026358029130198575484449317765398657516813791597967078843130547339469073783524497382496877243498441684162650928487855937959542776542381517702580219111410239373945791463335216468817891797159897821504141336134011961229585863213744116868341898479921270173994357042490280766042368231306294592305816034402114190442648210070915119128632526643207927399206403270502196136290923785508894091611892797999732479898770027343898906937912932694388260729491337611804903421576030209232881941209677305990236485778758568570909511203847749727139447140750017842138051158739164470079822994287470311711455580863809119499634431231542924995363573544534166199416944524373140000391672173343392584556167540657516390123765234814227550308964579212558077778186821292704585207362004093356520798803551721188807088087772466898440741018646115406804612936758076828507023774182209672664449988128724902414993501219401001765370672317191401925997949428670713449531376719892790107292559315329271665439517184073930078672355080717529913180235718999452728793715874798090520042529997304171394608223665519403070588265928559013346665409955899514815287087015895503845612331949334663867288844709249699760870154746576067740617109411671360905733205915721144812868914282146396418963599623786016511558301453135637971753217719122740923575115844689612181585533098056418282958853896584799967463642188879073429673984966106974767322904274930921304431241275791867912140260586098638979591977302253507591795249943499668854219091401728091291240324419097106670936334674554710470587846998580373319693822832186125663563662227300196033318571309952940878063796339388257833300085483835132481959803926226375922877243938995147684343099551037900344498227926589430544888103232468580078181742899166208452521226468017225770159292796370494628221608659705311860880457610945893698767024912686130786102451619763311388742213622180967440266735615377707064630432362851346787104938266503146626301826386009911001332410273267944348625003805191824863507525729321246269404084347151934903222130472688695181142909993054528914728385212132736819895913661164653395636100392775995046821116359166052147490259673545652512579506858292074086966566678148092233349090670531856554153436180220853767903100802098585062424675371471614926784976597351943926464759004842764683915776120276735116378854746819555607095002547606392301607456201613727812460712017149291083250455836242558225613747332670029560146313664626625184108408526435551075760616558918639998468694149252839714828173433759651731790585540238768981676874286013596872690278563046650509425213768568600827027602310874261454666959825912534982207381304504165906647669730083754622626706293980961379228599568320787109947615111949624856762702790577996604294851650710262744819536909560241872405354015195815901368973088718316821955357398270458847336192054118678494760800661846422575105028339264471032443221584848296622560987616922442031578568960816859233700095456702725652471996634621805360039904773049493081061117890447026080993179208164914084001561137279717964474457910822698800571370948730739574958519456023949553713352403879552609629342711187222946890885571493932420920963889812746152759211771233710658321471894667865836881256359416902697886305637566565270511589302949804123378578009588741245234061360202559864224187793107140310370774238991415782896268860247160087221743398632360201329490179060521461387097002495616922113269135683217341549840373435949057182322394943783472872058473593126858273723016989321497958715693848778260916053432892608850153974019086350180056263354802687994169752296797729166187979142462997664638545934162928193655800594073599868087694021711982073641040542199591089911339670166122773835431930957664741772458832249655277342309784943306925485650386363310465509184262852528967556488981679969063781668502292160178629319257109918089175245793016717386236635810518592787953993726687773744355504320944066168920405278890106620954397703842075409790585293639502140471672275176364054469159930595251498121123000632836929940035415174800963695560911591519351305097536056757497122738733247223334299439795964416272756974788281452938919543919179780495830578105176873022791010237618749182041436120814538747344362413981166492880532981408473122438956024899704764414827372680888359069383203084252482710559799658759140471216458496005546408675587772142479513233766094809931909320095433919996718551768358151589619518928107632509757299346855803242881198506144473507763036827161335579895814696687756797267492473907511129330448610059311031697081944370716803795577518487360501045579868709621241757229741722143091970632237708849516805918096189012758100919518522581134272755075309636666228932838080599671285408828093511202116961319849653073610668505654418211025373854469615185587420505700575888261495326807192713148159720874106763838858514416282535260626452514445199386144279460790374332488395321942092245696971633409779711403667148196791467370350138794216664252879537117245964416540374786812119366723571213640039312537831206990870490421854920889257491088284125753811729442672269609411252776690642554159109624124410614773690847589962809481591267437473683970316925645103066449528952833136986667526561057302938060806717705640347372758940854559438090824022934117904362128241289781935585414469223058188520370422811243860774239667131292667503614480954661643166021094263565562954650536478763836171348484291106790718789951482491353812912872996022446709005369204478525205413817559888660494002070759867343020833304262695786258762182090471108517478008062047916158342858928375981008630590361530730991533337103005007767024431048399846363323604547570763844498393678827412313502948266613097046593733067129592808782764829082779540513431895899823748129703286439371900576065601753249715130145551395611158446136282331860450878473803949375391163105048460542796053348711044126190850489694720890621885113977651566300965967733708467656571181095189043634361442938460620424892828907311518705548399259321673290854432989232402033427695505537391672297800738391325014683049620765825976502001490715724896015980764535931939727448433948695121642423627605318724132757699110767075442641487063525797598420578507881625322631258275225375353312907827229233991901973469958877318300954825891826980150082560409853023435179352929576326184297304876469260675852353214336752697472278921785590185472893192209568387192363535612736411827177789230687431274148917049359515220791900149954463891144855694570764248287491511795465355571647974077067810042898359708679406723077456168802915159985106685165278844446272185418039624433414989676529360733224196806303027701699401813246007448367635711560091194638564196215462750260469722895057683130186655197563435087042456745552261726792507936708788382778795714813046436130676422706429620437824366040216140317789120666296561961817276627472468337572371444709160465057566385526105800512406353089397311243525990809771719833722278531018522388436675146455281597431804631523542433155277652876622739675563673188640006742892639445098465242739506308240042149149884627632749060858136523029010127328467486160496136970964099609404485275485587599287991078550382891153951255006778605902787210807236763823509705570383045418472207043091603551691808413012509993628114628175790641442073599128028234496708954756607086944124895421408720862402696781696349037884497396953950073338348468396830752927901597524196430868111165262332019170855492271790130827789573109557139053285109689778332545958693287355659898640515042491550628028917049986801903913280115785942913725572192146862247809512151632511954616445305241282672393782775249991259990268401573895663033422145829424653742257468572830795144571447217172170344390171558138444299290663385049414552445567639181283014510290419785983701505834195674761038613042562189128641343318579288380854262613061171426518448419053079528551126733990801837900708461500681574188884795165426161291709564074295450881956626201918302402436945381093124745577171671312225963759197527876184346331791160454187021677119481282452140937671112699410475067112269611894574476316058950214818972540215691086743676782333339834793090049695579827352673705992602098532938745690406929370454895121406852644336817988310511018606485003687435377377880357687101549923752753870842331086890020957072110482921078203892582825430743853678938678845171550824421056075012746445684719777935620199933697201020688921671515732288023709159460020579281422206200660770662136186411119039464511246972567849083853953974560152919983727889703872145059312940206651954534823197197456037124574320069154489362428152384518561176908584188017896443196497458965211081852296712793505164224540578823521427317961999439433840947679261853070347008183355600509419881301091737467053884095017880299752423221585377626802533750299111687354685486159204618103044084872599593910681436894070175869895284548114007698177881132942381244912110629421844127353550884486951712261822154242410334674508400867284003116207597789041715421899510712174705598161680472160639854366218120520371025267080822589762082721234822899143897023722519527191182967187424707516302075467248142839624551051489916072253973677889265488627584976956960720624875569085896430625668405496389507310955276293395519901278703982054295957616190481642061914557057918641411590376116837069898283627310675729905679075315341752230316326873798944842338809064711121830318844994995728478247554519759647479833188840882272330805936564717875937759645466235877959356774680757359186747964855850779950002190153225827761646716858046423788030255771497227479049063699882556523239832981578690856832572914858098641904135700095112492548076201483334658215008902573568715728628589777880228112444674918240096125221488915805020859677852091654966635145651388632847300280396301961059638194991615057652714347324569091348372183877979671140165075401908204991585820352573960135268809787675490861799359172749390316567281411205233112473050152264568898538213889610052662413601412411722965122929820314537969307515359259003169193350947717065852529386538881686267170773291846400688708486999155003104663586382344290816318064759978010654953537866623711446364570626969502173544423423074929404208942616624720195343641583097741467031833905383231234374060924479894152342878888888587110637396276339544946001358888192005723471164751936785560384570786894012343324076324959874814196843505410918926079285183879707107430170210495856306080442455608822862122117572876456630741312672784076158322593594055019414285422443235678980565689755317999308802910505961137210498567710018536735289083212063487672806707334546206404814261141369706196328862821461886994687577175390043169221020130498162026839862458973943014519368318441838195560100295968496734198518495996314945289548715598718870583552621401683863581183106851205684154635910380524563847117217821212106128722162524253763046827147151974918777923681784807700970624766909477312166760595507462337125669968044357089923070482883709634106122062070766308810712735710624862438926613157497959226806833188459480017662980172063360634178971275611314406393895211433271861436947760659023345158492960047345295499295662853340265551685535599800744092303711269544719828803680436916119091632263364533324661266862974434455516831152632639373435575795104537875888710518410020589958339879959822445451353658029443025792509752253551525308255741984775779270729019138683637750829888081844708006890211552146344622614088468708319389319850769307851285942767252474785352358559267431807815209013706262561029595478897605034763527896789052350336340918526657057958081872287341591904736173950725836194473696707391163580393299902911848791441413850082003693596935427471422729646162077763129389201152696915172964938281148555040979580355711393742641390964747263809506784813646753925737960500015999521599040534422500550634111212967036120707920863177566166569229503234057262633077041307108981897403699595707664375223053442154801646621952674073998016018204114207792322619912823001873411899291943544289433976296710950251614937569204757779765928995747738757818760854802038762304982286305288261345463881107741394409631520373874750233139799838650413255743318875470620818472533845161123753583328874495241216906348859022307736592331867789432771689184631548324581181882547915784645287665908939251778029107639157159289196176127518723121751560070469290085609343869257334092947393223315517614003002467048702184847384690761234900833286623358455281883757151812237381345516686955628191314036123519539678665398336254286303408505084714763392222044018726750547293413234050365413766358316654410953551281819431995257295975108311779909520303889212337450841246936324792672921730951765343962514538205080555856311467242150053436496567701001851431642012883560394627048117888153808553859689392563362831101945847612823435569999360628749362849396263121141428978393706694610773760753498445233988754224335605409426064724465150571453306140168263830877100622522054887364455754048830624591098148199844437954318671983054725473714673721746781284214097106750134651020281137856143339404661336097397401255849460415338500002693898912492847012546892053061780546003055285372933509996259190318553322495887219489025100141803027682285498654701158621266627181173588718688738389808332699617026792423659913858117693296106288197971001919395880629554677187346338125838160292486198360147729979871273120571322032028504575690735750011778046083231651989085708906682400875964848727543577767320694907469192930438894927009743546491436041357955549348300042338360759281377236265892227047663620196806664771980284507347099402902967733697999621184233818138249990684015970535495278317959125975524991795957531505015611136002871680310533093786875108515066706678620823077849432976257275439747172137699295045174649617946011443989552460583705965135899024689374640564101925298778186797415025378969912635036062934209463477387146111182074864014263939109691429255035354418183096283089143643718609144817465350868728368487526110304341902202363658329806583404243426301929038999413811963719928900533075863880385638026377355762024440421846082611952343954020299294254318741900205024128317877368328956627168050002516703106370642969704283772358296461093955291187494644342390316988195849776128675653911509104542124861217280772932996221537953310962029452657975182251689107870392012504852892547316032463597681300089847160255250462914104176616050444245028613939373851574524967337186933259018554428928015559462061881262235852459856089108099770130466183985887436588873773243601088860550229426153384432008657567689985229925644560273502542282381742604579927654137058837459574794972575192961456785170540640531904771432931209781137337286211239818317844041106915878514399961654100374566986719879295231727712111771772229486027185802483882395198074790128622402561348121667919956756920273231028898988580958707002246439749981244065925735360676364733954118132106641155299199544857249592009103053430934913609249297653361487158248749289098935130229734152531034647060511392685477854761239602786254479061019382441139667288410559126176759142054940087896465268370081054931187899275164499441058030518288371926823323313797222058155222896466033422597096415435116962085378815549492184638325958401951721290473197241670371516491881467203347875585007359331254528344449459950467758875267278189820752127439854852566552803870490438503143232653957782922118685816688148722781734903296936610500471173522177161064283024894888579788472305995091180282414062431445897622125893030305492825543169066044111330888912781754024348338736557326750833574402747013630048297404805583748083230530028596408741040030162350741781079342392865246051725408625341045214944667618371021284914091497257188761924767939637028534628334759882175770670772289957481292738316309937728650022513231422234754422579929841855985946451468684350390314845273621075639131390824319325380971724618039332427557919436402942528867210146505840229198062530002639445641553444719681044247172959043190866680070064196331063863914130249071095131248563606711066426848149947420902504927075034868938069205285471610210028557331474791661084008529287736898562988280474609439222101768158060840395982029394044056801641541171538945243610104322534200730204315260865284828953604535787727385628812968114791370986014951254706844185451923929072881468774586758820306110885474794911532141074138864914763733541384283976740191875378571118515523438069807588777000827782446489266182050245346558837361947434377809680600377844482788019840369988901856492040146378437457195604765771763497148753529247674438388594397093126205511452264943420149474713408497012302647389453439359384872233770236640360026013633256865164883566645637992031106481526435623633931034222232355213509370961371765010288817762179693552242379775216656260241135497573014130795564397554787053584387187656853711857623431937857471939579985035081848718829777316272176681052612968630380592713032967004361608181691291430592912818088530249261471767125961629681696763811424116391066373303384993152768280740948118781184558104319987675542498579919858166065158389793255707776743744116436672753184816598112104831674522931550279998771106215597545399479437343520773636597563675211447481439779932609623982600338971268883683768790803057118303171340769493891379059633504014432705976380151918797310743478564409243233539718255459610193420711760557630156927018163410042030919328901263062660290810416055096762283837210531454115711704392214764971534200239720890924410613605239216073127851967270391325506751978212863009614699353698989489629129966825662563519386134716961129383146386288035146250197315211925553022512173302931962094722039477374774504846268505683930350343868458784422880640500784492844169201589431927903016379662303396527872095562568156390966362645360971925681857871968341995483947410283964766743270092620340260322997257237091573993613689320984290367200247030533720027280038417097783212839273035096338938542591727622575162362022599685496500554429222347884038006453190248400027743775341348801335215989938742326080054254247170602001952079080816650302245176710604093355842163642360723052540350943441654273802237051128416322439426475234583967057527446258480482041840231234842602058417412378587528062618463131988655226053150118765238820025342051914431270624521243139110536045516721557341224477691444072542250943379523540914610979701581620559268793412031737790984636977046879757487332724442490312397606565039366925463662967999702808542773925468580692839991293056392310917374429934951347005612307226284322964209030221618750098429366099194983439477136694496857689442264881224914039910670322116288372730289047738573108522450033816672394101565965048622910696973855813020101016596778492150524524163597858951412311844796147364899117621449468760602813472330721658608635506930727103404682194935368589333167590774588214751222713377251630553526943871411102693132298087279434996411605103626921829523837922181308665640485185328298412378683376130991261907022373866335460773339455678784703129263634716537532090282547777127534019418852120934212233684269568396133976431366342292873151938449479967788561358899533463702974267094796359284987637751201598974404152475871775040728557820818028482149140963098586410453529806961657287735738138755712151598174425380024951275335199558910669206209576113284903353418478945780694878129790034895748753362050781539824584920892084749347087235642519520452342493927793799776786136198617469969693126983224168201909587877154725998407004749212713544394340278146389166186340477628969995703328593195001704673717058025352438357468612946242018587325606773986648467186870072551528951891526255461310771157406650956757785133396326012890387635813591423184033135516070805571730845080137132045429491261012978403015641430817512666681469843066257060720964098086648402611312090715751833710679060879766494555066896257649913350023260836668751637428823100349524601403601892419159189925922959275820633937990644299249271169988339019515965180613573895432999894831577608592304848155696364198541694025900829134781366210991417472495148139315405572913400497872095116583163635740301688579861226084476006780263453790933289131487409161550962668826089637489553038837859879843790532691421980575061315224117692153481092599586056471601215629186621130434664996556516932298784329307022398027011414332176083277481254566740985113591763468957331875643736921355329794098131053487627474682120881562550550881428255655602726301461818701211939805917586146895437388795911816068375606614039394049767168461259001949273538210144048916666534903327280258028482616623798309398413700586176634115625829647911232227507375334923375588614078459209835676422299267049663923396700676273951091983057302624288416865668362779855525365118686744053391254580621393591196711448438077488551738236403307762952589858684493455657463478117126363062783121291423235729455410918637867035685633113782220139687642412165249598360509878714727491849673012334378180463831584187354582895646400179807708658382550667724914138565820039682009987745157792741850123714960764039841065734298623591290702110380779922504349890524389320347890308828719589040376100679017864219311467557598930026491189345663675214233027772264878374490381972865809240289051249348258334250741010764402699448241367513588990261100526633287903176928198197677117933055092254550168988385755711184604062724032969041641602920344983239296376314963817502741923901882100981471281443446703980599875657083621988880973620719138197772524100421922113549246894114245414372112090493791692600291606869049421927806267868540149608572744342888343192125058473363971742076638014712200975997813876869820888826654477230072783335769094726343439363924451093740799160365246814221521418251509165560016088242931176476666040166149409617751387959304000667838298475779617451435521971107542909535756971647840211114967059219572740619358273317825413217697042690085081762346191097822496311788562562031626726216116215298679994354658456828777010935958029126216060917819707341303406969946319555176649237050902062556966761241375058739571292436871898013175671381669805507508696910381959470264039318613075638568464398580077833659887720496385166104378193365458881086843156468468523490854549529450710965680147266392003581831969193933659362316072852675420800357125522249098898054570353965505168107882852864529840652677935931955087124815626428567901773577880059003707684993021595642820310207853594456286754132723969857923337469252202259735727997751116848764487235601899102596111514927141978064206334037406646670461524244267294399389563489619484717324536636445719285643430736881017478756148754273773852289888136125549801175894395271495950395640707601607104562785797592351715554623869028246265577155348990843423689483732331337719099850118433499218006218421240299027208453829439559447186342420117431465432792072288988488740343057267417723708067738577852233243672319230819937439683915440649582059516544561598623280971773789120893086121672269536624083598033868209624720281605641588278852741452020860395156344376951038233934553306218241725396467724828107444994633708693546367123495314361476105770109803860472148239644683473596101653816933207579295804239795231250209707489881769264862491580478053842336543358337010193843107143139943833585292436929169794827683225645488250493758065708204332690153429283252246824483410972045997105029219491200004356064388873493046364077650981091839516620395962650712687713049420813661020164790060026130112716818875580888149422706314230708204130100772098049184062203228041362580051800921206280742731510572822623376036459787961780882292249221002031736456366826421727834687640584814053632480791830200948413810861443283626261692032040972578925220311877455650049930685081104107394628130349553352694618261578823385706710078304466022726537115509158412710129375703385879757237284539292895988728180490390220496139617988669206437315385861127520716472864870732451423836516235084903022716386874198709556735053670824221685660220728278626961642949943462735737024852061880916852346905339456156753923289238892045090888056432159120268216479709411830925161705073727852182241843774144994444796800812422381396128011433956107925125566938292728894518495205656479288798467478295768971565046605743380817683675039276816505508751212423949926029841364819217401250701049413854705548216151519699389827283019852789171293382302732747354572335967904262121679778835809536307205684993347760735860485162352359870983946965085935681532501893160966722375508805057199214927917795853333092263437505359039352967087492413012955087698529172665198805420638824693085516459299213503601188841365820793247308338096862952405825957815923600207308796364681882565126559078649360912095932577475791841991368526488425858095470521872452183848155746479635949126054100759873565047420408657908196467861088860745823440200596937137469726554619440021533471197651802029945746028546114454400341137146234850866902640999835474619226352406181906965593958219260459751945218547186010136586725824330239183847055787095688060314095111184685688138832308190665361771520893357047382326528633906357935617076387165550366027262811769099959556389802647692621844549401990735569529998624105286253926755935055719547875890932694340554447107616689228089562066086569944905859544518038840788528630069102190204691632172591973746465885214629803758001818354722671577554377946458675180639189931170900056297193465314174724380797003889515935304761631926385152267377564862725712122407042606969044731545405432011544768262989326191733481446407893297863327714256422001628622845256022926722039032858852550966980793417370766719350671793803838423609435455646884754065033709502751899071375163169890856762230034353248802768786910964565926739703092124666704198303948460691736963253713870119591703313690617965257847769243951364137415307103859326650169756472734611428216414046385745227023184773573317555077165126936736741629792481292498743205155835997683268172359371347012456091212295887484642867877578646795751622965835785463864395557880638259410281317519825410588466995700288346083450655637106260214808311406178732561340081016232526189760751886271379564740782676263559705973541667456189291443581212424404676011914816089260905831619643542553993402039798670408163878137967461241701829503692199517679672763486035252098113450580438489510602779967538406778194913724886699243032503589895316658938365078639346817966446042366971598315102456226149656515684119923736039138700680083951001771224019777161575827820297993227494571953532246936982900599366416589787251517727463895146269431106027269854190552230633092628014821482309609635823553388474087969696520047538050162437487064672959995402543841470139970706134643073875937981889199695346910796106300932889981171735045657785459463379515938396509980647441968924682241853711106019941292568600206670508573236766497716210397782410983939914467015508129203700417353471801331728912556922317624644415889241609181001149181985321743941473620491460989210711065194784149182976559106558188134333708873913801535240126355571162155611895528080568951526554987444334536731499537753528195430833779794624656681766785270140096283044140898051247012255419499146558168259139756529674323772834587323355629868317816780292113528663119722680719024978280040818470547128362669379424806012577422038887191868631883448040020015452134369307399895551088373207616043579965759272959559449403269879855598910900010706024392636484042799046911831117069348975342142583017574911456602802451624070688915906429274072763654290623835166951367071267497654861627881666298541483065726588427718084629534053816735134742365841971731795029103239286268275708328610899135163422402889934113026131852180686527150505983759002779807773566223011788941689719454712179344607326254690287120395766024482256671418388078554228023784784496201187429256077058990150435615351155216101657438309215090638315321592936537200580321910657657215666815341247654573083731344740394722638474346512544521661792980002338816800181577838361703000507770721899400195844878004251805255464724701063911083619487594713834381627924257067711581105282570735802353540652641183829634997288735297250112282208477996416073074851093528870765045321232820222921439911099170191434612580973635919820391541809473112124075733876951153040686421981760730940392248786343513079856829965044538757787037942418740284997136502228750221662928279924265870962201635314064803827203966095428887928130337192039410759247169242739168498523247197273121591784250520458251462557288339313896397732661534729027052493515404201580059981956608905079272892706164790429218771081619749768508639849339364643058661360212160610191272076371006352322980097730083536900596908930188252920677441148336565335213544052062940677350237569694340838070570449158815512736492862139779132213211843388066176862669989419112198876291824452684702959605871999341982491423024679580081630979799600019718579349756991631102855467872079017699044841433689138792070082691245858860091100747333527615921285623074522312582760989162946865573374037829302178739225575289042659045727978291390647109321424303936944279972788242891964130377157310772605953533486292992603361085012572105175885943335595705321341456889458117518989992036681091968371021602143621382567898278967201088486661538826229576844449884230327889089656416829054301277201456616051237734474662164978054102538036494621644430726212087953103526033051131027386921359383088225533719150606934884972757665515341103897402690521343519506346008077717938429482549626794547576980199283223676534407717065157853712801659521185640516453515871565192484321804442962765733972699330046829989406888341627015358639514826801677079021155478293962619923778866000228101968771938334162366469804573202014667190358534377215482330962923275262634963671825984637003914633619143396330500521755888969843386922843589872134400996113166528653861650963770197465796117647298541079103250256973646631652580593033941058305941438443670583302078961092385000096028004387250797639227058729182855207638716095753795885220489180587608501087576665670950961102068748473102397688480068745397125317899151900803171836227422289946173194639475472087332607221032204172993718739866807063991965434685529724874290316386815414750536825089647609755324478912829208542640630837182428790314967707466436030120046677693513719304754091874591925748831794738661935209325972784637836372417065832634101495661541702552237720067651495419730409007777535110394473910436455762333458257497687020560780560125766474028996604483310845299656108458520836187635944075062965164082259016665860024741824447869072154938884824126520956717610359345956570059031363334002503160837760160190522749970822199550294007333039256459130986258366814988498652039570467430857270936255566922917138875176546035640770701881537448577626102002317298447304080275355918518719943682484835725447927289531637629163866387981244986227932821777092957191598008618007108755043196577493390795743913791435300045489842318803840629056604453508622889454329052961581308249435966212373719648882667006349214657094779879673766929203239990406226893937690672818422017388165317029813987140416820890222156353954178254095413385973580442456560445558499420284582912636669611387427404451225546415356155838383066957787260635657953616728518750757252485659572480629089199805995107320554322842323926689320663451184520268687258689886344606068388694479162354509096941490038433598847203104301976611951445601852362544266638679678290075412941302729162013553313728522646010957992606699109069616544863135068561276755095781547242671190932783722064505309964908887877840158912914910105346231151775487613772792899879678519963830591786250997836698271218528501056595898076691114631296567610559849673121473718916782416581126344147631655121086933981180869415987776601838722614534041581254100451763340221780549086746753938766610289735053241990894606197687789239665605165716452187952517064149162738755920000811374455502914943892262459729586085538415828908694331245193074260696566568387741004970586046250406779678496790295648201386486985620162529677519187045200318621917855086482423481330608007219543743506802384438536607353392218691697424857241893460152387618386782325153321432760552484142145781862136735387766492081605376589501268788700420050453317070218115339201229440765302660291694287227700950440380765107112761096963572158992801291875003909086676778623232366690994533299491222168137364267573039455654289904047646814229327801683590630142563153751747079457858925522910205111288353935603204598220411265610249301465496049605100661153637159888807908902323782288115917266030548928229073591717694655741521631460966838791102199409138425309485441867582737071365301751525547942825571779776968661573074132570848279551828767121886018701878619280272422103259889312657193875315049837541388659071098765055026282156387486107899591956053135772784100496825157507016394803644582281562465844931202245768097460360009083034532364442320183540873202417639221501463884395812838717474792815470457888288508076821945174144028105860328866061726727674515030087857289847427613927570162848467465868388369591904690837471560863827694337872032073339132310877824074716599328692954368440290176778939622098606562704309952427724800739407743083724696349092602202149637692306858199125713600548864386864010917928499351492615039593355117890366131905372145092198636688161883816483303851872238717415106454350355132051773548989777552757443255371566372474534435441848412809716879074979241665690375961387244267989469704939164542096816857631992943353367922943450974577981735513285980794037989658748077626750133198955052583318759656463244526191339847597578899938757558196148864075073244250467261088756301070340776077937405119970413498591233848696140017565253179511771575795275131945857256304538740165986955527162558693404651982237870681250364694679537863190584566503257017428760056979496904352580609209111103053294614675377385059624280899965796306324467850909780831489026318753391745970785291441580820547774726329434556660527022852038096530229629083381153469692319673185432212788337117250065774907249107252485740348419082835779774814914168825271376969001094340761377648487418731698243293622743693716904170881810872101742928109037100000977309557903344136643273367808231025012640831073700517532261466072965558652756539975841935786806116867047742157426598876286995997384905698693761028030005126905217313490141907445119240485586174004947125072513293761190201760157186724092851713785477603552145995848354307689575140731563893520272232436224697297570996577403366115446408204985059861276880231146593632332116664047060124406837360322379955207563026996917043872020612169132773506149751543096030902910862068818208029741138639192386867608762741997860087946363183791825619263211533747157596191757134157369834295405013020010499759058170439698811648143980733751968237686573164454534211394206136959587926718539689642312494935570859665860568612537475919659068040072420100618936747953737753705749383127291409003383837688855841053309435892404414955527379658360309647135313289366129538476897703162917189354281206164435348255552192776966124707287270272355902245433955885751207009741227994192134495378305063561634794407295832195458144059625112222238732508215922805408792621363851812950739715101715283572373388069309775291979566994423956314498349376967149231461962778062765502443563061034611737001968423504862603967799669087117588804859019639157112753414649335925988454052986607957770870482923146856099244325494894435569370404603972409346620158075409396512099348903782562196646067345376443663877635728814318418090231549113721533373625163581574526840997161673119389664334579356556456354401159515864788956168788481450985197215201467974181561001940631241149619657961920795580250374263473722428593232378725810430245637202518132904531251551627240821059617789024316527079137041828262423203999027718050493278416463558083739015666535614730630528564883352138943172947828201962484672894006650945217851258824311228840838756059704734974004156889921429014908926432337401389537678225680966329782263719847506238362967059541391051250329777158461686302483375117714795942380458251770588312881492313634727768589869682161697321291504228940601873619348996292388777724630285389255078462577634963779959329989151426153404562174906613363783607243267517210079578320766293154362152207280832251485579899573303194771526628078798007578233062417352061348072159821545393566054519332770028296707118564344742106657936278687268732675617734737178056510690046607762220209746122648008510436643666435541902320142352415694782992027493364828745928747851672282706320889132159909846882540327746849007379809382050344297894224907120550708900023237802233950487712523780018161507312354618054223609497536035163494093928091032767640336242711088275287685948003533785270118743240118979225026796544540327468208658559416238357927216565224536669218251472645443651889081645564816245005362169954201386198950135410692688457725430323102706392241999820836165265276591679465060858160505568568712438796347024605304900308450966553605733042168429732916370172195896437974642297090857585959129744911909686268599809774528624601994610190665878857027337811884181381233078873788158373359983366672234669655911799888726805731249876450737363254821569278028649052801255401131062341913855820271583117070719273865683054999663069013111249121297160457447041240423061246140642426490959698720730873511722072350750404737742430572024048268685119133667530568425561907620950064557291163632179554525056907363270277399640559645834440273363853661188000047234146519397763559239145260412600704968936012028106894549688440479900267973574869188916898200795990111065008878815333729179214937996646495852784883698591027255166736443038004395574418572899294370967551529143179055369802934328561669594406191593608936964899070486635648836640763029576597160034720166645043990534279613912479497024231544925793613084992394121484803964852738532840786244112636713504212176390740168740010064318423771759800182571206639184134636335947786714976994584189825206727396176883875524645479643946415113644023798932248203117158653341801005086972304051184189910711151723320637594773150678911124405222765005192822545537671036184314807662167004590802562833162356684840697492521011525880952899271472039977820122616771265024357322419282091459744940443106332422973501916691938329374288973886386034592918524051364182398592764975688780001997803671401869838010577270717330444418407603271989346719916686888680593245148354943447462721033986270080485900155124951082963992792987842114837857821508811758170325737210523836242819698681325151023148163454095321894993683800138795128096101389801313982043237028325779746911915430218574372464407978667515942327600656822134915485630059582718562671520698991302473350312566427091102259532338314893989689756822401425548363478786325343080669902177859287335109626530228527804055908960006937280662896796945405843803882948848124047942281965182397536936457929889578255794210593948378679524919234465908033421164868438416051929819069131125432441300566879775210550054157419483806784214653243093753518480506741715472803332755990227351462034161722520909347730060870649660727422118067613395865270827693082504392270738618254811116949038529595723094576904555387646766194045214126185045174967881222625225420294995105078164391170749628652025184869718810057932904459780474128600044356721564987537843310493494303165385746459512014483412377153293124606805820556680644340261399666836315845102022850213187298338640077707077917127911385849411484173150612304233608674207467083445888214784873006838124326048603420520398039994672066938235732542051375164474479235433550682373983123832947238416282024613236150041949833072908669815550674617589673248615861702017780769184080195436695753443836861503161723295315725658560497271219460777837509040504799004521018029935893811387189517865310399566336628995254428616900954602946642481835104052723177763215261081807631624720322398654828944688261281379543513838399159096503176110145561673340859375841223007298962049354231684731456119013370627451653372101952784150843366485718683154707759266001380413461198030059470241851889381598790912932175523398760753164627792920260871619044331651516812323419790246774100510382849642369445921137356415332559100571402192386504324237600586223716858020906861290616574468722975254000616033200134525382789948233703766721713913420053378522189534440356774167756989838340371683053339160303712468122195094451323769643603060107933336317574884600660754013122975875644836292687447653875456366671633406699749727233770775602930171119873713327502029649301339157436902586985805804661850651842865010512710599579744907900725568864758808468315496153957143231085273655909832339900927873362328571917762632399121621719422136842073993822309314300099352877919729663183063706089857543103711226019781257589533875565388292807852373328379571498654743595708116126805997489585227762613411374287400898540454081729983600454020975504859445623078574230082737441934713309411334435977095406278491948107490251001075326160260816166141665828764940536675366409103075438140950942363295087616474038594568300076749067398262609892149434246290522082284867369996747369036618212558758764999033240531377456820933035653514739288807506785309262157018155354164246038618753605910751171596544451629138375154996561231768056352944122861796274432731602355764359001440423701221314110232709724507824830537580539309136187075390125804621374052404104186962215577145031687226391307500214048177954438873320863455884008371509806523844996560156955171721235083443685969318160004631899389556155154887502954567874337030723431693153231859698126685897895105095148228879264170688790144046095670747756454596689425959992788755978477536636909986217025002679023725302120269168121827137745844016745136986531559713305374725826662884442853078675832269357444922580319812405402267749674742781956841448786497782251691834976002692470785895021703704858388868515265760165621177267080605919982230358195653707487049616510340265334858744325169430110779016508192911580225932171227930158137898121057272065802163804143176177861748042060613560746270301387882517734888125466322091023046199189071897531864764481596203251883661383342557380251629906535720631765398761130171689454545284542849138949012752571883712193005628020569517371873637657312815325305329151583778151502917902733190305271744684958622121010306471264222608732792916887491000707158866999254047913786054611810141366817747429490945735777114365311619138196776056638249387208249599690279274158972264263533482913699417066232424301052566108557105882321860415953995261011470246610385777123349945013365720795738329033328267790338461440694253915947579607200765511873466671258279119860920470033646635678259287228565899281046026195224102321794080074560857019502214981683804045378001236533286039783959384004974440166902266486137702679291194779601542349226685477920055280270194687371379891364308309741325341794454848006333434887621180433722346253849620431677039433650809755697980501277777113845268685091187424823340812151151597036955214920274705302810590187488774145471376334439641472564400585203279952036644952915857362994275837591364735007137899752917263254850243740999519067606448557348572716000678300808919766778877206053237007230414810898261174192999230284869838903138569158526989803738366062311867394482801934669491046627645436363276196627877141926295125717141746847349260139498229621952941926164899210479487462540920845674239802557539445478424605466878288948565437238163965174286067026364536764787585857086934460845630429301475483163588819083876568053843919529815202317165149427461863268394120150501380274794164226549074722497966714770269857429653319371853947557581888330894630187929986442821810999712432279880515190220225825103925627914262396261528127570244033580516736900703944157759769468332776781478170997801067263584947564578699956407063202560483281763769954234650000264770866320237533750709170825618178829121555348484981912976077434644897683103996518259302203185739168355670343119920701453229307854524542846194775780342354148147108371829689841186079764946697999961540609342917861302618236089580266302442813911419612144783451058076754515595931540231562270809029227064151150119300956423560999465999653837045524948746983692965835699733590149297182040483811117450935081926236794221159650071490425720958495747811724299488339537170111127932294679341722267132041146536871343639598304001759956917134651127380387343487435851780856522271135939193895628494326974660699269244961652914573600667083355775273620390457210060853612580746188269631693582473145445281407145308991224674238036221680829298174220621860798197137043727200723464659535963188623974496505669454742056367794214902540739842325758539378897401139581409478646694538433617227363033864822552034428500528123827744206093078356383899501146590774355751444444996321829960061275708179358728977432374068967803416414619266061210292307970707626315000351235693107429383685067164757433404492504794750614444438344268104672144761836840853236978233062403887482344558895359341454623603202631096561293380806547311399902028110050717415339231618537126224678146138703245509801626065686426890214790932004293128602116907695945906954418031458955572518471438409956497985277462584714340876550751083482988783963757153324906662143577507370210340928704211200056560771784033654183722097707039082998185723278388513255915407843806226096942825934133693270436473297298053131414410673096167498440524501223865224580163159731941779290670475905774711449587324396052040903560867749633607269786383362511207050385233066787151038662750888189396417820848864094163550696516989046092304161178546471108800040333177562861096097669402728598019472317127433242097596374209926949769666919449022650020469268773013778291584111777734801678122336199306707466885245484440238800072649836711310342917062136424156843313918053232383983078468123706545170731937525394324743353102231318881796761219340335058271096924509959581007125101692341639032718526132731465816895432810824251550267187134476525004805214087356728063163982776436973281937480367061490759085981747339946738833819701910602521740453589700326016152713271589647731441404281010739627169860256321696918143984628976348066263640404724742103943068890300262217919407490294185056643193778672788621514872444857040570417491743083668801820211916799180279149123365031855739327527333088498161734020418254440569737292101091210357772958736197407944977294083500388828156900799618885648926774368028577963627085062949536784319273455247935719907179765485929514896555210085742609479677331538755145823312735881427161972974752998566400151194369472948682330746237551435896015230533986496331433897402923227963168267620139539062424101002664413774030587496049713880031234957424411170400692461605233008783471512801605298659812776385852174133626209981186918938358345653057146829280758503052663152684412143145572569203330345681676854169401128235623310323455220016266200412727026684927816836926266791942439320137398200185642991418955464718939675339859727226028984577768619596135554459532721055935991298244358265061294663738057242475692460861527669477565237601695691691877575077509877316632375206719112645395824232996123929118615660776830180353162751919847202804452994454045882395557025233387374545070083797953533868365884599308144877121224106120864464121937933917213846371733319958318928844743660588628753216510072394367819660276153579065026923320200465135622260332133326790916912968206896304595976989601528304064458567050884821874068569327242388967568172502936668476374070466511317019575209348088040354641188892289787348206240433877593443377351012788990782745082720418094253843066182615519009334935552955266684858475485494938494967552976557793389120050509603720244080853334662123762719793723288604484467147679471941170534997419483368784944658587229478672681938138968282221403428105437551913127361355898698289624008368882129842599996702944503383544658955991070462640172667935141602759653551368815776369942044583995137647829628663131001221231534965839399461463026651772976511526811468953158755101980388687271069507127424565908828648868313976235679953426838583195080029733092861157150407331246858177025938607115915623640069410010572713698395553642613995001507855911638582456822041072917198751686674415946936002316231579585375014210379780938502025242931562025826376153063786386677390155167472847163910141829719442198145128316851168493735526463730798576431768575701484236408740789352058681668788075735862455978596131420928977008662021317085139495607926794154839643638696960646064044825882368579418247614851405354060662705787252435746949859486068833695557311397454945200620586897382572493191047700347322661176946901552848619336843851237375520485128070259328150932433696874607136164590619330725124114051944408510453107152694912451523749776692224397142477111739160271001055661493257893822390736623648614862400268263497424561751004005831896928283068703198441436303294281620983292409389164251515600756093175861284494043497224235994824226709698917461917863787094372023594255212399834252267422936777442893986231106470680422080051493723415218391429320112757538538152722308570014027075530844822501991820874404857371262082276060042328948543302599518455335980198371870313013246335949291371848114991467063678242040592349751000085649630969728832751513083136617133164475700823575348532001183443076306074233894249336445788755808856138636225218959783400429992989436381421511961005832721133631275549113641226868484408007284898058005197058362236770869886182300061523332360237274414046733500673667538411330822614792668451105454556192218178234854687567453892043600237068992115945877699734273688549462432595826857808760858752097166448743979126536642225144766853882164897991219139703135886522295432375281686953025665774373025556138491930286406006798907600465458206946206559399603295541764326024991786904949110480071204024813493511561562807263177679249625023722645669629485182963500555510003335448887796367378236138310691157566684115092107052582867873880273394459968866636536467871590867185180009580075210563577153824342282110770314631151974145511413151112232582017775144045997964536000603811954043472225003066247455557263394762082853850116658090037261991247692211882538771190182621125886615683314903791497925118251236601408921425321372440272474308166026376566103285492314773620130839791355348313991833920577761293186161487443714546368334266843700926550269914013363603933096481736261401808646916666943053625645047277738712426916089523675260346358278950869126866196618323149946519669426092399385520071822088538968327620951347854373933736478358464833341988758379440954439546160099695643379929492941368487698245794174994884303415895408845403336262531882986477376183597159377008643623592744228955744851179963996057437998203792488734880620325546390780235577360282627691738879284350348303931706658969021190228577090613214548879403331887319146436620250981113501638403068994314100847127956423998146619152481508119331358228736762915421760355153676599027887866998088313007968660592865811707769576845589411213031205772873869932186264820028102066026067911651743403664004162278364920630216801991357759335718017897355535376875992900410463543711577972110530813339952464979263630750562505388948802268679332820101592290211794529137334659869207531837711768969445037532706728557894994806768360107989358484976663557718022193801196136210942917405780671537338138341560189293146145018854550800490363261289124650531215691866178661123946688832836387910091158318626391704067701909442417173700506691173895530421379380710863913241518828902128499464067152291584149084550831801244343608041746464087808753602870085445324097573012361069010422206760722613567966626449015641' ) ; +test( macro , '-51676101935731' , '5678' , '114598568890558892351277519655251349170512457301108169122918046980237508383487307624081510756564677550336178477302154205298849988621620086922824241203952845169587118918761676702275886803533985126048599159621880798222780212304246817740927997329598603522333259993676023070883723250177300932925278631685866750044996349161018487418710787156824698743699059007370890842841419231416436426583294134280327799008795618556337681789763639042135318458712688112601941846586049438371804926113126508996078777819094310659599757182791807946793330068376689258887811689995072195331087218152210579989587318167100041773383622122477291943850218476496927044272842237554951357422835645664516760841149829622887677523325405719345978782256416220091760753375551941881093250856520343277787117543740369641738849743550250267305042707228709682744788048246753481687183391246480490101912653586013524077299683599506874945043746289984496657526568247754108757916023746860823651106704947454023630829841108532968959604789557821034558282678387782274892400435740522133769190575725840235412871894976415960900858952703549298673487135436478720837173606603965003749202465844411925396601850697464037386444381718980799446621464654550821206321596000370929647608427450678602369409467488634567676260749990886237210425012278562172533337907188794399372225626872733254924000975445679212294865582779159284739536067574648674948637306603357526281158214867606477582551408107503527328338793768794019922917887582376894908153461450324195019808790951956266885107461973925559489970262966079308484289377245650607102408136209843678657317031621605407118233165024507780188477008776626376774732469991901945525053633560386998290497433245057356518070213620275700745654781100039839338506451450577013486892471483552928409289830016271158248107951963293890564868178813169793288638609421552999187733984144553406615257602536512368045676140620190929856992488533649322354718067519310329366233012095782513367770623099210385145306068882019668219811962909945944938303357412007436455159207921731034641005985972731076872404481351411053559046816512985501762256787820371273853296301441525251524961854980951466415757745095790408750111233498938399843328976884101167576106332111369898329073992906185716431137905217592404057225277504661400556077285374257237710751164948498254228336520906926692000699164318088485138209956632046211769172737818805518350576876409911238994857621609965737246540747228915599832803850235006646505920161663461782710578007459880127628658300436718162035702759857413264686037450843066618529962777161180564480610570194083990996868348589497339967832525631952114004244381394862686005465286457021469621822619867151692227701982207711240403754089139160258204655040380941387512320543125847873280531581254727837191059980870831091122923417959861596435814654220789276907248261882603123131749272763005899889970210586720440187361168097472073369327028087807891921073775186041480435653913681928394558065224090076679384591070891307475995293653429635959202548503686994214508788450093243004124213718944072946348546273490462900925735733454594192759136002496877104912413694566063277128709834235803795521599955020375102449787917179385948650401410782450535088196592336719230363010532216782360997264383385827672744353408971592600267691136637128647179666091641390767353626655629610767925329336924814212570169908132079298822259312790776336192539171954812142459076936946385158760440753962659197081868092892356974717649297318187816581273710002222637822422625907248946609177471022616696078166962638903351786881559353388016022793559059422611570772104441502159519678683680896440534678482697361220573057326321241467487140124612227021769519132788278891261578500937493023431494800715316974572061757711388338850673314696559686053949631600706217179936149359062760652855148968218517603478406764660079773518392515740066557654365463358812116383920109518376511927056859803872276659655935142427958378419267026204993883734671725916631060714088945987606306190400841739343960163767980632636951807150346899488246361701225858275512527213850024197265932454942520600005445974264278700061722886358112352180245501375011619481895903494024525948428278732709789878138429844599672738323876521649110855277792436882821166942741738868002576408435397753753580116182952236210916267829966145925028378437875898705477022525397608430772386789943421906088726337517286361167325374608638664447743003669920203279685500192102212678244500280945163720924806258942015670529098264965727843346426114488713290334508104318728502382771728945872501553223396187212916235118458655838036585541800475260873636577479118287025217430116350907433315459696137904514955307303089701947453368286386613774098275500676250943657017383834720061347722825211956235385743059349300184053076658159489552304525616565099968774334572359425467321345729237028949216589829910496148348266399952259506966453084807497614865786568010359718381755280552030450357482091573325492727231276923993244258612115652943501643076670607096916922788985244717748167425031600866371091539018747314619844176434458885344303041217826099156483212620631712885522804065144269853819342281878739269471469710167419263261298426536005724710899328976253518828717132656525336398408521558604682092666618949049723934689800847063844761671282296978918952554214898709123610631472079549040944065036271515445762211638184670207178784047672153843595557392899022269520772862968918684932700339559357972321385437515253951979000296108897236060608128673387896445773358382692008138068938089087965375939805087660261553154170365883140110004255362850999174312472258828659845801114248663995523535651080385407122403810220614699534394862199070170516370529573724426277383249873364882798357333666601674798052228774948816335992020369901620508453181317972153011582161807177844672456985443467954652113777013601630746866436183732233279064589871750135148960495813527709288884229866780850817394534670003825516127760071436525331020214654659944097612888206044199184355427079633744822550780458499778237357353947422296038656940932241020563615278249555508480330508674120678052089502789507188213274173100770916834969313508824784364056056402134407244119638598785990062688861144654163575302227468770905464187883181134822725915136640612107272892247282302709032318098895359710245013039285473099721463792717954735326941637258027020359449474131956608190956922971406645107469617185652049606430376373658432400056414731724407005001708692411063413271177513212657905468790370163043951258130982778875673922295809518571866979572550249035569072335930443175450876647946083312614092963535991789686984682545283358632371449413497269427928750522476008103850277182197862744717478903974777451339726925492684847344667201465331748104805481572363883196797787778153950751138898727728375184289353676704124928349416752637531102490310279351764714073405197836749014690395282266606472002997382187295402889448513435174099451342568509159453242120888320839737697049616714431772174331671258229322246266889685257316038839337528724509464509575560371587287218382144584572419703181295877602278221106570930586664027065311454892200273818659381311150404756262029418161040565111664447264252108585981706307591881047374954123445586938599411011096620619274323216164888259706949545584064116931697419880810232135950719390350713062967911958144149654637677624682217905237402682589189689936992002791828405957862158911334297099480655817390013698092780805866900709190383307511190456176470564094830491741371514412781382471608566016857542175626271815830825751173841300134557318244910059728166314923856198690466209098544666893459074761870150034083238014245526074209050076925214228138545561830243367680472907455390358950492305796631316420731434125187536810546887612854361525903826549660077385607201642040850831267699276814362171286190066768458981549632902853741404667094999899553250446338548089645534133891269993883172431804704263925215719942166060373843805638153594804487097561950457231382850176704556278355177741960834256932103041468108431421024565688930277277827204256767781041934083737995080790793709338041932760953129953324240749245316117068345243350389721646548464456799564122538803508302280206449283869830911336778221946967418555187670963441198271217790496259964780654563445592505556519078267175564184094236772289072470230033320640614537275025449633888698376301092731992965463666856043698716302806693885087426713749261988769556429463390046244837567904659070225420983410009710978888428520162826187731324371494738964988237894717677430862117281326863913479208553025891950712021033737482821762882285969238709814995624715621242460823465809517565513365312665098952226387532971101201851401611211767107556328808562154195909528062579532668678860849786353548436978596941540803973584469644923040177756384343881496136104278613378924581962143710807219315022833887527431763513942927784402594506818541221504288809623165972198540933669494785758163834650407164355749575134198337788610507044159766150241794499149571096051559220223878817602912552525929282957515181558545301005606558272154807998739024160863626434649314036466134847629318039975100093407373104577388406981878656175843258194717523909092875616040477453623785051493436611595002796440848161148666254022016142475461311658387441335732482745839024940608008050016971556249565896984096952364713943123112125591933258703693851493005494192677788993225349131525711396145903045479052901233399936977821783416065979989065328839546014013831203847910851373499087681269273873808794681827032455802487324933071462267161585550348497079770547563318071210788547323150873537668915925365865275006606032948938992420253484030285899801624037645490546643734003092212092762896778094831579400704783040331797648705647138803684988666221643282949518185294231209149700862655885675685742587977247470742881671606128975518282142621174602709267031158360580359120233235473997243785917055987801766020914435512416873713285800875063783960692674329948345063193713090346106430960233900220471049512359484540660252000207287048940904649627356855235310748631701290142334022573624657571685050543054539462593343925120666965564304346218619573761401243630815566172421336337019044921825132743027076074431860266381081919439461501518228192067428154599552061956522454587058878725629423271121973055948964177586675025613775553459402756099732937841164187693906160490012428728615553281749083877569856034002578003805619108603440019554292851568931421048023066958052204343883372931130679073105823557408875100214126784759475874110505599354169570696609784560599958215019928598013718187402289676120592754363058386217976480889644579627120147953445090187876503616327911008391800184735093377883625195033462470489375923507822652512086242908850264792687042789386655227831819214938281104644932640292609019834942621395608142214243559409841197661527772521605594271433534022197568992584336382425215293816118135415822763659169694051345319875623274091939751368133997813845916207449451701850545644437368283792955041875417825002650183812267921554071554148141810545261132326348765749042696757503149872630966032411848943742788719959766685423336348908720532382273782455044811025224688005258724128117375301877446615463103917254847301569577217661986908844517236064250159012321706048888909681124601158873187553237768719599661206118675972473809098983711387501122615038573963236084013215429847727184258992906237874964751406104681742937670985077393504140518585378445945934961441800684055554038233956351167210957484786967705794592308352175762541752214854817124986107384580167149061884866946918670005168162259392927744148326558953622056499756057865517495516987090419182627739373939985152189775038553115538646471075934221909696916621433427020321907211290750366847722032569885358324304825748519823761695735069483610277833391784268305687555417321060681254063601376044472764727209479821068239831947119222642427588604524821548797463869612449236554848366936415329635310834448639523331032214535561193061625240491292472959421415693842751590387163835477828542899873873355067539845115993799752754206275423338217062076744831694087595991582736550683224860678822779524670167708708091493709146151122212285091313848566637581973054913102622054948327816252692080182215324465447499805634653027067312991605368041127365270645100770232874469104024167016075695806268258050422993127312933128697504418653934394765893583568834878949604860449521880438659616802122657499696711371950669696088698654540203231615696906652300496120780993861295366389568887602126999373711575248980111463126737434199999923186123228140458802135764964497499211839068795147064258579583962890520656631190772155927073711649314137404718303647113380977808317817846980386481066453326264620161085488324738434460460038866634635020866393862469381723564361661779993116516911788408702482058657042742027085322886734485737469665890653383965527251028179320635401480247183169549776451102905415564180956069929150480364980253864993561144620337603341026450280648329108363155941423746477676441226330763778143302558927254074511454873470596647216773968167693426794670205504808306963783432036244979681725783341795616208450760202661124160076951242290485270351100016293179519729579532961953093883990623843703845911016699084294413469034800124849706899721051849479889146370628964206263232509984714695180238067877770898591308982070720120248367443358203058594410980465031081259361282748294276045466637842578800793537425693971319078319720309483472991281827652766395632559627448449322724455935973458554816112349560437316476772468508305512367513982203113683319867051472957794682903830326933115041030819168485955295547194534592544854770444190167625774242882339856600323988117721872329621119307065210242378471925603855682602511342933926964022027574473668074767250277614350240898114804833628233917590283331643902799593247663848733995782588708639967040765878261594144333897235212151312166170400673009191876880782817897642797305674083214304116001846541558880139343876729547122660589815784784823845573389037426438950965231475933765920983976255357185318394294462939870923725191627253724661104724674152692069584822984507668895796308777450228162744501914688617738288423774855905509153854844523303840957562160021954437904572106375782764718235463296636952021626993854683250625366396838736958893686683145675963239492023700157535671554883718959215653559018684790556050406047348053882167970909777535677010769091602244371438842557331819164644414366880048931933080199464775719509620992644091954275270680288884109813652088838217429569522796724565190899510248605280475710488565214118916127660760240741412774854958523464875335791354333554221114105991785983393823020076734058183927249261932463022507518378417531613595367008713063568456526553921055526758039628801741635831559596552015920057728581873824235567176123583511244661921620535917294970250780006254560913313662765305807933366774232072453360650960008438817118037078045098657774617616105096015011390156583453754385678396291801322575711617682706241038506687001234836301806498523163010650449912433471614658213754184557683081702691883198005157762869533426985772871548066409461102566074482585186196172527568428897050456306066648582770036459460511184764057517774896339386592062506459252579461592560474665528416239792702809524368229823156443879848127098290936890568640344899841675398255520835326531345996368545121081712559676548972073976307843066272299578779899750067849171423314509815187548244077378329796193933542997364333804995452518983295374300579841041477430234285996531274115737469223410436044734098218596575261885585549688086844423068789246324166549747789727265524050455962780001580710226770900533745079189013929659478693513587745539578848213377469358275467176678200951122297705749503306698574297410712427125825591862363276134686251235055301972061105661224639007183964902695034424436437936253659197166818614429825626676264111882581783852335169138950280191270126993381055654149481441296522956835357856587690439122868336488948939918429473181311497573245935858058048846043815567877289011167331444931953925754671240134069623866836792786186011879777990158691547401988209088233436138946304596662211246080716963940999419458347032733075551690030530582476791228961785738428344668271954394260631144673445131619681560910288236163257493867850591921101601774216283724826035337528992934585854238509545972201306935022486046021526186153884783616668536070352766884410433501411997774544944294529752318683967218547747054919125920723787453768874396140732374376069661038491913390225584336932342777315761255948878551294079902768864779706744004767497971699010857817837320331732586562556917485670513125539936647354410777628785488698349835379591475098154799827267570479952391820096174179651670850574284042676840011853046780858800494312309921469703542619592726263073590976462669364922795234207666005686292826903212848877481605826947453296687451059719061958356539720636942722901955175023641714596609837815361932183405821894237560762724700527878714340752426908901818205438166928697623647899633610409766731686872645318577714032460894835086863906305213902132263709453953046543560314104677422693777305934218298526734878837051106284119542143667788585456657142746665427084921846682769309335227479860142774263718482271045462438363768361342074577613689416306245388036366588228918750297891553343601271116018104061166106299788463499404576467234680999408128685491495431444663757432415240164158488210900819745907723117930120695685024585064625587827493034169505631321361629073305032453650015121172416455507667013522455054423012824659556913170191784272134013229862167933357870440372597009868509136667331096909772244774497523425649971713882182557907497459362685468864499900443106554956344003403877683026526745408126870149084364211072799881433860076306106247851979718211066568293397639539451283955573658564108776175764110532523449193170074167594375276229899521780717952518583208904105756371686598266057406647087463129407379439591678526118563375375353708424759178126712588851088358543556455828259242229752207982655534691287505400579846562914613465114055818872346386918363454946173595045963724905520868541270473697264250446046089642748190999453356935960747546554692305385529475044104740895111094053981210797991140570926872891670773814468169522981197767273686316613791050298552624472953601064874491619431515581298483094974434200152544999972253615705670333910064258013397051190672327809649449512231521002044431168670777665701194943318920142732683570462533039523306263620225871545457775764770604929953997570625951936899909518438534435970611071611463871839879758260799824991623563429811928499039440771973070864273967278618870976632376075488071575461144561219935848976261991995743418626824010282377472581361028454622921441883252823380473535980635040675347266665813701114359254871281962513087998501938848746260785427396775049514168562612073137570353309933421182587431285208099490235882059772793358564991437202016800963518589761455026124188003465061263343783842908952238749299315855490241309786950824004062760976904187502795945035840704763791629996479207882802190639214588281672075545825412562820832491492193486742631064101780835395570244051743402738881730159768458032350492340983945389655058528481715594070179000970782625156057915320413986266019990172337946416918557063800133747641604183437713060443142402624891881249459030992935793527950409840201343706778667031036382270368309922120727685173156943536928765918297523291556499898745165164935596868942828843358938043957961029987646769997740718353298902113509786945580718208991358463177836638025806577481206139581029605232343390118748079783839195843230044920030000293609262840245610181309358224141510030238251805707053062432073731984040628183721390347726139606685474826304883630174052769377584217789247910727483325946473633314792666461326212634921565119552168762472730204002086252124424937891781185484626212876955436221477165360031020231430386214870054108295007899715254119071513260472470230202533983791307938408960011206611455326096801350655243853398472597807466586200601253211741913149771316966742972424796953362829778527691461619646698652901365907319538496395153314189223850326377266970571724729299225616643375250610943592593231827466075999846471798767809815413033084807935411432143738782707086800700249890892016781300755462774204025643372850935993536835930431474211275360661334909180169369108705004893833932685971810039967903674985151600881858004723253102936206563045825118090129751111068119272073957023228117535946104197559484455044224813743551400684035958704844910240433782794543523046179137502988175588334343929604010655262873143788409800103840149709367769678272389350632655653061526909944375166865821226676124073718040169866120459345622225584107723626981527594409083885799002170436455111357966813110193233521883524236223930189338177788877617266977925443568413998134839137304794431773484057275907471161083605792371548269896511232018878269590877998951467990708359705970388117405757636229559483770009754679879169950634139569036627493168743252032958240435946744381139249473095508589299567208080597578309780705860706366590038525752672682617991285144702659613402563158938705017883355247903759797019472262560188954212310667319942679244018502332473572330860141285275142567616352011441717389434820775671752035498192835097210704346762871785843394366619830754655068315068021943501597109761283722605580646118265029950836645428880355482809418017207519930746525482467660956501946286248673803148678778320154527985484392151772657071003568822396992334569447439518931797472794360893625913323930637936123592307936959744134660419379541520223856359015281561124867120268443532762202836358157067397969523277941814805842994278790015196862449348685333746940835406048087120468705315737810814851006986239662973395622981892417635797361552255577200093154926399160041205233526050099942113585424767102462092543693848903032320176365611859456909911464662553394222492702361972492589328743134628042819438985147526265136537852840491772207661691558509954371067469519662258250666590165226871146827599529979187274127942586949484821499948977145043677342942737229631023377843981185400933835831423767351371476191843662990866109519730716132126804072070640870780628344547744782396291260010070383315973397408134147633405837121702299828479485082965001168058308660534087429710071643832112134185681191355797031035640660674171124608581811772720944526748929882880981531600483484334329258782080131950152990379792064594496526209604646130807483497903997981366660814109367081501493013317987778423970445235345262451162417303194219408843842138074967028470582769901836866713822445861935378961772248421345450181825317803057793865331808243999032870740776976064805740571853847337064834310551096634478336669042763136704807586517365797136211624710257953267355206084531695186978286706442628626395149607414222118992574163280333685823680906473269108560879550907146951083501973652650163620691173614434376022074343663278172616794365354028350879611668170977299413329242853102242731460245981931645393086566419168095714547735636341109457537424127013466092829987029469225005609148935719219627886553517060926819156103842061184103249786722102357857380363966877195050686029417164805540813780785634440605334896258106006438094052913691329158675367290141201254618676773332219794175088755775479718673883939486154200593603203954816323103020616423867397093710839615897871898114553682658447075458783118190023366087506978374367440207438924966819405213686487476793825253259734471325657957108673156552118127808366008364042860528540535034950176612182005881123405988511608306144849231503055132715499943836726775291396811671741107037864808220275570128503090451498085660993674239141408137294509508916040084880385126052374726220832131130118877249390053885190862016620304127338330822376885177520007162660545308168910551027048206864259306643403258146047122775364888620470370521404458837255123240697440311548296630455328683555320575028845668660604051631191978861891344050450146706574218145025744150912515431643639763471496084616921691588906643318094161772942444267813744245201380387655455570994259537781139991672727963630401572633729986361556875282295744688790419550042115325815066901167830915280249317272239032336428833326465165088029450553351265755331884109528200193953474902952152924946185562536338925534826199411100653632718279533909714213316643228976513653756607679272611930525331509533360676882289504637968260788530354999017751472236832783844855905587554729452514767314824700008649155270346776891167316609312798908304391728180382885705826358462049930067611387677311125159653938052767644809094689360554558540305110248935812740648171186350593122648008331898865084081910232912772214306873277181550887217911939282490833562582253824958566304651212513938680716752798136384903060676496603824306844521424474974798402169651179277198301900928835877874551786318031213157816266052352420958386807745919890178528945692073978829824318254828803767836945769264370965570278955420236563465318633087533589358061430931666035989509802975402163642667940061694906307745403336415888401856273908779094219374541395289779919505811512398727811277052044628889676576204347887155453152137381991361998780634451422237710883316724087265275331735893833197129258839234716392342611646952816033259950054307629463527993424446629554718055401467323011537168845330459671616005062986429892433717372769708986976311304603813694466876866558852113339228482279288771725065980107614730689732508546319518769065056680957782914367866215918590112732510471009325001837807792226514983632349787121937850873634795369167442047937893608233634609666703704587131733723929085811244615783860405178507877859666805690049528538712275243036223309707838878743093968440740186365488240924198311296922550429467362803938321202544305084030232602891812533837834720169281029831388109862088373636124595410033526477352125408960443495710872004466944740504181430539375974997235191384764262912442475167562557149784655839519095519656973612676149775555468394211684073546313305136429488931374979941004482067517955299494545191338214275004688648850080625425657255697031851628472826812878438128524708409359692881087063253264481220907184058301090967458080899506347453532002995200234316121374098161410900539135981863658581370995732911051446451138998982787447971905437800015184192194998890428219996377737564767442914336298428740825412724669981656100409516386221832151219625497417581073077338087294189592180026420910118672014596652061567734369839911877944565035730463100962767041999720431147498003871428186236484743508773318443952371300988256662194348824041466733754460943324754187692906063468991068425866078952725816706806990970194721942596702352590797837064926809786719427373172154689565613653917663261933894602724198203854026358029130198575484449317765398657516813791597967078843130547339469073783524497382496877243498441684162650928487855937959542776542381517702580219111410239373945791463335216468817891797159897821504141336134011961229585863213744116868341898479921270173994357042490280766042368231306294592305816034402114190442648210070915119128632526643207927399206403270502196136290923785508894091611892797999732479898770027343898906937912932694388260729491337611804903421576030209232881941209677305990236485778758568570909511203847749727139447140750017842138051158739164470079822994287470311711455580863809119499634431231542924995363573544534166199416944524373140000391672173343392584556167540657516390123765234814227550308964579212558077778186821292704585207362004093356520798803551721188807088087772466898440741018646115406804612936758076828507023774182209672664449988128724902414993501219401001765370672317191401925997949428670713449531376719892790107292559315329271665439517184073930078672355080717529913180235718999452728793715874798090520042529997304171394608223665519403070588265928559013346665409955899514815287087015895503845612331949334663867288844709249699760870154746576067740617109411671360905733205915721144812868914282146396418963599623786016511558301453135637971753217719122740923575115844689612181585533098056418282958853896584799967463642188879073429673984966106974767322904274930921304431241275791867912140260586098638979591977302253507591795249943499668854219091401728091291240324419097106670936334674554710470587846998580373319693822832186125663563662227300196033318571309952940878063796339388257833300085483835132481959803926226375922877243938995147684343099551037900344498227926589430544888103232468580078181742899166208452521226468017225770159292796370494628221608659705311860880457610945893698767024912686130786102451619763311388742213622180967440266735615377707064630432362851346787104938266503146626301826386009911001332410273267944348625003805191824863507525729321246269404084347151934903222130472688695181142909993054528914728385212132736819895913661164653395636100392775995046821116359166052147490259673545652512579506858292074086966566678148092233349090670531856554153436180220853767903100802098585062424675371471614926784976597351943926464759004842764683915776120276735116378854746819555607095002547606392301607456201613727812460712017149291083250455836242558225613747332670029560146313664626625184108408526435551075760616558918639998468694149252839714828173433759651731790585540238768981676874286013596872690278563046650509425213768568600827027602310874261454666959825912534982207381304504165906647669730083754622626706293980961379228599568320787109947615111949624856762702790577996604294851650710262744819536909560241872405354015195815901368973088718316821955357398270458847336192054118678494760800661846422575105028339264471032443221584848296622560987616922442031578568960816859233700095456702725652471996634621805360039904773049493081061117890447026080993179208164914084001561137279717964474457910822698800571370948730739574958519456023949553713352403879552609629342711187222946890885571493932420920963889812746152759211771233710658321471894667865836881256359416902697886305637566565270511589302949804123378578009588741245234061360202559864224187793107140310370774238991415782896268860247160087221743398632360201329490179060521461387097002495616922113269135683217341549840373435949057182322394943783472872058473593126858273723016989321497958715693848778260916053432892608850153974019086350180056263354802687994169752296797729166187979142462997664638545934162928193655800594073599868087694021711982073641040542199591089911339670166122773835431930957664741772458832249655277342309784943306925485650386363310465509184262852528967556488981679969063781668502292160178629319257109918089175245793016717386236635810518592787953993726687773744355504320944066168920405278890106620954397703842075409790585293639502140471672275176364054469159930595251498121123000632836929940035415174800963695560911591519351305097536056757497122738733247223334299439795964416272756974788281452938919543919179780495830578105176873022791010237618749182041436120814538747344362413981166492880532981408473122438956024899704764414827372680888359069383203084252482710559799658759140471216458496005546408675587772142479513233766094809931909320095433919996718551768358151589619518928107632509757299346855803242881198506144473507763036827161335579895814696687756797267492473907511129330448610059311031697081944370716803795577518487360501045579868709621241757229741722143091970632237708849516805918096189012758100919518522581134272755075309636666228932838080599671285408828093511202116961319849653073610668505654418211025373854469615185587420505700575888261495326807192713148159720874106763838858514416282535260626452514445199386144279460790374332488395321942092245696971633409779711403667148196791467370350138794216664252879537117245964416540374786812119366723571213640039312537831206990870490421854920889257491088284125753811729442672269609411252776690642554159109624124410614773690847589962809481591267437473683970316925645103066449528952833136986667526561057302938060806717705640347372758940854559438090824022934117904362128241289781935585414469223058188520370422811243860774239667131292667503614480954661643166021094263565562954650536478763836171348484291106790718789951482491353812912872996022446709005369204478525205413817559888660494002070759867343020833304262695786258762182090471108517478008062047916158342858928375981008630590361530730991533337103005007767024431048399846363323604547570763844498393678827412313502948266613097046593733067129592808782764829082779540513431895899823748129703286439371900576065601753249715130145551395611158446136282331860450878473803949375391163105048460542796053348711044126190850489694720890621885113977651566300965967733708467656571181095189043634361442938460620424892828907311518705548399259321673290854432989232402033427695505537391672297800738391325014683049620765825976502001490715724896015980764535931939727448433948695121642423627605318724132757699110767075442641487063525797598420578507881625322631258275225375353312907827229233991901973469958877318300954825891826980150082560409853023435179352929576326184297304876469260675852353214336752697472278921785590185472893192209568387192363535612736411827177789230687431274148917049359515220791900149954463891144855694570764248287491511795465355571647974077067810042898359708679406723077456168802915159985106685165278844446272185418039624433414989676529360733224196806303027701699401813246007448367635711560091194638564196215462750260469722895057683130186655197563435087042456745552261726792507936708788382778795714813046436130676422706429620437824366040216140317789120666296561961817276627472468337572371444709160465057566385526105800512406353089397311243525990809771719833722278531018522388436675146455281597431804631523542433155277652876622739675563673188640006742892639445098465242739506308240042149149884627632749060858136523029010127328467486160496136970964099609404485275485587599287991078550382891153951255006778605902787210807236763823509705570383045418472207043091603551691808413012509993628114628175790641442073599128028234496708954756607086944124895421408720862402696781696349037884497396953950073338348468396830752927901597524196430868111165262332019170855492271790130827789573109557139053285109689778332545958693287355659898640515042491550628028917049986801903913280115785942913725572192146862247809512151632511954616445305241282672393782775249991259990268401573895663033422145829424653742257468572830795144571447217172170344390171558138444299290663385049414552445567639181283014510290419785983701505834195674761038613042562189128641343318579288380854262613061171426518448419053079528551126733990801837900708461500681574188884795165426161291709564074295450881956626201918302402436945381093124745577171671312225963759197527876184346331791160454187021677119481282452140937671112699410475067112269611894574476316058950214818972540215691086743676782333339834793090049695579827352673705992602098532938745690406929370454895121406852644336817988310511018606485003687435377377880357687101549923752753870842331086890020957072110482921078203892582825430743853678938678845171550824421056075012746445684719777935620199933697201020688921671515732288023709159460020579281422206200660770662136186411119039464511246972567849083853953974560152919983727889703872145059312940206651954534823197197456037124574320069154489362428152384518561176908584188017896443196497458965211081852296712793505164224540578823521427317961999439433840947679261853070347008183355600509419881301091737467053884095017880299752423221585377626802533750299111687354685486159204618103044084872599593910681436894070175869895284548114007698177881132942381244912110629421844127353550884486951712261822154242410334674508400867284003116207597789041715421899510712174705598161680472160639854366218120520371025267080822589762082721234822899143897023722519527191182967187424707516302075467248142839624551051489916072253973677889265488627584976956960720624875569085896430625668405496389507310955276293395519901278703982054295957616190481642061914557057918641411590376116837069898283627310675729905679075315341752230316326873798944842338809064711121830318844994995728478247554519759647479833188840882272330805936564717875937759645466235877959356774680757359186747964855850779950002190153225827761646716858046423788030255771497227479049063699882556523239832981578690856832572914858098641904135700095112492548076201483334658215008902573568715728628589777880228112444674918240096125221488915805020859677852091654966635145651388632847300280396301961059638194991615057652714347324569091348372183877979671140165075401908204991585820352573960135268809787675490861799359172749390316567281411205233112473050152264568898538213889610052662413601412411722965122929820314537969307515359259003169193350947717065852529386538881686267170773291846400688708486999155003104663586382344290816318064759978010654953537866623711446364570626969502173544423423074929404208942616624720195343641583097741467031833905383231234374060924479894152342878888888587110637396276339544946001358888192005723471164751936785560384570786894012343324076324959874814196843505410918926079285183879707107430170210495856306080442455608822862122117572876456630741312672784076158322593594055019414285422443235678980565689755317999308802910505961137210498567710018536735289083212063487672806707334546206404814261141369706196328862821461886994687577175390043169221020130498162026839862458973943014519368318441838195560100295968496734198518495996314945289548715598718870583552621401683863581183106851205684154635910380524563847117217821212106128722162524253763046827147151974918777923681784807700970624766909477312166760595507462337125669968044357089923070482883709634106122062070766308810712735710624862438926613157497959226806833188459480017662980172063360634178971275611314406393895211433271861436947760659023345158492960047345295499295662853340265551685535599800744092303711269544719828803680436916119091632263364533324661266862974434455516831152632639373435575795104537875888710518410020589958339879959822445451353658029443025792509752253551525308255741984775779270729019138683637750829888081844708006890211552146344622614088468708319389319850769307851285942767252474785352358559267431807815209013706262561029595478897605034763527896789052350336340918526657057958081872287341591904736173950725836194473696707391163580393299902911848791441413850082003693596935427471422729646162077763129389201152696915172964938281148555040979580355711393742641390964747263809506784813646753925737960500015999521599040534422500550634111212967036120707920863177566166569229503234057262633077041307108981897403699595707664375223053442154801646621952674073998016018204114207792322619912823001873411899291943544289433976296710950251614937569204757779765928995747738757818760854802038762304982286305288261345463881107741394409631520373874750233139799838650413255743318875470620818472533845161123753583328874495241216906348859022307736592331867789432771689184631548324581181882547915784645287665908939251778029107639157159289196176127518723121751560070469290085609343869257334092947393223315517614003002467048702184847384690761234900833286623358455281883757151812237381345516686955628191314036123519539678665398336254286303408505084714763392222044018726750547293413234050365413766358316654410953551281819431995257295975108311779909520303889212337450841246936324792672921730951765343962514538205080555856311467242150053436496567701001851431642012883560394627048117888153808553859689392563362831101945847612823435569999360628749362849396263121141428978393706694610773760753498445233988754224335605409426064724465150571453306140168263830877100622522054887364455754048830624591098148199844437954318671983054725473714673721746781284214097106750134651020281137856143339404661336097397401255849460415338500002693898912492847012546892053061780546003055285372933509996259190318553322495887219489025100141803027682285498654701158621266627181173588718688738389808332699617026792423659913858117693296106288197971001919395880629554677187346338125838160292486198360147729979871273120571322032028504575690735750011778046083231651989085708906682400875964848727543577767320694907469192930438894927009743546491436041357955549348300042338360759281377236265892227047663620196806664771980284507347099402902967733697999621184233818138249990684015970535495278317959125975524991795957531505015611136002871680310533093786875108515066706678620823077849432976257275439747172137699295045174649617946011443989552460583705965135899024689374640564101925298778186797415025378969912635036062934209463477387146111182074864014263939109691429255035354418183096283089143643718609144817465350868728368487526110304341902202363658329806583404243426301929038999413811963719928900533075863880385638026377355762024440421846082611952343954020299294254318741900205024128317877368328956627168050002516703106370642969704283772358296461093955291187494644342390316988195849776128675653911509104542124861217280772932996221537953310962029452657975182251689107870392012504852892547316032463597681300089847160255250462914104176616050444245028613939373851574524967337186933259018554428928015559462061881262235852459856089108099770130466183985887436588873773243601088860550229426153384432008657567689985229925644560273502542282381742604579927654137058837459574794972575192961456785170540640531904771432931209781137337286211239818317844041106915878514399961654100374566986719879295231727712111771772229486027185802483882395198074790128622402561348121667919956756920273231028898988580958707002246439749981244065925735360676364733954118132106641155299199544857249592009103053430934913609249297653361487158248749289098935130229734152531034647060511392685477854761239602786254479061019382441139667288410559126176759142054940087896465268370081054931187899275164499441058030518288371926823323313797222058155222896466033422597096415435116962085378815549492184638325958401951721290473197241670371516491881467203347875585007359331254528344449459950467758875267278189820752127439854852566552803870490438503143232653957782922118685816688148722781734903296936610500471173522177161064283024894888579788472305995091180282414062431445897622125893030305492825543169066044111330888912781754024348338736557326750833574402747013630048297404805583748083230530028596408741040030162350741781079342392865246051725408625341045214944667618371021284914091497257188761924767939637028534628334759882175770670772289957481292738316309937728650022513231422234754422579929841855985946451468684350390314845273621075639131390824319325380971724618039332427557919436402942528867210146505840229198062530002639445641553444719681044247172959043190866680070064196331063863914130249071095131248563606711066426848149947420902504927075034868938069205285471610210028557331474791661084008529287736898562988280474609439222101768158060840395982029394044056801641541171538945243610104322534200730204315260865284828953604535787727385628812968114791370986014951254706844185451923929072881468774586758820306110885474794911532141074138864914763733541384283976740191875378571118515523438069807588777000827782446489266182050245346558837361947434377809680600377844482788019840369988901856492040146378437457195604765771763497148753529247674438388594397093126205511452264943420149474713408497012302647389453439359384872233770236640360026013633256865164883566645637992031106481526435623633931034222232355213509370961371765010288817762179693552242379775216656260241135497573014130795564397554787053584387187656853711857623431937857471939579985035081848718829777316272176681052612968630380592713032967004361608181691291430592912818088530249261471767125961629681696763811424116391066373303384993152768280740948118781184558104319987675542498579919858166065158389793255707776743744116436672753184816598112104831674522931550279998771106215597545399479437343520773636597563675211447481439779932609623982600338971268883683768790803057118303171340769493891379059633504014432705976380151918797310743478564409243233539718255459610193420711760557630156927018163410042030919328901263062660290810416055096762283837210531454115711704392214764971534200239720890924410613605239216073127851967270391325506751978212863009614699353698989489629129966825662563519386134716961129383146386288035146250197315211925553022512173302931962094722039477374774504846268505683930350343868458784422880640500784492844169201589431927903016379662303396527872095562568156390966362645360971925681857871968341995483947410283964766743270092620340260322997257237091573993613689320984290367200247030533720027280038417097783212839273035096338938542591727622575162362022599685496500554429222347884038006453190248400027743775341348801335215989938742326080054254247170602001952079080816650302245176710604093355842163642360723052540350943441654273802237051128416322439426475234583967057527446258480482041840231234842602058417412378587528062618463131988655226053150118765238820025342051914431270624521243139110536045516721557341224477691444072542250943379523540914610979701581620559268793412031737790984636977046879757487332724442490312397606565039366925463662967999702808542773925468580692839991293056392310917374429934951347005612307226284322964209030221618750098429366099194983439477136694496857689442264881224914039910670322116288372730289047738573108522450033816672394101565965048622910696973855813020101016596778492150524524163597858951412311844796147364899117621449468760602813472330721658608635506930727103404682194935368589333167590774588214751222713377251630553526943871411102693132298087279434996411605103626921829523837922181308665640485185328298412378683376130991261907022373866335460773339455678784703129263634716537532090282547777127534019418852120934212233684269568396133976431366342292873151938449479967788561358899533463702974267094796359284987637751201598974404152475871775040728557820818028482149140963098586410453529806961657287735738138755712151598174425380024951275335199558910669206209576113284903353418478945780694878129790034895748753362050781539824584920892084749347087235642519520452342493927793799776786136198617469969693126983224168201909587877154725998407004749212713544394340278146389166186340477628969995703328593195001704673717058025352438357468612946242018587325606773986648467186870072551528951891526255461310771157406650956757785133396326012890387635813591423184033135516070805571730845080137132045429491261012978403015641430817512666681469843066257060720964098086648402611312090715751833710679060879766494555066896257649913350023260836668751637428823100349524601403601892419159189925922959275820633937990644299249271169988339019515965180613573895432999894831577608592304848155696364198541694025900829134781366210991417472495148139315405572913400497872095116583163635740301688579861226084476006780263453790933289131487409161550962668826089637489553038837859879843790532691421980575061315224117692153481092599586056471601215629186621130434664996556516932298784329307022398027011414332176083277481254566740985113591763468957331875643736921355329794098131053487627474682120881562550550881428255655602726301461818701211939805917586146895437388795911816068375606614039394049767168461259001949273538210144048916666534903327280258028482616623798309398413700586176634115625829647911232227507375334923375588614078459209835676422299267049663923396700676273951091983057302624288416865668362779855525365118686744053391254580621393591196711448438077488551738236403307762952589858684493455657463478117126363062783121291423235729455410918637867035685633113782220139687642412165249598360509878714727491849673012334378180463831584187354582895646400179807708658382550667724914138565820039682009987745157792741850123714960764039841065734298623591290702110380779922504349890524389320347890308828719589040376100679017864219311467557598930026491189345663675214233027772264878374490381972865809240289051249348258334250741010764402699448241367513588990261100526633287903176928198197677117933055092254550168988385755711184604062724032969041641602920344983239296376314963817502741923901882100981471281443446703980599875657083621988880973620719138197772524100421922113549246894114245414372112090493791692600291606869049421927806267868540149608572744342888343192125058473363971742076638014712200975997813876869820888826654477230072783335769094726343439363924451093740799160365246814221521418251509165560016088242931176476666040166149409617751387959304000667838298475779617451435521971107542909535756971647840211114967059219572740619358273317825413217697042690085081762346191097822496311788562562031626726216116215298679994354658456828777010935958029126216060917819707341303406969946319555176649237050902062556966761241375058739571292436871898013175671381669805507508696910381959470264039318613075638568464398580077833659887720496385166104378193365458881086843156468468523490854549529450710965680147266392003581831969193933659362316072852675420800357125522249098898054570353965505168107882852864529840652677935931955087124815626428567901773577880059003707684993021595642820310207853594456286754132723969857923337469252202259735727997751116848764487235601899102596111514927141978064206334037406646670461524244267294399389563489619484717324536636445719285643430736881017478756148754273773852289888136125549801175894395271495950395640707601607104562785797592351715554623869028246265577155348990843423689483732331337719099850118433499218006218421240299027208453829439559447186342420117431465432792072288988488740343057267417723708067738577852233243672319230819937439683915440649582059516544561598623280971773789120893086121672269536624083598033868209624720281605641588278852741452020860395156344376951038233934553306218241725396467724828107444994633708693546367123495314361476105770109803860472148239644683473596101653816933207579295804239795231250209707489881769264862491580478053842336543358337010193843107143139943833585292436929169794827683225645488250493758065708204332690153429283252246824483410972045997105029219491200004356064388873493046364077650981091839516620395962650712687713049420813661020164790060026130112716818875580888149422706314230708204130100772098049184062203228041362580051800921206280742731510572822623376036459787961780882292249221002031736456366826421727834687640584814053632480791830200948413810861443283626261692032040972578925220311877455650049930685081104107394628130349553352694618261578823385706710078304466022726537115509158412710129375703385879757237284539292895988728180490390220496139617988669206437315385861127520716472864870732451423836516235084903022716386874198709556735053670824221685660220728278626961642949943462735737024852061880916852346905339456156753923289238892045090888056432159120268216479709411830925161705073727852182241843774144994444796800812422381396128011433956107925125566938292728894518495205656479288798467478295768971565046605743380817683675039276816505508751212423949926029841364819217401250701049413854705548216151519699389827283019852789171293382302732747354572335967904262121679778835809536307205684993347760735860485162352359870983946965085935681532501893160966722375508805057199214927917795853333092263437505359039352967087492413012955087698529172665198805420638824693085516459299213503601188841365820793247308338096862952405825957815923600207308796364681882565126559078649360912095932577475791841991368526488425858095470521872452183848155746479635949126054100759873565047420408657908196467861088860745823440200596937137469726554619440021533471197651802029945746028546114454400341137146234850866902640999835474619226352406181906965593958219260459751945218547186010136586725824330239183847055787095688060314095111184685688138832308190665361771520893357047382326528633906357935617076387165550366027262811769099959556389802647692621844549401990735569529998624105286253926755935055719547875890932694340554447107616689228089562066086569944905859544518038840788528630069102190204691632172591973746465885214629803758001818354722671577554377946458675180639189931170900056297193465314174724380797003889515935304761631926385152267377564862725712122407042606969044731545405432011544768262989326191733481446407893297863327714256422001628622845256022926722039032858852550966980793417370766719350671793803838423609435455646884754065033709502751899071375163169890856762230034353248802768786910964565926739703092124666704198303948460691736963253713870119591703313690617965257847769243951364137415307103859326650169756472734611428216414046385745227023184773573317555077165126936736741629792481292498743205155835997683268172359371347012456091212295887484642867877578646795751622965835785463864395557880638259410281317519825410588466995700288346083450655637106260214808311406178732561340081016232526189760751886271379564740782676263559705973541667456189291443581212424404676011914816089260905831619643542553993402039798670408163878137967461241701829503692199517679672763486035252098113450580438489510602779967538406778194913724886699243032503589895316658938365078639346817966446042366971598315102456226149656515684119923736039138700680083951001771224019777161575827820297993227494571953532246936982900599366416589787251517727463895146269431106027269854190552230633092628014821482309609635823553388474087969696520047538050162437487064672959995402543841470139970706134643073875937981889199695346910796106300932889981171735045657785459463379515938396509980647441968924682241853711106019941292568600206670508573236766497716210397782410983939914467015508129203700417353471801331728912556922317624644415889241609181001149181985321743941473620491460989210711065194784149182976559106558188134333708873913801535240126355571162155611895528080568951526554987444334536731499537753528195430833779794624656681766785270140096283044140898051247012255419499146558168259139756529674323772834587323355629868317816780292113528663119722680719024978280040818470547128362669379424806012577422038887191868631883448040020015452134369307399895551088373207616043579965759272959559449403269879855598910900010706024392636484042799046911831117069348975342142583017574911456602802451624070688915906429274072763654290623835166951367071267497654861627881666298541483065726588427718084629534053816735134742365841971731795029103239286268275708328610899135163422402889934113026131852180686527150505983759002779807773566223011788941689719454712179344607326254690287120395766024482256671418388078554228023784784496201187429256077058990150435615351155216101657438309215090638315321592936537200580321910657657215666815341247654573083731344740394722638474346512544521661792980002338816800181577838361703000507770721899400195844878004251805255464724701063911083619487594713834381627924257067711581105282570735802353540652641183829634997288735297250112282208477996416073074851093528870765045321232820222921439911099170191434612580973635919820391541809473112124075733876951153040686421981760730940392248786343513079856829965044538757787037942418740284997136502228750221662928279924265870962201635314064803827203966095428887928130337192039410759247169242739168498523247197273121591784250520458251462557288339313896397732661534729027052493515404201580059981956608905079272892706164790429218771081619749768508639849339364643058661360212160610191272076371006352322980097730083536900596908930188252920677441148336565335213544052062940677350237569694340838070570449158815512736492862139779132213211843388066176862669989419112198876291824452684702959605871999341982491423024679580081630979799600019718579349756991631102855467872079017699044841433689138792070082691245858860091100747333527615921285623074522312582760989162946865573374037829302178739225575289042659045727978291390647109321424303936944279972788242891964130377157310772605953533486292992603361085012572105175885943335595705321341456889458117518989992036681091968371021602143621382567898278967201088486661538826229576844449884230327889089656416829054301277201456616051237734474662164978054102538036494621644430726212087953103526033051131027386921359383088225533719150606934884972757665515341103897402690521343519506346008077717938429482549626794547576980199283223676534407717065157853712801659521185640516453515871565192484321804442962765733972699330046829989406888341627015358639514826801677079021155478293962619923778866000228101968771938334162366469804573202014667190358534377215482330962923275262634963671825984637003914633619143396330500521755888969843386922843589872134400996113166528653861650963770197465796117647298541079103250256973646631652580593033941058305941438443670583302078961092385000096028004387250797639227058729182855207638716095753795885220489180587608501087576665670950961102068748473102397688480068745397125317899151900803171836227422289946173194639475472087332607221032204172993718739866807063991965434685529724874290316386815414750536825089647609755324478912829208542640630837182428790314967707466436030120046677693513719304754091874591925748831794738661935209325972784637836372417065832634101495661541702552237720067651495419730409007777535110394473910436455762333458257497687020560780560125766474028996604483310845299656108458520836187635944075062965164082259016665860024741824447869072154938884824126520956717610359345956570059031363334002503160837760160190522749970822199550294007333039256459130986258366814988498652039570467430857270936255566922917138875176546035640770701881537448577626102002317298447304080275355918518719943682484835725447927289531637629163866387981244986227932821777092957191598008618007108755043196577493390795743913791435300045489842318803840629056604453508622889454329052961581308249435966212373719648882667006349214657094779879673766929203239990406226893937690672818422017388165317029813987140416820890222156353954178254095413385973580442456560445558499420284582912636669611387427404451225546415356155838383066957787260635657953616728518750757252485659572480629089199805995107320554322842323926689320663451184520268687258689886344606068388694479162354509096941490038433598847203104301976611951445601852362544266638679678290075412941302729162013553313728522646010957992606699109069616544863135068561276755095781547242671190932783722064505309964908887877840158912914910105346231151775487613772792899879678519963830591786250997836698271218528501056595898076691114631296567610559849673121473718916782416581126344147631655121086933981180869415987776601838722614534041581254100451763340221780549086746753938766610289735053241990894606197687789239665605165716452187952517064149162738755920000811374455502914943892262459729586085538415828908694331245193074260696566568387741004970586046250406779678496790295648201386486985620162529677519187045200318621917855086482423481330608007219543743506802384438536607353392218691697424857241893460152387618386782325153321432760552484142145781862136735387766492081605376589501268788700420050453317070218115339201229440765302660291694287227700950440380765107112761096963572158992801291875003909086676778623232366690994533299491222168137364267573039455654289904047646814229327801683590630142563153751747079457858925522910205111288353935603204598220411265610249301465496049605100661153637159888807908902323782288115917266030548928229073591717694655741521631460966838791102199409138425309485441867582737071365301751525547942825571779776968661573074132570848279551828767121886018701878619280272422103259889312657193875315049837541388659071098765055026282156387486107899591956053135772784100496825157507016394803644582281562465844931202245768097460360009083034532364442320183540873202417639221501463884395812838717474792815470457888288508076821945174144028105860328866061726727674515030087857289847427613927570162848467465868388369591904690837471560863827694337872032073339132310877824074716599328692954368440290176778939622098606562704309952427724800739407743083724696349092602202149637692306858199125713600548864386864010917928499351492615039593355117890366131905372145092198636688161883816483303851872238717415106454350355132051773548989777552757443255371566372474534435441848412809716879074979241665690375961387244267989469704939164542096816857631992943353367922943450974577981735513285980794037989658748077626750133198955052583318759656463244526191339847597578899938757558196148864075073244250467261088756301070340776077937405119970413498591233848696140017565253179511771575795275131945857256304538740165986955527162558693404651982237870681250364694679537863190584566503257017428760056979496904352580609209111103053294614675377385059624280899965796306324467850909780831489026318753391745970785291441580820547774726329434556660527022852038096530229629083381153469692319673185432212788337117250065774907249107252485740348419082835779774814914168825271376969001094340761377648487418731698243293622743693716904170881810872101742928109037100000977309557903344136643273367808231025012640831073700517532261466072965558652756539975841935786806116867047742157426598876286995997384905698693761028030005126905217313490141907445119240485586174004947125072513293761190201760157186724092851713785477603552145995848354307689575140731563893520272232436224697297570996577403366115446408204985059861276880231146593632332116664047060124406837360322379955207563026996917043872020612169132773506149751543096030902910862068818208029741138639192386867608762741997860087946363183791825619263211533747157596191757134157369834295405013020010499759058170439698811648143980733751968237686573164454534211394206136959587926718539689642312494935570859665860568612537475919659068040072420100618936747953737753705749383127291409003383837688855841053309435892404414955527379658360309647135313289366129538476897703162917189354281206164435348255552192776966124707287270272355902245433955885751207009741227994192134495378305063561634794407295832195458144059625112222238732508215922805408792621363851812950739715101715283572373388069309775291979566994423956314498349376967149231461962778062765502443563061034611737001968423504862603967799669087117588804859019639157112753414649335925988454052986607957770870482923146856099244325494894435569370404603972409346620158075409396512099348903782562196646067345376443663877635728814318418090231549113721533373625163581574526840997161673119389664334579356556456354401159515864788956168788481450985197215201467974181561001940631241149619657961920795580250374263473722428593232378725810430245637202518132904531251551627240821059617789024316527079137041828262423203999027718050493278416463558083739015666535614730630528564883352138943172947828201962484672894006650945217851258824311228840838756059704734974004156889921429014908926432337401389537678225680966329782263719847506238362967059541391051250329777158461686302483375117714795942380458251770588312881492313634727768589869682161697321291504228940601873619348996292388777724630285389255078462577634963779959329989151426153404562174906613363783607243267517210079578320766293154362152207280832251485579899573303194771526628078798007578233062417352061348072159821545393566054519332770028296707118564344742106657936278687268732675617734737178056510690046607762220209746122648008510436643666435541902320142352415694782992027493364828745928747851672282706320889132159909846882540327746849007379809382050344297894224907120550708900023237802233950487712523780018161507312354618054223609497536035163494093928091032767640336242711088275287685948003533785270118743240118979225026796544540327468208658559416238357927216565224536669218251472645443651889081645564816245005362169954201386198950135410692688457725430323102706392241999820836165265276591679465060858160505568568712438796347024605304900308450966553605733042168429732916370172195896437974642297090857585959129744911909686268599809774528624601994610190665878857027337811884181381233078873788158373359983366672234669655911799888726805731249876450737363254821569278028649052801255401131062341913855820271583117070719273865683054999663069013111249121297160457447041240423061246140642426490959698720730873511722072350750404737742430572024048268685119133667530568425561907620950064557291163632179554525056907363270277399640559645834440273363853661188000047234146519397763559239145260412600704968936012028106894549688440479900267973574869188916898200795990111065008878815333729179214937996646495852784883698591027255166736443038004395574418572899294370967551529143179055369802934328561669594406191593608936964899070486635648836640763029576597160034720166645043990534279613912479497024231544925793613084992394121484803964852738532840786244112636713504212176390740168740010064318423771759800182571206639184134636335947786714976994584189825206727396176883875524645479643946415113644023798932248203117158653341801005086972304051184189910711151723320637594773150678911124405222765005192822545537671036184314807662167004590802562833162356684840697492521011525880952899271472039977820122616771265024357322419282091459744940443106332422973501916691938329374288973886386034592918524051364182398592764975688780001997803671401869838010577270717330444418407603271989346719916686888680593245148354943447462721033986270080485900155124951082963992792987842114837857821508811758170325737210523836242819698681325151023148163454095321894993683800138795128096101389801313982043237028325779746911915430218574372464407978667515942327600656822134915485630059582718562671520698991302473350312566427091102259532338314893989689756822401425548363478786325343080669902177859287335109626530228527804055908960006937280662896796945405843803882948848124047942281965182397536936457929889578255794210593948378679524919234465908033421164868438416051929819069131125432441300566879775210550054157419483806784214653243093753518480506741715472803332755990227351462034161722520909347730060870649660727422118067613395865270827693082504392270738618254811116949038529595723094576904555387646766194045214126185045174967881222625225420294995105078164391170749628652025184869718810057932904459780474128600044356721564987537843310493494303165385746459512014483412377153293124606805820556680644340261399666836315845102022850213187298338640077707077917127911385849411484173150612304233608674207467083445888214784873006838124326048603420520398039994672066938235732542051375164474479235433550682373983123832947238416282024613236150041949833072908669815550674617589673248615861702017780769184080195436695753443836861503161723295315725658560497271219460777837509040504799004521018029935893811387189517865310399566336628995254428616900954602946642481835104052723177763215261081807631624720322398654828944688261281379543513838399159096503176110145561673340859375841223007298962049354231684731456119013370627451653372101952784150843366485718683154707759266001380413461198030059470241851889381598790912932175523398760753164627792920260871619044331651516812323419790246774100510382849642369445921137356415332559100571402192386504324237600586223716858020906861290616574468722975254000616033200134525382789948233703766721713913420053378522189534440356774167756989838340371683053339160303712468122195094451323769643603060107933336317574884600660754013122975875644836292687447653875456366671633406699749727233770775602930171119873713327502029649301339157436902586985805804661850651842865010512710599579744907900725568864758808468315496153957143231085273655909832339900927873362328571917762632399121621719422136842073993822309314300099352877919729663183063706089857543103711226019781257589533875565388292807852373328379571498654743595708116126805997489585227762613411374287400898540454081729983600454020975504859445623078574230082737441934713309411334435977095406278491948107490251001075326160260816166141665828764940536675366409103075438140950942363295087616474038594568300076749067398262609892149434246290522082284867369996747369036618212558758764999033240531377456820933035653514739288807506785309262157018155354164246038618753605910751171596544451629138375154996561231768056352944122861796274432731602355764359001440423701221314110232709724507824830537580539309136187075390125804621374052404104186962215577145031687226391307500214048177954438873320863455884008371509806523844996560156955171721235083443685969318160004631899389556155154887502954567874337030723431693153231859698126685897895105095148228879264170688790144046095670747756454596689425959992788755978477536636909986217025002679023725302120269168121827137745844016745136986531559713305374725826662884442853078675832269357444922580319812405402267749674742781956841448786497782251691834976002692470785895021703704858388868515265760165621177267080605919982230358195653707487049616510340265334858744325169430110779016508192911580225932171227930158137898121057272065802163804143176177861748042060613560746270301387882517734888125466322091023046199189071897531864764481596203251883661383342557380251629906535720631765398761130171689454545284542849138949012752571883712193005628020569517371873637657312815325305329151583778151502917902733190305271744684958622121010306471264222608732792916887491000707158866999254047913786054611810141366817747429490945735777114365311619138196776056638249387208249599690279274158972264263533482913699417066232424301052566108557105882321860415953995261011470246610385777123349945013365720795738329033328267790338461440694253915947579607200765511873466671258279119860920470033646635678259287228565899281046026195224102321794080074560857019502214981683804045378001236533286039783959384004974440166902266486137702679291194779601542349226685477920055280270194687371379891364308309741325341794454848006333434887621180433722346253849620431677039433650809755697980501277777113845268685091187424823340812151151597036955214920274705302810590187488774145471376334439641472564400585203279952036644952915857362994275837591364735007137899752917263254850243740999519067606448557348572716000678300808919766778877206053237007230414810898261174192999230284869838903138569158526989803738366062311867394482801934669491046627645436363276196627877141926295125717141746847349260139498229621952941926164899210479487462540920845674239802557539445478424605466878288948565437238163965174286067026364536764787585857086934460845630429301475483163588819083876568053843919529815202317165149427461863268394120150501380274794164226549074722497966714770269857429653319371853947557581888330894630187929986442821810999712432279880515190220225825103925627914262396261528127570244033580516736900703944157759769468332776781478170997801067263584947564578699956407063202560483281763769954234650000264770866320237533750709170825618178829121555348484981912976077434644897683103996518259302203185739168355670343119920701453229307854524542846194775780342354148147108371829689841186079764946697999961540609342917861302618236089580266302442813911419612144783451058076754515595931540231562270809029227064151150119300956423560999465999653837045524948746983692965835699733590149297182040483811117450935081926236794221159650071490425720958495747811724299488339537170111127932294679341722267132041146536871343639598304001759956917134651127380387343487435851780856522271135939193895628494326974660699269244961652914573600667083355775273620390457210060853612580746188269631693582473145445281407145308991224674238036221680829298174220621860798197137043727200723464659535963188623974496505669454742056367794214902540739842325758539378897401139581409478646694538433617227363033864822552034428500528123827744206093078356383899501146590774355751444444996321829960061275708179358728977432374068967803416414619266061210292307970707626315000351235693107429383685067164757433404492504794750614444438344268104672144761836840853236978233062403887482344558895359341454623603202631096561293380806547311399902028110050717415339231618537126224678146138703245509801626065686426890214790932004293128602116907695945906954418031458955572518471438409956497985277462584714340876550751083482988783963757153324906662143577507370210340928704211200056560771784033654183722097707039082998185723278388513255915407843806226096942825934133693270436473297298053131414410673096167498440524501223865224580163159731941779290670475905774711449587324396052040903560867749633607269786383362511207050385233066787151038662750888189396417820848864094163550696516989046092304161178546471108800040333177562861096097669402728598019472317127433242097596374209926949769666919449022650020469268773013778291584111777734801678122336199306707466885245484440238800072649836711310342917062136424156843313918053232383983078468123706545170731937525394324743353102231318881796761219340335058271096924509959581007125101692341639032718526132731465816895432810824251550267187134476525004805214087356728063163982776436973281937480367061490759085981747339946738833819701910602521740453589700326016152713271589647731441404281010739627169860256321696918143984628976348066263640404724742103943068890300262217919407490294185056643193778672788621514872444857040570417491743083668801820211916799180279149123365031855739327527333088498161734020418254440569737292101091210357772958736197407944977294083500388828156900799618885648926774368028577963627085062949536784319273455247935719907179765485929514896555210085742609479677331538755145823312735881427161972974752998566400151194369472948682330746237551435896015230533986496331433897402923227963168267620139539062424101002664413774030587496049713880031234957424411170400692461605233008783471512801605298659812776385852174133626209981186918938358345653057146829280758503052663152684412143145572569203330345681676854169401128235623310323455220016266200412727026684927816836926266791942439320137398200185642991418955464718939675339859727226028984577768619596135554459532721055935991298244358265061294663738057242475692460861527669477565237601695691691877575077509877316632375206719112645395824232996123929118615660776830180353162751919847202804452994454045882395557025233387374545070083797953533868365884599308144877121224106120864464121937933917213846371733319958318928844743660588628753216510072394367819660276153579065026923320200465135622260332133326790916912968206896304595976989601528304064458567050884821874068569327242388967568172502936668476374070466511317019575209348088040354641188892289787348206240433877593443377351012788990782745082720418094253843066182615519009334935552955266684858475485494938494967552976557793389120050509603720244080853334662123762719793723288604484467147679471941170534997419483368784944658587229478672681938138968282221403428105437551913127361355898698289624008368882129842599996702944503383544658955991070462640172667935141602759653551368815776369942044583995137647829628663131001221231534965839399461463026651772976511526811468953158755101980388687271069507127424565908828648868313976235679953426838583195080029733092861157150407331246858177025938607115915623640069410010572713698395553642613995001507855911638582456822041072917198751686674415946936002316231579585375014210379780938502025242931562025826376153063786386677390155167472847163910141829719442198145128316851168493735526463730798576431768575701484236408740789352058681668788075735862455978596131420928977008662021317085139495607926794154839643638696960646064044825882368579418247614851405354060662705787252435746949859486068833695557311397454945200620586897382572493191047700347322661176946901552848619336843851237375520485128070259328150932433696874607136164590619330725124114051944408510453107152694912451523749776692224397142477111739160271001055661493257893822390736623648614862400268263497424561751004005831896928283068703198441436303294281620983292409389164251515600756093175861284494043497224235994824226709698917461917863787094372023594255212399834252267422936777442893986231106470680422080051493723415218391429320112757538538152722308570014027075530844822501991820874404857371262082276060042328948543302599518455335980198371870313013246335949291371848114991467063678242040592349751000085649630969728832751513083136617133164475700823575348532001183443076306074233894249336445788755808856138636225218959783400429992989436381421511961005832721133631275549113641226868484408007284898058005197058362236770869886182300061523332360237274414046733500673667538411330822614792668451105454556192218178234854687567453892043600237068992115945877699734273688549462432595826857808760858752097166448743979126536642225144766853882164897991219139703135886522295432375281686953025665774373025556138491930286406006798907600465458206946206559399603295541764326024991786904949110480071204024813493511561562807263177679249625023722645669629485182963500555510003335448887796367378236138310691157566684115092107052582867873880273394459968866636536467871590867185180009580075210563577153824342282110770314631151974145511413151112232582017775144045997964536000603811954043472225003066247455557263394762082853850116658090037261991247692211882538771190182621125886615683314903791497925118251236601408921425321372440272474308166026376566103285492314773620130839791355348313991833920577761293186161487443714546368334266843700926550269914013363603933096481736261401808646916666943053625645047277738712426916089523675260346358278950869126866196618323149946519669426092399385520071822088538968327620951347854373933736478358464833341988758379440954439546160099695643379929492941368487698245794174994884303415895408845403336262531882986477376183597159377008643623592744228955744851179963996057437998203792488734880620325546390780235577360282627691738879284350348303931706658969021190228577090613214548879403331887319146436620250981113501638403068994314100847127956423998146619152481508119331358228736762915421760355153676599027887866998088313007968660592865811707769576845589411213031205772873869932186264820028102066026067911651743403664004162278364920630216801991357759335718017897355535376875992900410463543711577972110530813339952464979263630750562505388948802268679332820101592290211794529137334659869207531837711768969445037532706728557894994806768360107989358484976663557718022193801196136210942917405780671537338138341560189293146145018854550800490363261289124650531215691866178661123946688832836387910091158318626391704067701909442417173700506691173895530421379380710863913241518828902128499464067152291584149084550831801244343608041746464087808753602870085445324097573012361069010422206760722613567966626449015641' ) ; +test( macro , '717897987691852588770249' , '0' , '1' ) ; +test( macro , '-717897987691852588770249' , '0' , '1' ) ; +test( macro , '717897987691852588770249' , '1' , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , '3' , '369988485035126972924700782451696644186473100389722973815184405301748249' ) ; +test( macro , '-717897987691852588770249' , '3' , '-369988485035126972924700782451696644186473100389722973815184405301748249' ) ; +test( macro , '717897987691852588770249' , '7' , '98274117348321974353044780928022697503543794108996224149902690255438168118107927224939057895356483251830948245334782867413814443266637838233302304694183773324275704249' ) ; +test( macro , '-717897987691852588770249' , '7' , '-98274117348321974353044780928022697503543794108996224149902690255438168118107927224939057895356483251830948245334782867413814443266637838233302304694183773324275704249' ) ; +test( macro , '717897987691852588770249' , '9' , '50648270951104922750154368051586870571131493195253277558448154467572398239992609359412793847046346201052022004762903721738077206909720257557511103348958535839847634617934011064335949101435909492826285656394536682249' ) ; +test( macro , '-717897987691852588770249' , '9' , '-50648270951104922750154368051586870571131493195253277558448154467572398239992609359412793847046346201052022004762903721738077206909720257557511103348958535839847634617934011064335949101435909492826285656394536682249' ) ; +test( macro , '717897987691852588770249' , '11' , '26102980312143604580379781426139335779091260301758026221495303393196039344305009624874488017227324790317412920525253886011853217074287636537729904547128731845728160914486066244742089352609334182138245049106257642108402738856230144495829015803277090696341313660249' ) ; +test( macro , '-717897987691852588770249' , '11' , '-26102980312143604580379781426139335779091260301758026221495303393196039344305009624874488017227324790317412920525253886011853217074287636537729904547128731845728160914486066244742089352609334182138245049106257642108402738856230144495829015803277090696341313660249' ) ; +test( macro , '717897987691852588770249' , '17' , '3573275582766550916421412995798134382789703709314385104884818112662852238582986404829924618616654726489613490560634610856652852433199412781955936605818387336430363300497297843489165805533270350826963139013723342117143973258213022730407788251463239302985363622895194233407234360656339752537037204386160966863282760795179386609783329264325715584866656109211813856395434440166721187549981532749010960740594249' ) ; +test( macro , '-717897987691852588770249' , '17' , '-3573275582766550916421412995798134382789703709314385104884818112662852238582986404829924618616654726489613490560634610856652852433199412781955936605818387336430363300497297843489165805533270350826963139013723342117143973258213022730407788251463239302985363622895194233407234360656339752537037204386160966863282760795179386609783329264325715584866656109211813856395434440166721187549981532749010960740594249' ) ; +test( macro , '717897987691852588770249' , '22' , '681365581176156632412753534374262781125282012419825049087724194682872335055219639396310501297264530289064963157507569861612948673702326507540305843556830845144470742979453946547899015520738361534628988759199748641145113940154534539818775453262688963129311220968303038658465790258784846759677427047794151246302947777449489906933250186470399660798890218035218608642881019130459098257182422713814006185934129977355115289444874704561056766143547053999767907222964203241196702396756209771576441224761301925355900901280569802742001' ) ; +test( macro , '-717897987691852588770249' , '22' , '681365581176156632412753534374262781125282012419825049087724194682872335055219639396310501297264530289064963157507569861612948673702326507540305843556830845144470742979453946547899015520738361534628988759199748641145113940154534539818775453262688963129311220968303038658465790258784846759677427047794151246302947777449489906933250186470399660798890218035218608642881019130459098257182422713814006185934129977355115289444874704561056766143547053999767907222964203241196702396756209771576441224761301925355900901280569802742001' ) ; +test( macro , '717897987691852588770249' , '24' , '351160503938693614343626853747071562171016188034295260095490111881784318374960146045355120758560422119505624375491533176393589903573845466689382216842197981277867514717013259791763929689440964343969395781792087124646063583944648684169111729145300510135702655848244592583122673432949987979858826614906829469635537237525614665196540272658828569629679791428934101079072719564710584542576589075082850692588439679596816834818341802539921621995225917260921044846812391894365530686773081140839348912145464664288336497209664739248364322768319800659209785240272285297767697234264001' ) ; +test( macro , '-717897987691852588770249' , '24' , '351160503938693614343626853747071562171016188034295260095490111881784318374960146045355120758560422119505624375491533176393589903573845466689382216842197981277867514717013259791763929689440964343969395781792087124646063583944648684169111729145300510135702655848244592583122673432949987979858826614906829469635537237525614665196540272658828569629679791428934101079072719564710584542576589075082850692588439679596816834818341802539921621995225917260921044846812391894365530686773081140839348912145464664288336497209664739248364322768319800659209785240272285297767697234264001' ) ; +test( macro , '717897987691852588770249' , '27' , '129925342856448988764251542089065045786155911790890516647657119087489042404899060228369392822075223183739765014052360206502536732276242266222695367972367328452765284427361172142362321443004910207800039177476242301577150613859831776093328430566500496443594413224371824361420410550048411417760224137393585174427565041635390932623375118187728586008978789234310569306311929614122033949249592316841971560046372431039697669234018577505272948749285774218193495971402810317470288145379703055809020802321420732619980008200661347545521210303094880943536506460031092224160192777095197322219385161928995729071382072812239062743558406558464517305710105484249' ) ; +test( macro , '-717897987691852588770249' , '27' , '-129925342856448988764251542089065045786155911790890516647657119087489042404899060228369392822075223183739765014052360206502536732276242266222695367972367328452765284427361172142362321443004910207800039177476242301577150613859831776093328430566500496443594413224371824361420410550048411417760224137393585174427565041635390932623375118187728586008978789234310569306311929614122033949249592316841971560046372431039697669234018577505272948749285774218193495971402810317470288145379703055809020802321420732619980008200661347545521210303094880943536506460031092224160192777095197322219385161928995729071382072812239062743558406558464517305710105484249' ) ; +test( macro , '717897987691852588770249' , '29' , '66960601081613218995545615402693600374639583627057873894478996761235534940521876203825851640372285281121028022306706156922783036648760227593129124026972625933013798555768937762460772142044797003957960219229519539565564116948220691395428662251667454449762970671596782912888080349684772071024984546225188460055852555657228531306371662448557023517396895942248714935653633379580289509781187157995620922388883890668691615375469973820302219060616733583757178470584754927697520205194864258128911605585342110346435691476086856952623133602717988980966508297658793357400697431392332924229866368079543112854041068400435054566433206423406557876970185985505776428441038078323222858222598473938385526462249' ) ; +test( macro , '-717897987691852588770249' , '29' , '-66960601081613218995545615402693600374639583627057873894478996761235534940521876203825851640372285281121028022306706156922783036648760227593129124026972625933013798555768937762460772142044797003957960219229519539565564116948220691395428662251667454449762970671596782912888080349684772071024984546225188460055852555657228531306371662448557023517396895942248714935653633379580289509781187157995620922388883890668691615375469973820302219060616733583757178470584754927697520205194864258128911605585342110346435691476086856952623133602717988980966508297658793357400697431392332924229866368079543112854041068400435054566433206423406557876970185985505776428441038078323222858222598473938385526462249' ) ; +test( macro , '717897987691852588770249' , '1234' , '240666810925796631497300464125793793876153875629096662520743987128655138300518806793333863505002370424150325835897522997035758513508393749421313311380386678245885529902936330574270897824424068780701595312024191583797781168159472099893770860328570371993646844140203799118143686616439077080118602046330501107174223757814456182746333086177504034894868587120939461313455507702811247120286468199645215838215144781536578745753923838005482894245501661797497042343390617151204343021554518498735362447358070369090432988690834865403291509113944458407089222159417866640525805032080821319406442026747974929325112928921447323232212274973452975883062343094212146738595192633791120734889354763869347495932575155161944862722200405955280366430399276362677049013925041871227530264219143440107033389736110114624783260190579707152045014476353193813168715289380838132597179842738854542064339183902073367485289715584943627672587668112192162491400086760878390153498140343600949752356890781346460139220027272654766196351251998753435700609187724419282733374517073505387635776141937057086008339977487598351396266355557385114078610220987097361567756363195532914764004598634407992908600646589647778700597919884751054929681098369460031512377150901578312180257824087931889292083387179002094560172630492173743471238348161722683402811331621904068461649853237649098667186022410987655766907338482317060412259815938817187300402820360378490149991171370482329371650505043884192332467954232225473438096361196485730615702706338896803459544893784510590248023379843299267561024474106199710926586300140256218142748793677805122624858592543944305974549597571554026676016225109087448889480206990407910658105566060532854331549685512672824252906121631110818833232354043403137418311925998804066986754875440423240222092764003746250623404175411263344414954113517360947070716557546634100780648355973690014553189027477234402720353402501541699079073208241754265407813302554719501911786154879576504690648777330790234360752380718909924776795870591070461878764685781345393089291677007084060723076292423331888969906994889802559722805557544432185305096822014262735051471669354024897723343139333199330147964590265703488059466191857192410897868609291384108526636429139154008874646743040881795937998168293882623621583556584500036772108578773075747899050834512563302362032542587715210166387236382275419681547020073143476402676839032589356933008399060939093631291937107000000043323532799137849647405096232083364392703455257640562906669605316805575467472071569944146598547468221559924113348400144610716847685364347467929073894879899123491301645104075537984420168183636199226629624957989433534137128744185230344994592856898029628268331117744171243766865397230810342464227680605486409079213386036803957679866952104779315664126405241076356017313310476722815126991777729855840510871727519397893209033487330193378894526790670497601404262388611693537246084432220039998668497909914891728825779959838738394310285580938434539221810042937887451215631212371491462951157863268559393019049906492412696634901678674798328369463166268199126370427527431576741235550771195727247585539256417952853329478914515539806021976444112084626581019338193239617668568672517993467174255845823702683834750228698628538106052353376750716489661771727612994518487692989696065706319916267876683157185246663635313221904866416368381426519462074273529104434353847460205734702566140847713395645548499357551950806690743433954202058581687009317012817649884159064284249335591683480037524895848927954651846952405664224327697084573143825212146169786019851375852570935645324673501437526819689862546523710166522763874255457046134768878318504847569562740775920029079242062671507739909787305724552670012633097279820790400444955953186180036141498111027556284782611831968632960254971585279229009517389124640521071182508552930150093115185298823230740659868195268121798981841121508518238922062146832778512233130516701388382270437021078314304384358232872632935033731255504313450018207186652992855974803423357233611324893304082721355054709451741004386686923054310723261481499154665026674935888222845457736324171023246366147102994195305848085588996476494973007973902151008585594112156233214360569556745482837925015827621067498561246812344514749188513286706401554080345967322077722072126008109427433431070325726521163012868148649582784383995723396360310319509595957738338411942892357400728388524308685812413893999404967999249813865349937751377717926369301101787921984260122186159989136656801540380770978320766045936205592959488163833618604355519117056970124007977963289037930079739906574432060855963578944486246793175242282673514112660912407087562188397053739993885193130818225601480302627529684348527769410385079008546741019828845532655444621234451156249631617457720152180989156738006670404506338571918208165921758803413253593685587469101580701192606017766650438994704981870117413061535622136601016979952697317238276873256779729419028069631432675219491767318800339045855442030264560075159056776340091166641523596359578961807101748144945138318607039052076486075699577782685718970588115246184745849474239861848227033647872319200256588719967644217877454602724612457063846122996574940120482768446762101146242787977449369937867250832112867230692912468970042855717280755106531667961937332446742078258774278002352847604203619178315262206430766732415004556722421674647346648829974839968356832918027747760706008251337997576672550889603071310089578634747901944072670071985016123486885045817879153495396347705516599056944513760289619758242073133217108261158438678792867348399912643882264938522086425924074531699941057823129668543509614970599670225949760759593973290456515031451150061095408009491932533974765354150005121720734711745252878859000575558573436139695813170049848899622852245653141171375285116196880631468001421360473881187149476805269342296424485310215470494796178401944348619754324798206578015187379609260920882768561974442771209643829629212007051116346637625763873106848673476948458383017883010996340518563860345530523780019175023658557801658436627673907676975971882109751635784820139654624656191522441490775749907596367211611579452627181067685977845460985237049896675479606151704752856005151770161591738112961723993454693092539303522485285732895462643804740701516376964927670122135657823916458074535855817547513841507607015010962514867231406668733574660708546812140757605323461188423370665178218323843285796646737709047020502755313516962625148241570458025214707284812497971943815765595261077725596928727447148413360293693704268976245064190940961850889245136042407154085469838297857292187347035492359540055492227822512458140269037567546119976309595685267059328503097802601274596051953728897555043442182432638912118214086596792857025735173692744450906559633901069848611000152694981799908562674080212673483483714535683816021391478836663467848746594481778215255545090822995407416235269774848665232107297962031453869358953402040347982467139283098108055610285820589613275368865515242210501491361858362122708451547647239066214844062386833772040444917284525202881555120247439897055373293814403955325754500816079489668326796664509455821614956472480002144936394671934338050270783459361214210050599756870439116283220868124998006625761895550396584389321270476762755086709308051601531689562716830791751872883137993455070471233464948461931211369790177531373113631239997994291418256714478265196669753238257830553539691807842745455955136875773828554605336260805640377757640862870194935776092004134130289520896834858656317913097532957724133151945092000859020920237096913664009534675855229755344172129957141641791984538395100720317980525185769142781585509930975604069100811643163009360481907738801078884830886276286316858755498443168347068032348883021378746194698784811802339515331441830238719175466597762050420975691354490653471436861965025398816127746666639354864324232964949049300538005293308845940271700888627199662903120034287206034687813252949705816491402178398645719387809539644872118409461401883654312922279080211009210189799876128819902719937084606802972639337531957278291820852311932551591955350790335928152884811433450537315845604917323956883583239480347219971438941586085711934485815121967398164101784083619826265891401802416571741345090544188799381856839432343498457496360597455526238460117589115787753968612657150077978004530794321967803330389249425352563744925321708518378671586645666604614530902858059020840074105043307623670946950043194604176031013849727052783428735689851667778432798381033674827978887751236650974118849759189503239625343304532523005839417475498961072873029640889256489519703706344292253527801297251124450502273288023521577486079679697498402526688946738210589004011833446500132651961861200853340654900269802660034733678942996167533210265105504648979731317667399933165040919109758988751189548962159739945527299915654716346246041095050960741515495587998776985363865506374140224005340645853795347072152325663672271845064723399857372941894460100333264447275387920605177410030429482678126703784114018103844023345892034742213333395468046660012665242882251447818527188389084106839211601891516465629590896364692175169015105701572123182161899801710734441225139364024469426754491100056297212476895075865513734972712990677136692220035091504362225897411284355159962673082264518469172649285965322881981348609178818294743174542244219819932183490365756919330710479957613508601495497295676950329757448944977362883166111823279769434700959568955927643656859063742327008267599164937006804048910677286568538933031439840564237461535941197796390759052457284051017778672694027120426633268111056448896881308374127555545225553090822535510692077989067554686838662757792829768851773704480230259292642841141429771977100764471997993102274545765814837384547498350869645999651843659166200886176115555346289903469340446739207010577645167542297460407137062960215028382415884570633157792532691792641314278905490923087079766067798937780659109451731519734592939579025164926515523248807352103381305168229367358321432773551392789398713507962778942820119469523225162863178680183911570348027961700553229115316563272964376101119188825605514991804081027954389921141273219285131032169547368944389824308436381941175515798111830481000043636844809228835704445068305252750582078049987152297826581119584963878880864201441342341314647264252390676175707582693479476352854352886370525502607349886832362596404647139600857534060227964743860211405500060294329186630176879724051222152101141867575359408008501674175606199047463432213378831599134528934108281929480497040842200684432006775368915613194065693056672838195707429303679749464784054705434213357415294902116744802057352193718342238545126703326661042546563491168121691269341550977021406438785288342043569889077634089317033122541296230748114388665029044499469546397108299753200706114193470635536895967048169021873576306364846257373205822028138269759764442484817509279075026743603019509097159849066563284407999202539936119877761212471543147933987133791650432393675308321559611393751092509456575599446737432047081189236910050329727334141146991725988700140584975269036834508080148636316737184199462112708124889925362377529178344014590919552819769657577672702978011641143673156015114065926314546589192090878523676668017033871729579063980669673546335286849239147941679867288782496042348838505520661208416542384402601836938516863582808398758530009389050063886699985783925267497452701039388970042411071173551559121683897134217799905956381777617760035612136975496448360169358472611166991247066660361258257792717955895802886807621142240955311727190733860080248699104145339409596193747533219052958194006816842395395133815227958447183027408201887154248055155515252489593725880002915429087346780489686173993006485543412786317161927405570384085201230519902078033355645726810161924247926196020315576428292022629241922920330634879366713250236205513546588717366123436426532878032863695637071735051269224304497931038322951508526569846253683590423751042200651378810558188601895181845187598166177418938407685219535673829472096697071612870362277436920342738049215807079089141509386167010651751786772439419974350420945450780317330425760939076658378846814831229353170269675745570687143370733413098798744099031911520221044007327256897909622230050896081391104380973572938318409605238511264413423963577109959485446578175113776603615777667633293449071495602382745493460804765597670064823587149295646560929042625803334777303751883329502685780494009410515987822344496036156411290474009548223625232450188758230491801781290987433426377664288677071271225318178134265723090953908487368210301890173799337794414289839164334384499838476694064042562380923392170814007209797114936223969923288492450317383650369779029731134714434936391643766311336738629884184770965675076449262359336759950385687723231779915621937147640435620959355327348891883061403815008875737737458441613654230046515389312374996035407943181440498220354304355266414125515658969508581407533490313522890987856883087879602650008064327529989955508937331955239874722401238624800305487314538069958888480061378318398494570408743929545890698144755401436645575305635886766888309290821752239252465276109182753977002117165726763101082508643896734872331680782581238479701159334042497390606376542941582331808271248759018721187949059390620081627947668715490802983617888543466920624132979650708704245244736734577571335364024219584348266021595514151130896017976378599765662306270194051912298827281348333359149495872248207397081180112660679500488646194492335713944553578485524340274065812575443967506816413669283541021458439360404721464264498869630723885583385346819805722244341238149657763492548458459521747402931332148061021522859079768700468052335856043104242388423745990751764752080395046941015982884875151539581000878641435603583824562615084914225729901628394177372130985466208762313918008648944381048427957163858317218102829834343833633544901126931143569398807905684970202348964194612275298885061923925145525774876352222523781858372282001957198274173098329010279847291113009852613678253123199322917136025127117154756978089704874006129913373888341731677935563427208491533468982839070555222905600716758864558055015455443368534003989339266991496574749087456141207063618250411241902141164015442390891110956633395370303166431966298954503533779086717784121585666343471909838926386599682823714314774096149220614537617503626682222182615668880281733598355987215201453863347388340090921698878129884976286937514133684565405410347549261471700192037533086493793953508999824708254409983739425082813111045769624535087578645427477116700686622592971553298713236705554924227547844058030634294043977065066654988266829751374105278390824121371044031181008428048205223923243651098135005092948487395324912456217052331950187603567228183420265978222659169332375919592362911152011838702189535847577763714114425190514299564739774757564037598485982927812147173140747827430978393017504243724684098500167685714749941846120533181791178220367836024729909146669128836477415610531307171288054524223649506374655503312084693854015857030163886937766181098823169023181572231477404931598733389102380674704591127778547890467262756173574558080654790642471369332640892203135294330237246272074631760017202872694312963325722611729402358297429077465902624984852437593479190867737167006749083009854670384065327519801302083242691293439616132893416660268947919201637739258769771607084518793369204312869826490193716352930819450570212844033786667236068075375941453964216107149779664323628747272497685794971849040594638565097670630010455310220514277785818284186463200618441748478788591987616681646033755321959251953987293706031605827100615706433378711983560088154239750803537349035070283423517350889381534886372817293834165533055835445256823942303051891255521175486827650886133221071633589921707722114526609240665260264492305806982431844042679579783582551609283040246523428581845720374540737897789979786180180579009825935175015723992444590406056732840128165816199908483281974729283159640149821021618151095300252407271226953926728439712096665201813821962143089789720545389677608391629805852569311950851389264151131224953921752017840922075938093985062781184787646406285721393870539756657767030925030053022461302204093227393963491255643017235236360807076699601286868224950349231983608760919780584266842953210668067889511328397050532424837545546721403509681669483144282692231815703147470176852156718005759125673967988457229048839619145997585270368102435074595029990094324102493737818970275642575407600875588537013441673454455861497898836728065291478392070865090189959309947742444986923526745948057899128034232868017159368271694223700039666236730894705407231009389857561190687139334624948051152611495443371208819706799382667564652218904459544669746954713753183826624347921466724650586905939136598547335012617702607014113794591546834254696563524548343500981096958481191991323022742758572702244370470464413665803392605126994943740602380225661619992335366449312159389272554547255369597536289533017879667844179574297853538262473990737634615419535991688218597561417950967595509116168022993443293531295365421530990278428579503023488689022645550899786226625323338180515144059213727584521215321722089993299184212218054163465777614637889378688685803879328452385390951350548924489120271418100487678768868428228212387228503799518279495595264908243662176970443975028752029355061454695157141184819938299926947437018478957044395662391617808375468649007600370172940115843761412592237460566795143736348519450988859101853660296226210668299394693230720927858276964586740548558363904065214488088226818002415057852903743836014126022876012254536312345404960062753442098036019060443237049994545797682297235099797863438436593216207403158412477892107575374686442179451430350704320791891708254315536860892520182634206456725864813704568320562591782038671811141093425946482688159934297090882997856490197026962532578625837338928755211465291529523683918247460452910194710972484675179153177104097104259910518268539520304289744878391349554947980543388976876106090112798575825073980240911865137171222653996955929253877954855333315507869969643594964229605539468134884245036416894025484737992830203554155653978459691014928198149428959910752989307071317377965664300905553289327994588549850950284644007080706241112418494862133916539297959029131158062514264923394985650739154621700845808120916284537924609624030443114218948985698358239949762635499673659005627824880546112922811671183977198549908295009183673236341667156736650377361061056737332063403410177715559814144656394550604447538215779823278536104712565326761405690441339115296210030702222989203489845948281369398678770779363415632864910236794328437692624022552548328392842615492736782204301768665965365930746241254165608754964908497067499545759985298460945344650446835792542841082131510112938961881927693248231120221756864036707731726487325938077272576650743798183544800139162905157445216386915371613768879264078891644381253089581539609558090983181521395649500355526541811118635730569046931361684921810261207373485062516626873625896376115969793729107031511621422445382850451172374270682693053568648031104008891817274572963359437128249991844891468313131004074851541435190896882353764875480896554449408432067645595533709041759932190996007431454089967656531249566609171679862639011907239936167049017771581006836981063193553563613522749187290893357797646951653930745484252566662895227296365515537656517639786730623586151975310765480540289532531601949395336304927562830700960037825411985561643821347883034995939999815320371904489018486314948455952559263146409710068471713259502647267478001977847611896061825935753950424233795977832748562746151379388667659849662204204370582406208836832264614999774576849343391530101628342373099807709619251009982948420174200692400576186926512032915961194241973580587141742017725523177905799155980685544702998175691236820149021743148908860959473955326805004843786317283255788228027783973963775307044681831745418957729607897287660450576165731690039127804414511168095180765758455897687743007250305015608713824106966239837615772559788333446260389735144551194566097856159222619045281993121036130544888850748533209105902290817972040683491743672438537427407555076754103740470470519996488106893988963679893402926779777315510136748292964498716616387480928391333727613516511458687653975670170800714203116160576633121381876444223289818335512535646590900478008372238152919598466400554972447258395277820369798167170321756327919408066285581702239995204777287480387161536727459448442509762680258106041535327214632697312513497219121039425133532472242095253942361432227842877340347922588175651734262339738440446492272637919578131157514237627203984698773116783796765212222546280365874311759355831644675241116934493294688108999510961605213084570721687715849450396639049106141887860856148954550750471455629931627105000620532269066137825781316017603220973433261333991034567108467510498624962642488699169465874363399488868154638948242465984577292633553735556852420099382096738662832127104872725881996505036610995572650123609241043781086883738614012464955179446535377004978611118562176293167638027449612637695085975726247778121052711332364566219200112876185845464416120363602708440087210524126961712756204182189211477418943839212507448032291316566737926226650207942465800405168687099249273393069060646360798873617365864441322829730079901581793477840461467290903920089953743513557150545457465001493281676469801544541444627173505187869563691796834575745981341826378231855942604285683577230974772727095310465725871392788376171498988325165587658459242478209763818343931715246275249033847544355256625769712507232847344158590312425822454135201105768865080501413412277647350979797597165322409320114702032426981288520271353130012171484594553991124856728942246176555811779216453894275972582641573921036716718553318429096852951098778309232081644343337035691135410384601765183315931601762146264393426528312050751636769212945201832547953844492774251628393141343106226795356284876139469403273284444586014152400694986734961594079272858809061960949904448174959103909564433761703907276125412354892775335876415272646526126192989549857858930065881045254576136386486138517438556555308338685607210816131204906145887848650892144421256413442786428159719389978047391109134257790046140655520758094636923303925473166438103154754510983147606737926330885845999568999353851276202586739695128035976057952375907156376600975164048300965313860942704588148212587962879654957903805340177854247259711308541551603503567837780970461451995771047865665783511661730311276567901518165972850520986636796137347177492175264790310493561351654339295597668712467832251955744640272444007155359474048804304065788982945928352532307632627576930665303670890426050955025688528627309916477125616012512925234970728304675990574496468777227069085170298364495254489068034897491392933909636369331527636742699013284766902371352506091776350995292002731244023865757006858780469293597018620342571723772179977093125789699475496105523743724832176529540068144093345882387953940656084217900519955099464578748726508611651485516665622261135808230656113185935758123090731435124996047414425279597354359574378856570913306377601759010157157490619551740940998388274502844305091669547119876233489292751989516078837544062423667004292912251992330172087279616497346882233046859736081564275972335625958254887035338484716664189318473872485695845339136606272315059741608927734938768821670382249825317380542046557829438761966527834167384855716224439462405323266438326536377961771823507569459750423103138290848070089339750740358977330113970497456562209782789816756431729085281442325129945131381329920983439892601873489278892739994343671536564003094063601168102358102060511646184488836555280866265439572865577916493719868641514516664261116535122724396782278955528978764063014169535540654859120299172230842177436210545014476071475600058330214022044195137271228882609806962913480150447375885450575324750279251402851061941914287093134507336790423199888450218824466412490267199774666086468918833734387337497335144015840693004008549890781493464193192460097751739334161380017888359443004786038046374825235310856409598367802175188078401652900630883502414596986630872311085261238505708931003788068325087199867279768495262956883650359670743609352716895125122349956601558456299500231541599105539315180746997839621279353395686142155700423447977269222089468138684489318419154262504409821198761325705465328527695537157420782082354078175035903462010430134986159387812646272750962009925857083492829567970790332465325289206689049063764087436241829439763284627544144883357167770069639466367471860398862788075053410539365200406384307372970511564096399841314435051459484946899992507044444836354985269418541366246616097379154763081470481918007310765539689731840724466167823996718641044946480569623102013135147003272739284086213587006083417239308558779132947952435879189833909533561483821067431049890268359556509392353401539333788301678145208658937272723188794578112686709909491108016192828130703303524780820687044001344046854958188080136806595303293237463476504011920463204562731540166037081435695648333493988584792808470211132901764592133330530980096778425332932212735837577215893864016217901368345444882023496497506785629435246203379531538457462340173890359032774939687844147198184957025212849427638320378720167398909916718917724985900920192030214246493573397230398365110417352778733527631095124650992710118667623539554692566783429394136221716928121159143717386855853984409631021985053790618629812165917024946228153251349408767853192940114553370189242241369551007994010028856078603666746043453656590118761983375709654169884658816846754918144899815282484040063735003947309015844941305847294632029009712335365639096408778574091927109550299652681981479767150215206743081866358869114610816772333138477417708074433283279303532825808874057642839515755856791048739006988848065926839028819778433988669939558066650036824490486884666934262276513630175045822348774690095228540301868104997197326328212569850060274724529767914857676420841256961349265084840795236300841400994212367633572991161913691050780025455347823394988202788101768864502813390202856859126972599856839543990159365234030538827346354126800097285185924007284964690706128142631879645458992663766048427439769100788649351932617465546902567125707865370814068813860587244367746419075848390538678832569432671471062986454254204755506074801888029161552920066319891531957945773273477214975812022453730709392776469844678661783580960787047698418293376308118134867752848112612486402593064704496634807094220104296663754040709636340404817455410880891536467187831977983640996849951650389805873899168181319390054320789631028913388232046260307268390249991322854583613804193446810865918674501358892715568404694072865540886401726893184784714501860380117604550931574048136798023258513596201002070068810852653249151000051456727886861808962487581377647552163976398924881561622659417081146106665646072744668498044426052522804636851043773834785399184804744620318835737108437901882030516095623037578335280017150548691261342926746197516595593226496924022045173580598481046504353473187019615999528239277638114058438415735028254220037867803763085393466530484468108461280119649653140359265924176687880191882252356096667279055875924399802049955390469540917907333623282921659561338713671919571784854447264751582461161121608220632552535539574811239491907977080055351867435082725503419467499187011802283659752233542349669207811280081047966667824818523441274660618920625130919101015888482026053951969439894711895548441586107366790258898741612638693297959237922447608589158095992135723952461923994687823650465896764883667052137155194576002906847524103760645387180490146865124538922972372819826875923731390254431637342915817358546048808767134126047097505431381328118991195760134187889545091844395783645096128280496313025953970498006602276712809536127205652543720418045709969402565206329936420465311999349099261495766939883753463147455929093001269063984253071712863023553747896664603639453734132845027589712104259060427174009223665700657893713650553018587778453891754253151543028835750947685193000377825566600933648482508779760768199662372049766387638985631992100720003474151721375703211133912952407983355924232680111677587187241552829353741946423917448296404338549819202048685814597880693735805572741960307139515943152276365487150482922514045581253293812970267225644349179074560531877646062461313500613224648092931335926366379056886844623491593907009953911828052093623916145953431995773150699039217050325951921320241782503621522257361377451082489605564890402097866814491505081488150019983296575499211151451554027366425864934924114301930078755148355932268605394003602081353485970925801149654213968714040128138987924299507789192344817388231539104117379617054404077042219865132840948934920651343894411168095993753287475595036673571212995962900134686846347787877484062299240326083529798662229832353356661104190733708040289237334415143318464007457016765783370725688178760684007631997290723697308539152704845065598303686071945621892934023531809446634995403272958391058435649685487542623361855343322082521933633876027950702259029069185899906864695622617535870612593631958372152800863964775616329570345552185613467025464216600056930056849030169878244758163240995914072907600096163507820815348734058513665059114508068178367617804243332753749239571295040855080590873111579164335770288383740923440579367884707497712423043388562508100574697765074001' ) ; +test( macro , '-717897987691852588770249' , '1234' , '240666810925796631497300464125793793876153875629096662520743987128655138300518806793333863505002370424150325835897522997035758513508393749421313311380386678245885529902936330574270897824424068780701595312024191583797781168159472099893770860328570371993646844140203799118143686616439077080118602046330501107174223757814456182746333086177504034894868587120939461313455507702811247120286468199645215838215144781536578745753923838005482894245501661797497042343390617151204343021554518498735362447358070369090432988690834865403291509113944458407089222159417866640525805032080821319406442026747974929325112928921447323232212274973452975883062343094212146738595192633791120734889354763869347495932575155161944862722200405955280366430399276362677049013925041871227530264219143440107033389736110114624783260190579707152045014476353193813168715289380838132597179842738854542064339183902073367485289715584943627672587668112192162491400086760878390153498140343600949752356890781346460139220027272654766196351251998753435700609187724419282733374517073505387635776141937057086008339977487598351396266355557385114078610220987097361567756363195532914764004598634407992908600646589647778700597919884751054929681098369460031512377150901578312180257824087931889292083387179002094560172630492173743471238348161722683402811331621904068461649853237649098667186022410987655766907338482317060412259815938817187300402820360378490149991171370482329371650505043884192332467954232225473438096361196485730615702706338896803459544893784510590248023379843299267561024474106199710926586300140256218142748793677805122624858592543944305974549597571554026676016225109087448889480206990407910658105566060532854331549685512672824252906121631110818833232354043403137418311925998804066986754875440423240222092764003746250623404175411263344414954113517360947070716557546634100780648355973690014553189027477234402720353402501541699079073208241754265407813302554719501911786154879576504690648777330790234360752380718909924776795870591070461878764685781345393089291677007084060723076292423331888969906994889802559722805557544432185305096822014262735051471669354024897723343139333199330147964590265703488059466191857192410897868609291384108526636429139154008874646743040881795937998168293882623621583556584500036772108578773075747899050834512563302362032542587715210166387236382275419681547020073143476402676839032589356933008399060939093631291937107000000043323532799137849647405096232083364392703455257640562906669605316805575467472071569944146598547468221559924113348400144610716847685364347467929073894879899123491301645104075537984420168183636199226629624957989433534137128744185230344994592856898029628268331117744171243766865397230810342464227680605486409079213386036803957679866952104779315664126405241076356017313310476722815126991777729855840510871727519397893209033487330193378894526790670497601404262388611693537246084432220039998668497909914891728825779959838738394310285580938434539221810042937887451215631212371491462951157863268559393019049906492412696634901678674798328369463166268199126370427527431576741235550771195727247585539256417952853329478914515539806021976444112084626581019338193239617668568672517993467174255845823702683834750228698628538106052353376750716489661771727612994518487692989696065706319916267876683157185246663635313221904866416368381426519462074273529104434353847460205734702566140847713395645548499357551950806690743433954202058581687009317012817649884159064284249335591683480037524895848927954651846952405664224327697084573143825212146169786019851375852570935645324673501437526819689862546523710166522763874255457046134768878318504847569562740775920029079242062671507739909787305724552670012633097279820790400444955953186180036141498111027556284782611831968632960254971585279229009517389124640521071182508552930150093115185298823230740659868195268121798981841121508518238922062146832778512233130516701388382270437021078314304384358232872632935033731255504313450018207186652992855974803423357233611324893304082721355054709451741004386686923054310723261481499154665026674935888222845457736324171023246366147102994195305848085588996476494973007973902151008585594112156233214360569556745482837925015827621067498561246812344514749188513286706401554080345967322077722072126008109427433431070325726521163012868148649582784383995723396360310319509595957738338411942892357400728388524308685812413893999404967999249813865349937751377717926369301101787921984260122186159989136656801540380770978320766045936205592959488163833618604355519117056970124007977963289037930079739906574432060855963578944486246793175242282673514112660912407087562188397053739993885193130818225601480302627529684348527769410385079008546741019828845532655444621234451156249631617457720152180989156738006670404506338571918208165921758803413253593685587469101580701192606017766650438994704981870117413061535622136601016979952697317238276873256779729419028069631432675219491767318800339045855442030264560075159056776340091166641523596359578961807101748144945138318607039052076486075699577782685718970588115246184745849474239861848227033647872319200256588719967644217877454602724612457063846122996574940120482768446762101146242787977449369937867250832112867230692912468970042855717280755106531667961937332446742078258774278002352847604203619178315262206430766732415004556722421674647346648829974839968356832918027747760706008251337997576672550889603071310089578634747901944072670071985016123486885045817879153495396347705516599056944513760289619758242073133217108261158438678792867348399912643882264938522086425924074531699941057823129668543509614970599670225949760759593973290456515031451150061095408009491932533974765354150005121720734711745252878859000575558573436139695813170049848899622852245653141171375285116196880631468001421360473881187149476805269342296424485310215470494796178401944348619754324798206578015187379609260920882768561974442771209643829629212007051116346637625763873106848673476948458383017883010996340518563860345530523780019175023658557801658436627673907676975971882109751635784820139654624656191522441490775749907596367211611579452627181067685977845460985237049896675479606151704752856005151770161591738112961723993454693092539303522485285732895462643804740701516376964927670122135657823916458074535855817547513841507607015010962514867231406668733574660708546812140757605323461188423370665178218323843285796646737709047020502755313516962625148241570458025214707284812497971943815765595261077725596928727447148413360293693704268976245064190940961850889245136042407154085469838297857292187347035492359540055492227822512458140269037567546119976309595685267059328503097802601274596051953728897555043442182432638912118214086596792857025735173692744450906559633901069848611000152694981799908562674080212673483483714535683816021391478836663467848746594481778215255545090822995407416235269774848665232107297962031453869358953402040347982467139283098108055610285820589613275368865515242210501491361858362122708451547647239066214844062386833772040444917284525202881555120247439897055373293814403955325754500816079489668326796664509455821614956472480002144936394671934338050270783459361214210050599756870439116283220868124998006625761895550396584389321270476762755086709308051601531689562716830791751872883137993455070471233464948461931211369790177531373113631239997994291418256714478265196669753238257830553539691807842745455955136875773828554605336260805640377757640862870194935776092004134130289520896834858656317913097532957724133151945092000859020920237096913664009534675855229755344172129957141641791984538395100720317980525185769142781585509930975604069100811643163009360481907738801078884830886276286316858755498443168347068032348883021378746194698784811802339515331441830238719175466597762050420975691354490653471436861965025398816127746666639354864324232964949049300538005293308845940271700888627199662903120034287206034687813252949705816491402178398645719387809539644872118409461401883654312922279080211009210189799876128819902719937084606802972639337531957278291820852311932551591955350790335928152884811433450537315845604917323956883583239480347219971438941586085711934485815121967398164101784083619826265891401802416571741345090544188799381856839432343498457496360597455526238460117589115787753968612657150077978004530794321967803330389249425352563744925321708518378671586645666604614530902858059020840074105043307623670946950043194604176031013849727052783428735689851667778432798381033674827978887751236650974118849759189503239625343304532523005839417475498961072873029640889256489519703706344292253527801297251124450502273288023521577486079679697498402526688946738210589004011833446500132651961861200853340654900269802660034733678942996167533210265105504648979731317667399933165040919109758988751189548962159739945527299915654716346246041095050960741515495587998776985363865506374140224005340645853795347072152325663672271845064723399857372941894460100333264447275387920605177410030429482678126703784114018103844023345892034742213333395468046660012665242882251447818527188389084106839211601891516465629590896364692175169015105701572123182161899801710734441225139364024469426754491100056297212476895075865513734972712990677136692220035091504362225897411284355159962673082264518469172649285965322881981348609178818294743174542244219819932183490365756919330710479957613508601495497295676950329757448944977362883166111823279769434700959568955927643656859063742327008267599164937006804048910677286568538933031439840564237461535941197796390759052457284051017778672694027120426633268111056448896881308374127555545225553090822535510692077989067554686838662757792829768851773704480230259292642841141429771977100764471997993102274545765814837384547498350869645999651843659166200886176115555346289903469340446739207010577645167542297460407137062960215028382415884570633157792532691792641314278905490923087079766067798937780659109451731519734592939579025164926515523248807352103381305168229367358321432773551392789398713507962778942820119469523225162863178680183911570348027961700553229115316563272964376101119188825605514991804081027954389921141273219285131032169547368944389824308436381941175515798111830481000043636844809228835704445068305252750582078049987152297826581119584963878880864201441342341314647264252390676175707582693479476352854352886370525502607349886832362596404647139600857534060227964743860211405500060294329186630176879724051222152101141867575359408008501674175606199047463432213378831599134528934108281929480497040842200684432006775368915613194065693056672838195707429303679749464784054705434213357415294902116744802057352193718342238545126703326661042546563491168121691269341550977021406438785288342043569889077634089317033122541296230748114388665029044499469546397108299753200706114193470635536895967048169021873576306364846257373205822028138269759764442484817509279075026743603019509097159849066563284407999202539936119877761212471543147933987133791650432393675308321559611393751092509456575599446737432047081189236910050329727334141146991725988700140584975269036834508080148636316737184199462112708124889925362377529178344014590919552819769657577672702978011641143673156015114065926314546589192090878523676668017033871729579063980669673546335286849239147941679867288782496042348838505520661208416542384402601836938516863582808398758530009389050063886699985783925267497452701039388970042411071173551559121683897134217799905956381777617760035612136975496448360169358472611166991247066660361258257792717955895802886807621142240955311727190733860080248699104145339409596193747533219052958194006816842395395133815227958447183027408201887154248055155515252489593725880002915429087346780489686173993006485543412786317161927405570384085201230519902078033355645726810161924247926196020315576428292022629241922920330634879366713250236205513546588717366123436426532878032863695637071735051269224304497931038322951508526569846253683590423751042200651378810558188601895181845187598166177418938407685219535673829472096697071612870362277436920342738049215807079089141509386167010651751786772439419974350420945450780317330425760939076658378846814831229353170269675745570687143370733413098798744099031911520221044007327256897909622230050896081391104380973572938318409605238511264413423963577109959485446578175113776603615777667633293449071495602382745493460804765597670064823587149295646560929042625803334777303751883329502685780494009410515987822344496036156411290474009548223625232450188758230491801781290987433426377664288677071271225318178134265723090953908487368210301890173799337794414289839164334384499838476694064042562380923392170814007209797114936223969923288492450317383650369779029731134714434936391643766311336738629884184770965675076449262359336759950385687723231779915621937147640435620959355327348891883061403815008875737737458441613654230046515389312374996035407943181440498220354304355266414125515658969508581407533490313522890987856883087879602650008064327529989955508937331955239874722401238624800305487314538069958888480061378318398494570408743929545890698144755401436645575305635886766888309290821752239252465276109182753977002117165726763101082508643896734872331680782581238479701159334042497390606376542941582331808271248759018721187949059390620081627947668715490802983617888543466920624132979650708704245244736734577571335364024219584348266021595514151130896017976378599765662306270194051912298827281348333359149495872248207397081180112660679500488646194492335713944553578485524340274065812575443967506816413669283541021458439360404721464264498869630723885583385346819805722244341238149657763492548458459521747402931332148061021522859079768700468052335856043104242388423745990751764752080395046941015982884875151539581000878641435603583824562615084914225729901628394177372130985466208762313918008648944381048427957163858317218102829834343833633544901126931143569398807905684970202348964194612275298885061923925145525774876352222523781858372282001957198274173098329010279847291113009852613678253123199322917136025127117154756978089704874006129913373888341731677935563427208491533468982839070555222905600716758864558055015455443368534003989339266991496574749087456141207063618250411241902141164015442390891110956633395370303166431966298954503533779086717784121585666343471909838926386599682823714314774096149220614537617503626682222182615668880281733598355987215201453863347388340090921698878129884976286937514133684565405410347549261471700192037533086493793953508999824708254409983739425082813111045769624535087578645427477116700686622592971553298713236705554924227547844058030634294043977065066654988266829751374105278390824121371044031181008428048205223923243651098135005092948487395324912456217052331950187603567228183420265978222659169332375919592362911152011838702189535847577763714114425190514299564739774757564037598485982927812147173140747827430978393017504243724684098500167685714749941846120533181791178220367836024729909146669128836477415610531307171288054524223649506374655503312084693854015857030163886937766181098823169023181572231477404931598733389102380674704591127778547890467262756173574558080654790642471369332640892203135294330237246272074631760017202872694312963325722611729402358297429077465902624984852437593479190867737167006749083009854670384065327519801302083242691293439616132893416660268947919201637739258769771607084518793369204312869826490193716352930819450570212844033786667236068075375941453964216107149779664323628747272497685794971849040594638565097670630010455310220514277785818284186463200618441748478788591987616681646033755321959251953987293706031605827100615706433378711983560088154239750803537349035070283423517350889381534886372817293834165533055835445256823942303051891255521175486827650886133221071633589921707722114526609240665260264492305806982431844042679579783582551609283040246523428581845720374540737897789979786180180579009825935175015723992444590406056732840128165816199908483281974729283159640149821021618151095300252407271226953926728439712096665201813821962143089789720545389677608391629805852569311950851389264151131224953921752017840922075938093985062781184787646406285721393870539756657767030925030053022461302204093227393963491255643017235236360807076699601286868224950349231983608760919780584266842953210668067889511328397050532424837545546721403509681669483144282692231815703147470176852156718005759125673967988457229048839619145997585270368102435074595029990094324102493737818970275642575407600875588537013441673454455861497898836728065291478392070865090189959309947742444986923526745948057899128034232868017159368271694223700039666236730894705407231009389857561190687139334624948051152611495443371208819706799382667564652218904459544669746954713753183826624347921466724650586905939136598547335012617702607014113794591546834254696563524548343500981096958481191991323022742758572702244370470464413665803392605126994943740602380225661619992335366449312159389272554547255369597536289533017879667844179574297853538262473990737634615419535991688218597561417950967595509116168022993443293531295365421530990278428579503023488689022645550899786226625323338180515144059213727584521215321722089993299184212218054163465777614637889378688685803879328452385390951350548924489120271418100487678768868428228212387228503799518279495595264908243662176970443975028752029355061454695157141184819938299926947437018478957044395662391617808375468649007600370172940115843761412592237460566795143736348519450988859101853660296226210668299394693230720927858276964586740548558363904065214488088226818002415057852903743836014126022876012254536312345404960062753442098036019060443237049994545797682297235099797863438436593216207403158412477892107575374686442179451430350704320791891708254315536860892520182634206456725864813704568320562591782038671811141093425946482688159934297090882997856490197026962532578625837338928755211465291529523683918247460452910194710972484675179153177104097104259910518268539520304289744878391349554947980543388976876106090112798575825073980240911865137171222653996955929253877954855333315507869969643594964229605539468134884245036416894025484737992830203554155653978459691014928198149428959910752989307071317377965664300905553289327994588549850950284644007080706241112418494862133916539297959029131158062514264923394985650739154621700845808120916284537924609624030443114218948985698358239949762635499673659005627824880546112922811671183977198549908295009183673236341667156736650377361061056737332063403410177715559814144656394550604447538215779823278536104712565326761405690441339115296210030702222989203489845948281369398678770779363415632864910236794328437692624022552548328392842615492736782204301768665965365930746241254165608754964908497067499545759985298460945344650446835792542841082131510112938961881927693248231120221756864036707731726487325938077272576650743798183544800139162905157445216386915371613768879264078891644381253089581539609558090983181521395649500355526541811118635730569046931361684921810261207373485062516626873625896376115969793729107031511621422445382850451172374270682693053568648031104008891817274572963359437128249991844891468313131004074851541435190896882353764875480896554449408432067645595533709041759932190996007431454089967656531249566609171679862639011907239936167049017771581006836981063193553563613522749187290893357797646951653930745484252566662895227296365515537656517639786730623586151975310765480540289532531601949395336304927562830700960037825411985561643821347883034995939999815320371904489018486314948455952559263146409710068471713259502647267478001977847611896061825935753950424233795977832748562746151379388667659849662204204370582406208836832264614999774576849343391530101628342373099807709619251009982948420174200692400576186926512032915961194241973580587141742017725523177905799155980685544702998175691236820149021743148908860959473955326805004843786317283255788228027783973963775307044681831745418957729607897287660450576165731690039127804414511168095180765758455897687743007250305015608713824106966239837615772559788333446260389735144551194566097856159222619045281993121036130544888850748533209105902290817972040683491743672438537427407555076754103740470470519996488106893988963679893402926779777315510136748292964498716616387480928391333727613516511458687653975670170800714203116160576633121381876444223289818335512535646590900478008372238152919598466400554972447258395277820369798167170321756327919408066285581702239995204777287480387161536727459448442509762680258106041535327214632697312513497219121039425133532472242095253942361432227842877340347922588175651734262339738440446492272637919578131157514237627203984698773116783796765212222546280365874311759355831644675241116934493294688108999510961605213084570721687715849450396639049106141887860856148954550750471455629931627105000620532269066137825781316017603220973433261333991034567108467510498624962642488699169465874363399488868154638948242465984577292633553735556852420099382096738662832127104872725881996505036610995572650123609241043781086883738614012464955179446535377004978611118562176293167638027449612637695085975726247778121052711332364566219200112876185845464416120363602708440087210524126961712756204182189211477418943839212507448032291316566737926226650207942465800405168687099249273393069060646360798873617365864441322829730079901581793477840461467290903920089953743513557150545457465001493281676469801544541444627173505187869563691796834575745981341826378231855942604285683577230974772727095310465725871392788376171498988325165587658459242478209763818343931715246275249033847544355256625769712507232847344158590312425822454135201105768865080501413412277647350979797597165322409320114702032426981288520271353130012171484594553991124856728942246176555811779216453894275972582641573921036716718553318429096852951098778309232081644343337035691135410384601765183315931601762146264393426528312050751636769212945201832547953844492774251628393141343106226795356284876139469403273284444586014152400694986734961594079272858809061960949904448174959103909564433761703907276125412354892775335876415272646526126192989549857858930065881045254576136386486138517438556555308338685607210816131204906145887848650892144421256413442786428159719389978047391109134257790046140655520758094636923303925473166438103154754510983147606737926330885845999568999353851276202586739695128035976057952375907156376600975164048300965313860942704588148212587962879654957903805340177854247259711308541551603503567837780970461451995771047865665783511661730311276567901518165972850520986636796137347177492175264790310493561351654339295597668712467832251955744640272444007155359474048804304065788982945928352532307632627576930665303670890426050955025688528627309916477125616012512925234970728304675990574496468777227069085170298364495254489068034897491392933909636369331527636742699013284766902371352506091776350995292002731244023865757006858780469293597018620342571723772179977093125789699475496105523743724832176529540068144093345882387953940656084217900519955099464578748726508611651485516665622261135808230656113185935758123090731435124996047414425279597354359574378856570913306377601759010157157490619551740940998388274502844305091669547119876233489292751989516078837544062423667004292912251992330172087279616497346882233046859736081564275972335625958254887035338484716664189318473872485695845339136606272315059741608927734938768821670382249825317380542046557829438761966527834167384855716224439462405323266438326536377961771823507569459750423103138290848070089339750740358977330113970497456562209782789816756431729085281442325129945131381329920983439892601873489278892739994343671536564003094063601168102358102060511646184488836555280866265439572865577916493719868641514516664261116535122724396782278955528978764063014169535540654859120299172230842177436210545014476071475600058330214022044195137271228882609806962913480150447375885450575324750279251402851061941914287093134507336790423199888450218824466412490267199774666086468918833734387337497335144015840693004008549890781493464193192460097751739334161380017888359443004786038046374825235310856409598367802175188078401652900630883502414596986630872311085261238505708931003788068325087199867279768495262956883650359670743609352716895125122349956601558456299500231541599105539315180746997839621279353395686142155700423447977269222089468138684489318419154262504409821198761325705465328527695537157420782082354078175035903462010430134986159387812646272750962009925857083492829567970790332465325289206689049063764087436241829439763284627544144883357167770069639466367471860398862788075053410539365200406384307372970511564096399841314435051459484946899992507044444836354985269418541366246616097379154763081470481918007310765539689731840724466167823996718641044946480569623102013135147003272739284086213587006083417239308558779132947952435879189833909533561483821067431049890268359556509392353401539333788301678145208658937272723188794578112686709909491108016192828130703303524780820687044001344046854958188080136806595303293237463476504011920463204562731540166037081435695648333493988584792808470211132901764592133330530980096778425332932212735837577215893864016217901368345444882023496497506785629435246203379531538457462340173890359032774939687844147198184957025212849427638320378720167398909916718917724985900920192030214246493573397230398365110417352778733527631095124650992710118667623539554692566783429394136221716928121159143717386855853984409631021985053790618629812165917024946228153251349408767853192940114553370189242241369551007994010028856078603666746043453656590118761983375709654169884658816846754918144899815282484040063735003947309015844941305847294632029009712335365639096408778574091927109550299652681981479767150215206743081866358869114610816772333138477417708074433283279303532825808874057642839515755856791048739006988848065926839028819778433988669939558066650036824490486884666934262276513630175045822348774690095228540301868104997197326328212569850060274724529767914857676420841256961349265084840795236300841400994212367633572991161913691050780025455347823394988202788101768864502813390202856859126972599856839543990159365234030538827346354126800097285185924007284964690706128142631879645458992663766048427439769100788649351932617465546902567125707865370814068813860587244367746419075848390538678832569432671471062986454254204755506074801888029161552920066319891531957945773273477214975812022453730709392776469844678661783580960787047698418293376308118134867752848112612486402593064704496634807094220104296663754040709636340404817455410880891536467187831977983640996849951650389805873899168181319390054320789631028913388232046260307268390249991322854583613804193446810865918674501358892715568404694072865540886401726893184784714501860380117604550931574048136798023258513596201002070068810852653249151000051456727886861808962487581377647552163976398924881561622659417081146106665646072744668498044426052522804636851043773834785399184804744620318835737108437901882030516095623037578335280017150548691261342926746197516595593226496924022045173580598481046504353473187019615999528239277638114058438415735028254220037867803763085393466530484468108461280119649653140359265924176687880191882252356096667279055875924399802049955390469540917907333623282921659561338713671919571784854447264751582461161121608220632552535539574811239491907977080055351867435082725503419467499187011802283659752233542349669207811280081047966667824818523441274660618920625130919101015888482026053951969439894711895548441586107366790258898741612638693297959237922447608589158095992135723952461923994687823650465896764883667052137155194576002906847524103760645387180490146865124538922972372819826875923731390254431637342915817358546048808767134126047097505431381328118991195760134187889545091844395783645096128280496313025953970498006602276712809536127205652543720418045709969402565206329936420465311999349099261495766939883753463147455929093001269063984253071712863023553747896664603639453734132845027589712104259060427174009223665700657893713650553018587778453891754253151543028835750947685193000377825566600933648482508779760768199662372049766387638985631992100720003474151721375703211133912952407983355924232680111677587187241552829353741946423917448296404338549819202048685814597880693735805572741960307139515943152276365487150482922514045581253293812970267225644349179074560531877646062461313500613224648092931335926366379056886844623491593907009953911828052093623916145953431995773150699039217050325951921320241782503621522257361377451082489605564890402097866814491505081488150019983296575499211151451554027366425864934924114301930078755148355932268605394003602081353485970925801149654213968714040128138987924299507789192344817388231539104117379617054404077042219865132840948934920651343894411168095993753287475595036673571212995962900134686846347787877484062299240326083529798662229832353356661104190733708040289237334415143318464007457016765783370725688178760684007631997290723697308539152704845065598303686071945621892934023531809446634995403272958391058435649685487542623361855343322082521933633876027950702259029069185899906864695622617535870612593631958372152800863964775616329570345552185613467025464216600056930056849030169878244758163240995914072907600096163507820815348734058513665059114508068178367617804243332753749239571295040855080590873111579164335770288383740923440579367884707497712423043388562508100574697765074001' ) ; +test( macro , '717897987691852588770249' , '5678' , '52992561458966917842048333229403244806917799627848421877881735070477262881098520765035249624964340882038688516377409835187369665592703958080735736766945912536313709777389461793817187662953548213601180992839097018162700540199444811234129652849225410276267930982552729151588039493817422762367215695837880393501083343614940195379176805915010804690716402053261575165097342342740863670719437568773682027047862479103787981449864557595411550480691451690239227939258640148661525627569354056573032574365819474479753874049318092332197860174730296445988139873008708564407683788184545625049358109338930604072043506368501486476015294370204931967091112231708457059830732539826223797283205277978138098770871113585235612923319080860928191126542635460138797782729492896291235430456696065935768220494159845006073392139110350323314505384289055017134916876163400462621881373937156047111273516233295024171469513762593244072341275620852077848874899582624269495895402815765777547424606219477655639449216632626280672365511304216574465048481409555551898153578798780997838187598030296504499299634026846370222734083675507056188173301287819190008251323703160735842279757966250463716342218905187576189745969039286653568566712245083192424309450098888181155360995569923237384829100088794333552637537227162177479701619093609870600007097257152299648831715938521942096231520452892461541884420652580871321292450318548928985510277252222535133365388202103209163165539197901552072608710284236732915850819518113234646115533291363606803403675185089565146698511010652775061073223214261491866092146057590474879116664838288380912194992229955697790523281474198511681898554287250127257584177956384808694445714111240128709963424475982531545945446204678284012510035965008794769324049843450109531060002528540713991395046933182699881232634176242677648962206607631738502280973898290005462656772264590786129579181328545465308696435762205327818322165386961509403474972525469518547542068305372202808432048462319049469153118249646785678722142597199696100956128198604501655682922926268156814400446792306656470188135722009834179368221149303323894575881803165080171867765138413350984666824885942458943042705023835971675031330773162756179573615771369921528023990741381103617964140627847781113773752668975380722356219881474606884340999916287255829002765995657643610750292167091336372823055491725335254964911991918866523018470993631691434109295300263601212125887194770564215757107756618621927605011672982388667069376436126257785256735035080395442838012293011886480858182971214107329249888540878170831338663664497081571648293369670697492303978168090750719696674347255594774732019346186950722015778265861706529434650218922964570378758677250144083322218433388621419998372158607084870550629095764769864396578302522198678754554607834625544465903300910375218946617943281021263817868702534903565965515996857490410905151194367951674404671401634726316031502775424938708095480058006939655833612970659151929020021108105677362480187576212239598103259569657352323481949129023622185672875961306339733885857708982104417776147428446169851035372923120375171782152648094932708525562623063044339202972582525453779487351603066880013958145443211731768489287736596200008852460116803737486674746320357688425959700168747470090109849460232048475582033235140686903423628462653109627172118888613705624945389644912331260448674882803772456442287538433120812454253132443354729068891796527676701606716457913622114298779919239138678095658602599035272101050540631199171079787674726148712746094500511958909309383648848324958153313684693020237870128517588375127269029825997693115614438073154312047924340357482412336581044347428383345931096734448615207346214924813291025243318597445591410601657643923497289883965796840775243249869681469920755474682727417587202159996646531840273727959008935890037688256043389201553466973472089962210203795891910446649680901883560841094031991763415446185012636385884139521383390919645656949585657311438685339885917614078799309904047978363483036838818577158746493373606130783588041171423001575976326332942068212106971788178296357879590268289870554895714998398477383074091612380803534549439364991095989289183083877933651758973534265032552397343750530201088858666516716202042806877592785968359618297523122663345711107589355569471982996246008945010788125903082708965247233856493295495884971617005159683177020951059046089360849718770603433176136962787644988761679786793574894146198596283619577589492917433648008790154607904592377489003959969338300144125428308936896784361334723137983098924994947562038207668868190447389976840741447171621269619747614678405424544476952607756858007392925674149003932269670585532289548230838340609191813200074864347826444440499651323577336653937195827618989214774650052553204749548153719625554328240930029474674929792915810450109353297164695948404332144143911830336116561122587580838323433271508758381427202886466864203006769876629040113309536126898286439306875888068434906684986109839807912211044229574073513385256008653277622489509139402265793326372569157760069106457217990235011506430988742050031863394618171218562494463476850191629255740324446363242993320648668718706796758945218459365076583628726166585648610786131608405727805072734696605117814467304269584486848714577856278821187639674139091420868276683680482402061170964129020179849417226407523345979683703744990934601753619379872634811616761518185857620947821097797023780246814812679446740501132957939033231020697754175111520932341860938863741889626558269454453009814222388294592392173794599397585978687451892813356296473121549635013676249164244665043044957101593039072361182135678926932958876432422873012810178205318591023576753916592920079031115341838800740563121977641772239560122596720253059357199257880604788460448454541912874334474110048318114397597184518307140986163690693584548192536813827180198436161154497288570678489493883807773676094581689577716104059811574599177659911227887188217401978474514757553745261264218832355099235158560242297233406180137292308698109610071281861640728221129462482399191931254988997403297870669677165754913546299432301037504530872073067858354779137558761312187986108590108671713663509463849235645441069025317032282653619885664511756487047824929057588473863132476505639554060087119089853326292527491890156165208813193528270287317866931952302862861082174087615226626147432099575255480389022327072418068332438673738233637882790315683455450464590709105784350178739780127964769969011026088597219619472341103459382289201174496483005244865985320414773065969458214373055466663167449827644842719260068316989039810368349530823214414315840300587086860582920441160086337872788129994593466901398749881456816893076117420457023093235142704769500472838381750950452685686468352355934718793080770041896266326591193598230038726258131382339638465090689033062834104050137121528398579502285618016610064410178458485780348478662846002089852720537701136965653853259363332024728436379986256649234691293765971251875100216741285408346246009343410757983483597963489740851123818712786795291798837714819930591978286010640687992692756495314962784887224591285887831740631885066445063662149099404455330521550962587381135521874864351037529468684827186997370955447481995887639571571525702373403403761671748587109161571183805369675426792116895119621582920253789699657615500011890976403807282199844302806272514657032217062946033211042074109494896045803992953473587506222506781346147810525891832442558813747914920938494195556975736956239077078403047716108873401240720217398379985768790248880164667538691286461771920136462983631359473029704858507306794650707316446091278308009089124701630706210560168792994743974642056525288870381921514176601924996181921908722977903765494032218635205563065562888264623205077967964252752702442201464476030020851153648989654374063092609825139716406169830702732441666788603492696815334157061439959989046789065423318960712201089688946540796678378497252260148940700296093007934347669870770800342086190913566676064617891161093655936605836899446861184700094847166382869925437304928565010472625277681782787551544062045311275114543518096882812611825710549053207666530027825046311534181156975603474991929909024388711945463808425263464957653237271591373069179547100808683091655216330416092310214397175383390044315163696300849781070219134615015219064302516596226701912265613020932966925428815092790344445459519486710818501491744578229686083894654498423852571127489975219254353172438337650602238280223597768220243105815348527252142824365262184240072688609964102457657199429178311502128276669149947703560777240739423309436247534508874804401314162274740915591635435183346939875420896409168143366133287003880010386186641170364265028042141513465453408101841921842528837600797310807883817569665409313593668849776576983790985321325237847569765650823790815463692017963395752927945155773792906513914253930342695948572439951274479143533256050317996678589637630517043566370062714774155238038673228364852986154012293796986173903941816772421914136811088242656279247112124439226958945034478877984596864873339798554814421219750181744221681578059062457004925780474249073437168128231790400216332672320703915847426463055894401088311795843457416623717000078714687159781995749578194250354449880164141903126715398601118555657753088212238422071158309996360998060316430904776007237664213238747361809842176066931627956726802459178808505394046664002938285314488362839317461527679372532822934704704470253690263875879702240062788026418261529389183596155698524599722228817999108140672748144745689714554812265041175714545225389990781353970530998752805250297945973556929670870774946985404265424068777800150897438843100570165412465536409965604362377295700424297999045416603027704210682281919437502308628718607989662408388051610908664802514940396058178295301888644151245892936386802507105326053427738255325180381762764389027620113283759653480743839809992357496074117200755535328327778239627950809058337055235742086687019858930046083297050726069315089882694837254737886800564117843966144822575643639731768343937069600705061564770014386059309401600994691145418984296800446891914436526504588487235668560512126375658106759961423238985938919327850368124270203404746108520903433047821070462173699752058768991623911437121303926263567247275258743101051399711951304774969904872170431870967998534905416515742768485058006433022048620528364549739197129869684349063800961670793383545725472346808561542828191153302612521938569967207547584404136442698715207952729855421979521420559878331433668100753209636435675712543276009510142074799136997641192447567079334735530723873493925022491212344710076896739154338361999719913499831623432329457641993249784570344228676317925346610689759322653659928903365020471696174639950909615303515965200146660518282411647170608800939660621685552950249611706475325198479518423077155301209371280575534360462938867984963297040183736104969929190183531952577283379234782953108926401989267488044466794228043770347285979888837421775091151607628072534183685174245345816369526145717126891495096063726823540297588186575358585981265343937095373338996442251138594460569709569806492449609367188654079820152455364920624125030761646597005088999711445807387895998396475835641806955712083403146532371590752368935420985233735695950492134965346564198873831201899225738635547303457400703163201429850285547082772143821844313238723456259228759115534200528631507109400219431734564426566942208047195491924187286616903223592310617985108600082628611087567285767001840566153820546701939593194433998024938689773662808625697973543664837705457336677737765607746286815865891347597385126417092248398027369133671804532615511954414419259304523253807140857494548560843072982788068686101289767274829556337961469578050554176149354133487258534215364379154660461310427570189912699705529950514413147328168458631103249872388038937376864265012237965847164952284836681545396080247290559401291604967701175723121502236181093388323626875423056619719092568232717945805103108385877791944344245670750247392343384296108323807858305055418400741553693700502565024106126585636797090774279356316370509236531508263353733878156923208632989404619022265962263865918260332262005803614050713268964027332085964017902372988449905870060050221522451244273428597501098201640739856281753377806262510621286335117441922221183997764738785835690806964058090618523209727153455617620262903964419882379089412045613968114570967614290250244897455062121766814873521607883867929237291112681395681208806316115052463955424369530957702703335301336133507196464013784297392355963686577412082487656646900727164897539211910515592015131790757084187802478999731058868779493827694303480414208944059771372285831516411891131036856120211199256880755033121745020506905940385581282403448035169726911436826243069847201133079363947969342361067328363441956715292529385906162072082866885762473853872136917177105248829462003088491198093528321254844293731158494353309329359943621539173472646030822664165537362617032785562181639419716789150739604369299294852110605262082459555983084488041202822751327819978152651961662242916641572040409255879415966668785223872853617095739101441693844227787889967257101619837706529517298805962370005920305999407921230127760675120172113782634335023130691310728800481538764425860624015422603351785485421993634219805565282967254634644843789616543323341653341146495092459321686531162492849751882105121323719768549112911144880654693888232614646653956763580397332567522797083319499426431434148243989859609258432804222067142397999063441042035277929314828603521084355742771233471852499158339778603981017500121847933601889420815095445410655577708991650898864592139988828909325847690688265292963327637387564935819554712076627813142907683346250203958929989323689935059457421263112380235019472983111424135581186825910973214910699149667710959563181536691099143613233601161732666745012245211307688622118221683809456064734882630698593204467656990257941572412614139802715394281994293120883156362501711873082011731962032490574884682131178885924065895059613017568119400856466320056952350332528728576467215637026738604714597593759418177681274482897193349099377791845071840865476390482509958300517175834887188010180465835340333367167368967646066303894894949259012937252758312734808329709232360933894530979086189948266744307651572635781288044544893571461370440118431167905294073527312254045244808871450613885567599305888413740007585647252065620950569327491405356998305146429471623136661921767554001049077582559141269075807726942292324962879195004849835063558899374919319497877100701211206496709025329275359077524423372451805882088092879051313263439053059246113586757853983808973560033255079821096458791208111949975520419973969738539460358523519982416915144979569986992658895580772468544281855421641228395656106360926287526507440986113241371749929933626943002948875469110027470912266294656790428857661799285796092963253692751518091473958954584426686863281912392953724819538676197544419608647219428371546066604565530829571887668487791705473466987941636508397417037367030291035726974209122929822977256282776129310660064280234827050717329256768834139633843952427070535536323343517859928713869623513480175609016408364304241592622958594443056559986989106563619631715224662514109451710877519669377700137922914878226108875076080968720985553774478319079858681651339801277697214672775772710298769965771899451131005224958432124257866462047576738776398467445567954900257927297206412032651048753538257470550748950042956467383856098326990699095531754983730997777376855850204059808381527746257418211558497066091371508074576455448794073221457106194028764995140574406949894779285509688637508122002763143590113564857465357157613251821223444359965532981305922833468097064802147367022534931051008695237039566704201353988540866088741667038552935423161581934287462404348346959712557410094417500120546248110357270320222372208679677188804508939856387875484398668973720610306440393165985553874361652311139176073072642232364301455756578533325673397255829115802632064375030488532724282480941523096056375612516691335273199076868478063949077979981834693199226789642526467313758886727034664155374708233413052241176017997770755357925454917422006910044558649830410441042783912087181440912216816911418077643846400706686847762348581058766312240711484387486718123588654129529313123730637305855816034535443508751239517641963906747738873083589048844951039924094554710311263734798500241327075231542378920749258310205825922008644493121370590192760015148501273427214461014155067372554805948839297269789248975606338557054691632614937241901458805041012227038978979812168094150773239740200926858206670986309560725257896194349092782159293694188307081347049188661030610107456715733073715420873434056971119630761658470234370438116245797515154771525887334083368102698399109278569996061959700658346646955565093203139925211068688479012109279872461395639869548120204532938913593022473786111209373901721432107297071448742770742412159279076830118439645403061943303917551223288001014702113659615663577592748103708841776873178445568235386839518530066675979433748005530615064885650866749177914061788524262808081456736332733040493983863214714692393115801670972860894965741349096171975727706157112301169070137414347667759125039407153467452265210719726714985635420293189470049637210766042254751512445609291095350283495503549502917353512206358756772848829158151755615008365723008445582823523075844725615067686956618810366284960890688672135540705475984841760373827462101875128799270857413282580082072800739904057148821354442778410810970050701431502851594089320392059591004827037030949407048303186582849254894900004175510461919883551638536839489510245449220044773071872011316439740663014720019722095387628672305811492191697738078092246616407460689410223935009608878423391167281114435298028095665936771603627090834937282850979762786426899134362341889415374040340896380252725754909908018401107333556100522040895675585460969780799009744922983914153517048037312468584877909733205649413029335540211297879068656419387807383048842494215387689331649844934805491180381285929557990551329032335758734597115389529509449814729908343459195813101027114347572133759851590325554983005153111501432758813072569701126690781490951740575825405497526335840722010023321789428374242548378889836216282253171286247053640123351326348638420215428018887341486150219038345363430704186782773219435948195386840643853198799818242098668338179745226151996534978279230096399308636037991368814207217507069935928147009785676785160027497317009001777550195024132691150567507011354412329032340603521157466518995650811670602491853174280204852628446269615787322879786482369408633164257134657023953228812362587592950746528121453810577970418765900895068401958324820738606431245080063027400254319882177028368653741793457795068935169938691425211024828792631933230877447721276360612404169065676636411366175986321744222814400246758586497722397143948714428396712767471630538898122410697568130170950184011778819880862316215372642601335542980464853249009026580690749759635033913834129498173805649521698922073038683841857811453879318495594875910979538327284780569733959417673964124812143583018523970514641401891081019284489763221082086325354879697385907787761049442665031058490028534622149846137905767487116029644971254430227080575349336243717394801443483839458265798732710051462772605466482812641037899172879970734427748668316293777647496909333662168116654868712457269032630974156741200422999141171874097340818602076458352626593605494845936264195396202806647904404677157734745652872270210704027405978135714048673747336292778720101960923698684395527092073172044177213818544969591585627238532808299570223371536372799012875224234778370905326852914976423861886454350497565400489482872955448045615907842220173649212448684979945647349079756570932865476086046458864652043811750235877344393220429343034415180297212581588145608747445493372426999318493938150343775786331056194752510426503166230913186538526760445807413799806204051029905931303093836872257279463684631738363832006044614840509662858475110814261755496445327276173263161251358809092006580985277059802629992110919876640778599238851224190806234298093499859897877945279235571464696627205637879325947667945367188005248720580469836926696939939415121732586533901411675573681854304269524168392617282088535658385037701299391440541334384518081022468387518749703363096233963804922423094068395126707285054702218861778016173542392815212283678372323848563282862826760297013819812339131493327915541965803998097384090951244169643369018641096219195430772492922432677413755019687006516340030964660067215342977430274756427296622985672207880091256161463966745535322513359262081324439248033434926360421216544044746832762555450035219016309931057323669695525075977196214861598745789848117118689974917406963326147153664733948922010644259043986576126492884735748201429479293157327397169116086340829373474447532461009810536262731597451754627874681161347317493618449699664690398390949643587566379695090443777568885944452505841199312483422475407319328641366974092114345516068535284073079980141067468263817385977308228962318323609469322490263507101669512786080642752319574742157425134152748843756299008728152305538809501024125010339213159780735824709099108882350824446352596024291069384003047531175618027373859127640704478972526885889432610483189753615050833681837753536005311543749368107499347315534545941713644730273702333948596900145557971505509367959108594407502948243020888234056853650963187076323765146652614211207546354464881645918117204811380635728429776867963381852884230518246631190131825530206787122927542913920281579736988824992521073962274953252144927376468933425658712672597384028057932228407070530265731165980966598601076506604289064934821557949717410539761505040873308406110474412692271216992858783788017692940669126619626790274625702146919817133167454141020585503777417647004018422961010432475942591656281157554753543866527442721860074055221343919493702427083052905183704806054896861313080853192781874338774353472175893928663360488609634784890485560515252214309637081204987618424027884591397424067625820413547165571090593288097729180898304860943714385424978418160835850877717027658521907629768814727424695191227358428401962885565649381238098204936255938797308193040643227676416950981533713051600283871175312807406414172316740879617172963584690587789848239482341701897688268557616992035582225306531638164023604262595670103263609695362798739463036593927714273709560324792380672245014432684528132529510597382659551239028729153767533108869546101650464606517031212471681999067256252173869702628620955732415793090541749027540473718940312552425322149119344958406002437705982398992267252296771928467559404038212669370252790729353944780711661881552113249584403769083480856475063987837244029373948596829428019040641426569984762280646821052726889241697080032561970596779105934595957656757479131467410030344286211442477923310898646446342650046369081113562118381113974544065289731235914381813526415129034466320886690781519982064571162447720218016309577515552126698701486349767343461948090842618080712299219097673966015228424172663889427342731020122066675346414052340618598182609249461329861211149036514914521730088889300616712047373574894553971526437268977130623792336839865094059220733603108966045443149552683777916379609517221061627320405151444134819286421255392382822364134687682168786843209394288411699746863444889434411414485519234492407599434325668997799101520066221602884158226756336984242409440361323534712903377984364440121709955882861088033253565408769726596294534478786779815095706073686709431442168829090896416212535563746063403950198043478906364003836786350526095004964058916984298874819382063723661497266846181942426357905013650755458667314604787157987764491101741899567408074361392569794087507924311908229702294763769391197478812554522186741135262551897352184690374471893073000220162512552332060179402611785987981834888043869118074160633762440696320006275857520907876405364367283599977809702429809327633774811777287837997929063319088643981288504577794563897734368357724456507233435413578168544122187905557510349163877892031860938380863700212457499941173051991635044055263541028899765559085615828388330183855986870987907204189354310066588413218192874980402116441641033329112521433352585269389744561428992772734752313702102338324264613628379476243754122969786509425444725576325781027140066964089023790292891876331352393285001370386695304261889280274262043056322796927733119572711356326685350484589411334123538058781520196877872573359539914258371620972518600167848136853804940166949001046871343046124149316149555200621260500187812862150026333455832936133319251080100944562462138196424435420637124060278270301200807655723626316279314677989720701526760643271100348145148124820564605091911779855169535418882307665289900355017573800822546237397396616805582194694056466899912723329771183008166619132092740342879643527581402206500436271851742975104495236263710329645094452343102310844177958838929699065716898974352408381283451421410089914102753296005962431058406067303947323833242313152680641247938380343115958860199956778403253209323348645070739497071952928327376353617380302386451510499726403590049039220125741769453186556766459550919922603305625386150812873799214104365798370292908598658060494523919882837028108696230018764525326479800889430827403509641329404504108584175416299778457550149516420306914056180810908889377149438217925739822836731498632998974190671944437651733816831832102819701452336948218481443109835371939006988086201718924066189320116586181314358289815550824203560990687366887222969587068618783822844334383574224286655847585666103020816988760101669647856537819653647348642372860462072094399934119806713804526340303858796726062832597308487962786568628209393365116177313500258916696602298504935899488231886983956122931761650910471751605728341369214793135444893690581825560582275170663803345907902656817500959962305071703161844221586272436733043463590790972533783408461905472360665984339275927320721268991984362793905235237928358401214308908599626975869024433459897721710178957512745942114341723971665941816834394308329806825884356070709685761638881841811423881417063972638317949761209293108884169157244310554120522091867059525129565074635172821024753666469843554970503238670636464476697226613787178875812109508162171406085559173637604564435642338746751084270357452547638347056148137732031656248286326291618903398185758507933313960978162364875292581607458217158798787916676003226916398811579605403809873107421485543087852003080885632791018542669430381491298441535109732809291308440227122322919323520142248717203062944396531767516101348669545805257723994808980312479264837725492136882355862941108451810186385271944727323937476421051113190387402775727960536639091788137833258176311969569961943551611853786770670960071652604792541940305956411115347733415222667549394453865233071674925052111317188727005402659672862870124353044134138940763586559553241714723475928344653659170671048092842027797901483049343811224941954463977298856433740106969036666079845988063391903825032855950193013788243789490182350376071702678007109765795706678377357340602031572982332824123773826221420577356000773691991307382149359100536109508425616929397580550980381697733400694828091467008203408893560621735626409474184799062207420684997475127497499271462600004670205579497645152495972389782480775949584706612600406180867943792941868858006175201936307008047616757589672523735789473093905193759863364945186628110590148829061593580057092925835363208545182849585868221368570360897560213869098865474255930740671657540215219483723251702391679084671148858456387364281103663462079699683913175189821329916045361853985054542513239589981629807348515391518514157410480876717317086568995965776721883816029400496479881361209069153709752129572198334892249502748191465310837081561861610032985534309285339681126580547626611304860810381677502832262489332934346926301205586228829998320869739620904253982155600321208706995102261899336727019317570934776614228279624359270351092121785581627705454815208145814747270980169200427592287264446298455337451867154675225312599671885696403119745068812877999940157697775260282173718338630223097905166067171605705202669147542203111329964484204150252769374041699642264247344682780556183768647043088086067328086717187740722470761010716276890826844033820289730485347275758989422619495961781370981845507287224106646612891699787304991489991450237892608587094959507431025121524157532996055387813931382902218941327406937104535120623519125622928074921413343511233341463048114587623180196119633871033128642353961758736942162376474650866446500486254254052378915783117942846877531394483736296707763850427149576406806692201719207270711640436539293214966734241103817572475879693972994529271225318511005262619518630808170022848370992692989178376091827819432746605823278836088860098280229785555789098175025591438486997677754831517943543494195444780421155712600231315338591816992539029327290383750279259408507030866894281949592643856951856970260492648859191372445722757560829643128598473999963495915365217562729260899176033339914368657427490270587754614627221314473523385599772728811860813438436363568535104917622395452899623639754284218650275206353695145264760567105459178562491882032831507849731082780751290549815090526014153248389638366562779197588704003763886554458980922773564631738946671358670002437792609926532640853858166371833689910006342371227521888985462256616595134913448753896321572610914451983732905554764025205460856114907835462908762361867725808829101494129427887010484807824575634192790958596192835856035642229775443466803753619433447559913956011510527564464490362903893004175699539657818550413774129471722988670400259357614877806334270973688298172787849219764510531270431348031231230366988119457069574129982095326123736732280724513806554712464556176030636815599985296475879329526942793809334154537286409720616279737748877805830625972559290659320870467177007699656878854930950374408662534796671508779289654115928497876570228294960433889385643701335793908755514074473749964759488535101951927148371376246782141759279753146527867175256859600371220723263087493647651934107824747038684956089218459994098442077055339542213286639575013424597339692639209982667429839922996745194919443742101455841754629560994904267305390310619195510596711795233359996984129886409644969307626193230100243445176341224116774838302230433293550887983785529668376917774923810049977020766265752226119147869678480128953266773825987624533026602499804124858105127910152228288680919984865137490347059505127939634012785058380116016158201512139929087364709693014634031763687342662706605079791983804043837557045973734575431521833043317763655587404678815578341748648519218701877257148921016285162472607623283323249556573753034374795565710904057626708068152251494257423269988884212986826103841847235290434753139713588793284927733100788323782464581521308771041340355123219181562733669769963813626654980259896667571531426558561083021853772568029181635433012078770849834446674149991209906653073314199262005928322117392615818629566430413616987317922057832297584265671398209566291140412705971275976266486649851786135002249020062965980087138574535447132363958635609925366757622786251073626356537120620726163351028366500669047752276806994698670175421508941444055686927449826465211114309355867990655881671257209904683585254426503206543491199687267119577128778582396178926678946290201534745035364519018795390246746811766723584255073984715970376061829082762752016704470773798620997166862372135899943680412430608608549449361762094538339329299440793971638832722944360033468293012144165093312313114839006029476318874961592758500904627465226488109581697907382066846687530136534632837946481815741937620620154295350284380932563345904144633726510177800611951790431250878298814044606538474701064227373555412349001233072133083235347487459787376279403703807888154514448002202951245397248869293062600560134295500105008538576207064629412523316530627112626565186270777090318018659291403078286535004079092813364057772695524445708298445548622123608796436695854008220295952906804796979613002284502190226292523908476214322919392774132723010892233879221455324852691358984021386299602980995708394090452538155116048679915227979809152112372669411580872195011069091512211098837265014358497390191374862378298332979828589280675262431318918898318225215446376722107524363251975033827569456312898080064881381141772242054225493451609900958323016634712370823083984626439009976816172490877077263224311036942854664827302424290250141379316709351675690520061130683735321311996496187247021962293994184343787870574057794627801215642399757391689423643087425702078241032082171429850853657783936393491748921202257137973536585938902448803265913705675751505623829853836767351048275120136814974429359820277661179090491547020218952518317240856799497902090061811729297871492235273099451994560780849999017077268810932708025581118347013333023449244901948116998051103180964193421409328454794534892399934923614215588057091032039363419930676743779898364001040849687155406279816603303339546771517073573996877517822995705129876831722490952428194724842099930819145094619254525540759400392691443317175946185255495513754986746278892496030387565394365588879946177842768690923727638413659745835806393996818031833024802300235446835796085570745553032228525815450531967652475109305456596317989530038989405999117072923810555284059845086948523349452739911967441605727895585516463617479813514316281381343200540684480647554584918667587044879862223471871709991329936110666394849738825285286263958437079344497666129723469849274424451217808101012327262154782486868475696579972204483320055712556519479118501769492253109282648803982799956007070413969057766641895108542980107519788443327966941933926975271423626274088356029953637857404994029785121788713172223066847502903458085949291823486875993171596694026412513484348659991282842807440540512919421580435830982886747148859097314781713081716943137837514388166635564093209988083853631966764152001236937201021272205337526464980001923248970935051413391014325982735295720169702781387326630373314301750994939700432204266441734849243617137063200743900861763556953331088533375662647974513214949950360582587461449318953013746171392411021921268719401083870455409243782703438717812520258803044022398736843362885510789738025682748439023460396397947226212022325837892155810227799539254487217780142395057860256227526753652355653439544898392544874518721260751136602267606533517775781758994893256983747903520154900084664232199826595227499066488170533660614570516974168882282194703476740231831764399346962406995812197194307712384356275327126581811963829857081764545583491933201665655011341750864389214260118093942175688349922926371415338795911538883608650663492494285079393689588623801351274317524162255546872032205137602055977698588526953067919577657802157230724010580762546282119676770146073279290190567417587379003247680752947289021207629278566655115192835788767007491592173561216460960732338187214850961468821550647703718319006714895171928841330718580062654702438419600965779600185378625085906358134551760230035403561105143710833508540322391028617424456041890440768192600260326521458091222064446938238524580192166531189004653013760970323476986163112729146041847368155310536930201842388100514907989986285028152232579121250243087183900990150304104081116859121286448239243348357354426439332087091013606470363706785376906184268755539296047766065167508797445567080041967876599818349026917276210630616917313061541554664359090008971749776374922888008224470479856127371383520079697079481864438879042548335953589849253380664920899400066389165030020576281747877494368823642902286149859757979430259416772186621524014692936483589683321666232231917198657382422968512537393374246432506459315712945887280161525313402564412785562279688402776014658097920177207595566191984505720566032171980817248093432499471573407422741267535537792190907867772310470192246974486242409294991646564339659296311172821487691415387361518368358002232126427175348186260983285915013630462489800994709039714768490653776139921591148425560513222581914691269099627882433950238366744049435126864696551517102338574990439051014288641107331775276925590557112123848552944123712559927798767656060604001870745831020943534367217710806627918743824819528778901432361132400874522503036881964803363227725213671319249255588338379558944373081448848288914340029381563870874199421074704225053940653263054076372331153673021564933861085136777463657122583608153245145603654759564012552343708794221112376282396672216677067893583529685387362866085958575144207549201885063634649664356022770450599025073193635589697904649689742659731140870664049705909529992131119908451169523625982480852065130458048303330783267873632661502527296193654564481985949017941867590637521370248661759842942985486580506523527905415291993129997589693562083571993824525692390012764335534053818968643292421277387911598443675823895632044862101929611888494601135784807263444029447043613253239718910969875605613576775133853633741165480175557199106843404370509722920321859723309901527892004815816154454240322704330590162893392597841258761159890728628197646144967822207646701728736399384331473403587477868423279416635027533248541770967263778198842567490190381802603584303232553124123738656775047738687142923133780711030685516297965124193566037052352262354539607323266508361484876586175823446779222126520889533051136757982925713629289751952089225590370193731715841445105382621870755409206256938181565226769507387707852521144122034388075830457994525416533663962455970297774911851804521911035459353309532169948020448427333167113803415885128164774439258952605402088109777145211067039266101515402978544740570697381766558881546774239387495303310021282368800400514079555621371851412626774730245176141487171901398964327496365698995566554278753549639947813610318041843322486236707793661756645237618569985152051174050866426218945874684052954853332216442206370490833124972712199887443585954028942543566576436008194402325554516608853398435525073932650524074286205850550540531543625550602818516054893310255606074691613285654709269754001340023163558376144694499945698271995324998769772391227717778525548481765287382012664202138451078614644891981447633443984616961062704113987629899385435093671888725031427992000013446048294556079409188916356329263861385119483041778470111323934672117382552154014552689712635622044067335585091419078549572685722517799853945139066113116557823200991839478980485148139756437276310315585052962711094520823502876017799162004452308825294752903780143322159163359216776682795639765675024359141047188281889450388835463485151185055730257857244956639772765885901407478608833348764219975332660938410968229409406088016572970425472041832771272378171279797797035736576275270098485254500981153781872753941048954786738308270916748413503252625251966120660459010356765817802826429045068657112315950170987790686087303575594630278186797170965451147353365942405760693758157024450678772714436915222715682621542648328393696771847903632197735143219253117775874065572827559278669061592703292357856712182245702829796197056320474383079124060345835424419150979181507698302000007069045583234865337926621992623375749971204642446990777626632490383499047710478578862245179305716165431024544308084192556089479503354600043311566543487429471050399741986074927517309966574629189828300270254631391989455006206141157242311958987861149970781306061082396476609746044799676946433313570016028171027821734752039087742788832856846639871795304172840764319177762201671679871703331176399614205812745806594113056822213610394374595550171039503669220580872124167464169590577829197969856928840564473147431728291951743418213909020891248139717532829309139307324676418134145138999363155157666822088563424974605011214474234561958644068385566981590500191642959522021800166068563481044756233678800379514457696678176805627254751999892080533501886765304008355851853948156310423934798610892860385518158372125742586604990037334390212148772332920836540413171820995316460503362722328438872099507648776358269375088834055987113695732969353422819649914493670628253189886707685826733188098490064699162769196462197178091601033240633742092060902726567598519786428036312494443148817711021658763571536644924743944370048324568741512735789195923635121797799038653592749525637165000255493407622344594232313502271601912269778165783446812278845417457586538145675618091493526724848167114864548061108275777820993568273138069570417876796279053044809083376787522011494624546074909061660691640637286419682093499212330107661282280374851441004473097968359669954161836104289719705649964194654369452812111646977860340985060266188051868138264924697766217093257796481229661635130361603763575209317631745373236794727193007345895568742625048392643535752017720886976385547006530147162370985119567662827452345951611661122285345274467812187128152772828198044470287829483436630828621443834283933061869973426636841662503174938088958731532564136006533111241497517080811026547277241069801619368046197038254330917315025484354794049944205979487352155731523443985515670321446995279071915493012622438463701624086676046991036641665468428667863243481438144104997475129384407937791753089800722213988580814506420181828434464111345849729424096408245260118164415180606108341818909452188841412079787980645835501934806620697807291698253154706727593807361760609508840206608172948784237440941360116633737918646533724288158512019153861656684310632599855068395383404299612799388078946939439804726113661786432879308541638420957312446608450673637732399682300434221464859925923221506390466698969039225502809581860888180763430173987356554433665298962587119505406649522644887130093859157162141940270620429317071422670076888270015287432039353142292463201458311748039953024013036300157681289307831534247803967378524151269240623018079511894898426335179627535676928729840275620799295814291986056942345428344453545269535794124327345707388409443474582974771283667398460633838739913858003572434702047552352950879994724952355013458855725485470732726133558254542140241633844025957105365419313572521406256164016462372080325523482769734126885228449084718164714605387688663314237773503394896942177771487500288657934065953470677148012467516329412866843212947650541393396631386347555804426102036080289255754843634434329602817459750576423199736486570021428392611373877893467131270574799604435726228651959220155729187266319233386485777943988660811844393451428256717646755716254300083904773522205309371240685190676214538753207966844645134821197918259003182495235479846985293701759492154378658914612708682142567444147095497018617281359110902117920725531122469148975703268958203323016883831569236133529003603833362202853118400173131984771412931859271574480640448580883928197270433178482028973090531595725903261739123015610187695736065475604480716148290769317072346477291109395091443012208320879788331725598789382708448112357055474285327626461197894056314208119696290296871946392825764203702558293596084592330063422640815063526516709219894586212199245909945107086110527318146202939164664570138496089256131319667582023030903220338472809679989900075966190134720802260549733743988009810716784814967132808315697037229066016638783617803049541403814297797063504097571959601223859618220236460435365468876273616964977582199141192717139286886479366882946601855885523540939542911001721165181303035250295757804176416487538695267810352135675174637329741832437202038317518501153696331084859275436546896784758870744418504221637131581695470043451607111498383586197039434557677809493753161844551986777183528706928317708570047213682844575429346154967850073774018951110599706445779164048664056208523721691779348621942136050587382152008824636852587867072370504325971481960878918898595254980293982721591693440821999279481942233518649498707717083882102011010920568111932250810913249902342481472764561569756057047564387676395955386968088987048250789547613391325196480282398866643140635374540815498886375692701566620478926327386180090314769809070586546850483645016414930149011180928072625396135675547919261758488905962683028189154974348858839670607559911538799594215181566419664461648293512903197378392772465968575275924040207070331647259700136865792916743805636460060225022009555911506758744722703329764833376608884035244776681807079272059851958248969103955274321981361055653095030882610383596652083951976626946931369787729556364440715932097751242497500001584071338920490837692185167860605115070019549822090122604643634410262326319800746320962802835287034390354111115865790874939042813949509988832911268012219132145696181195882383952958868481795589403551825711445660055304159790661413008365913113607195310961659663716376009165695349750905934408643499052196577976419823962941950712959992212234788580725813670158180525202141811656107580848620353789727923453309609949287741837902512599149154339176262431563817727378679677652789586189907215092360394745291315315178280769752824178866136127120364844360843686570666924377391665188451950415163418019008550860833335991205615992745172384110734413150392823334652249716284396986055940980014856009188306532585605420519999060408247632994088479770891700298117903439944095625163759805013608980060771557434355471774895250923968185127614872473437277089861855286234820208542123288985527978805250685814884921559427896393702833660533784695823628880970072319349073259978716833968468179590572694799891627034479004070759376277217793391752209577997711609243576249426419043330333248714674522314937604818018967788378992728856961524893134453753720792091904689980700491208047979392621587263636601034393317517058140153695430456108047489091988799433658727319727603208464797159018320689274278962431580710268611873345082042650017311093587316737506047072564104601699540422208265285367519250051097876841814985282642872180071842394128862870024131550427158424470800953331106953095712690997421000768047945089087663231635404628237322206056194051230418812268915485268026095537420507465353167347945777910402999486556725081524841236691353551068809229611287678981310879402131425967814033549233559647486789458759659524816156257785428046357885788728798334726449873717622126595441912361442030013584241365584775303418366701542287195829230746483209292971621640713714120962019145289378780969314257595128370406067557489678645404458053687082712789287239312499629853769537574070273969474157449684007131644293612697622540605642045541405898737405461999281923424705046372116343888909788638977762339671372562117660223660695670784812600612056762192717861277640703396725012445752647660972755926419081291679166524667260979795012933256505922882790031660146080407763031478392867425713264775858816101821915969759500481246145397674060323709892952582602767900235601067846724543572473980966420366855192885879180614548283832841466665075996354149725301338358519169323717267254062579184541615446217563552842801325876467818631048968727579042055430766829056006240108948018339677305715364169866474021158726443045415282083577876330771922441471903310208177751083536690365995902758865071635759854772834694926455251271950341529608500788151798625090215572084029028380951507817448298079939298183520695590038747651635996543349440728664825713158380373219558529466057128032322906043454271320772921500287417319365976168419625624605115776262120980985923226829065963505843252914585540909170419599634277050723038933433924966297553342377580579351310874515911272119419209407790850494402102776888845698141493104421164929231199034729805606023201679897060290278578720809957791951623105561111133441647850732477421840889254450727982538571816636875200828789909673369478549612505123453026030215697838939324904100215648041600048460039211128583146953718878628701163065895128903772760366897751078368367149449860760323482919313636639333077112532263506484449628903562140910917184883359776685061477491947729628529940226933346422619715834114167408979784271108750432262839890447106483996662801874672678069833459187503127812301867619501888954744651596042888493821496812330875953213277829557379428092928030401078060596211030759341486094758152719531736557706698181800703577011933959623488542790769609795754171725493159747905511760096118476672312212214368328427513637719899441014615290328882809796585736312071114005119700172543463579423776006423420286785176042602478265390069956838609562249314263338461011350408175605961013927967017552360420813070363697740897703263694257754856012654337464403965817533944829983303847137943128996206061949794495555772350381966455640399658960314931510072397034602157188468414498235332005390066923861865352437171408532901795023023963305004538478595986842966576827375616876814560462321033161451137536544148847560393613737181536328819284288283654494839769934062928897803037442335381073377792138665249528844845017487627988924712134129833878665284628767176241405461020337739105966169340002371434437030992017569093264600981712234552096820682678182956004241998659956895146005707847390853503811705773368682511571235504699508351848211408274201762880277944793124322084314104623005572039931534794296111644783972369615224022661119722029047041665683970708585749056976393919847203913389066146411665473936057926195115695695372679013803092665461271109469924054694941918792327473598367085225448873229547450901639248463592556312744455603370397515050475356724383915330376573631292372402745732770801947701519132781347983632063172159675682339097266427478373480515275484903594400622175573994679551026905871042323165045382475029142779227145853127831067763040180729594761438319420585431546444900131105212053283280444109163920317054623845778114784577652681377523891236283117469043861099922393013973145606449737426020400959335723260763918132824769576181564972959353534565137763089779652100094511330446364797507184259503543793453450700361208294282937345258864388186370815590043966329954654849125677177327740604000767897331162108194915690616287252972595860248117617268977717440000074061968313794506703892623292525804480259861766805425912512279877433662083855611776315705013366749522257941448775139795054547860959739810400803175328510521654357751870807142781191563107709530016678215888193691287437297082541468231278653445347712336543897189813930534546163421054102145489580924669226658179842336331091598641340097439471837720432580138626610040040257095582924562504785423881749020155620716033485839761416339278967015865325282388487004257267088252026526083144317305666263332820011765688760660248950414043569433347527093520428825842731654779513418611057685506312236998762941492403138134130278628895223957785888951153773377278219125362017598290832241727107181732628628969099360075180094934523410329138135442828417419667660450020302725791226991835309309904350519775277169896695751012666612484996123705824658061230636549341946353772353847256502559299230059708672205806258078192365971229407426411100522203370801883360978801045660422495415498395392435169201553938998447359782907217478259097827470124954127685902024144358350312650572612101443964768748398651928890056650901122614041238234484827589365452085753800901291898609505330030279920549391725529609085950104393364051410163218270357861744280293822046879547215661467548620526839159988042187655020925238897459763039384102623956395291728187832665657676191301309167658030267202643710625509623416068746532059528983901144863435882231708345398017370764455523600539902232933592756840568086521273281265548544166869155189217769253547646162274698681904982234866298619169147606728419531849753765787033118972568320216833418202898103877938830638735413399030740564216566952884545843561312568965256410100307415769201396847369236405710036800927520184308720379877462570422389272530968336374888153750668030474213183276584156135282037084306452805350387567036817741427086657772348793596448591205056211475960654991794579079509727749744145381046319701859330950696301434310162412623394533581040768155023230373375367951934091941241165048796250062129299057998101829846308428031549873308933439874652060342146147487112567741122821920746044030465493346166046949934759667809163747600240109859253313224534523318272414115305989077622667597620194386096109434183389241552231538271746064990361981994758480643400109172872094736135632452901332851948137971314553706055023957966448686966821991071157048343122334001260237583112954121317179044296283918200831396802298468845835281830105166394193289527823526663377548771320675672435904302829506965065381751997283437772160841249722003409268884062102256196782344983409233009570294135858257059097270907739258344911489341204245278111169086281184455973633769673687311268585203110806661036758146943995527693971279945008388466314779754691489727612537392064606860749506761615404385929028920080939532208104450150030102765923748624515319131703319720895752546614973524876482149732609293236236247273777247682281412717649106363575287531179493828389605764658808933368078871183171217047349880988574824325448372362610802218446169817070746575905701523040744440387553885188323723297560118413455086687428020491756241547694681510237054642664561138533959873257613324391861408301343062755145453231896143425698238618820153199341060086040582767420305271235520616347786529138839814469999702896131238637423238457679536703133536334614066610801078208632267460386521332681908693272437495162368891180048919544538231408211021882239835055241719820614932102560630354408793308986702893896750522314290296683540293827484505905300023101114992678464105412926567451101220289034894056181353733141385555104182626617264287068129416704930481819217760443171667541407462632641111979636261208100709624085412270249731273141538595684501410362538480004359104643319518414061525957275846423061937152965946901155002156142045064539496986370236697651210737114979925333838233483192299783546734471866931551536263459780264970260754449708918898646840741976940696392398098349093164620481102695289878324157316315265067700879853313949779009728011413535569426979582389581110912157244737931259265697284970217655135182755148621789122423740790275289578800695567912194172232381437001835055296422752802918477505980017007907830328996730968596231403288779932382828401789209564023214626352152557846773852252722874386407429775877571315794193926987712301114758359459503977627104506796335065315210696845619852741005843152072857586021494712277348477454941140247292113886806982524284931523693052325966127425300967746893055139725681250453767381048254515620100529385732505537575705833592952363980135107610728887764666569723973048108451266554589176904835207707227061181003264797909809603964010740136778165330131636080406736628862983444586970582772349185817537741391488455814718914037828201228379025106991928961877954472191162771803243900838963413363540922360099635689809501854005721083471139343422463302132347161478224568573755012232757654186967083217823591384926492065733104917127987001845373958949362819097899361570859947150307057739759117086549735298283819946900303841606500062502318918356952336582639401806122557399912051397857458771314546873219089182093197569434149084560114632323348457092797433851092597638983214843267901257463663134781314617308650305690845449700988250818658679957942716416638441577123155235542071894931406458086716314074927818884112642886658753625509830302008526793083053660843091515069802823880052816971852890353005110913111226709140643938928883849361969638411929899250818485685497351413304912979628343794926690672319498774771835144880126905945243021432825265901074072219675205421551379944471783809347780511228363292693403155051134265892661797569449245517472868660920599174127187787266072773703505077452795402984339284890109683702584921296131737245478223242813633895009345139605954330605487395849639794196025882962585218410041041429164367732771713486946842899444326395469338024741363056416431094423601582895344849458557569072143815600281853202226854482541926313966220609663653863085267317512426610902406967587585145668827935607177770167562516200765317627419446873064701802764040551347065283472151903752719308428159105984289801003877027690073436219093706923712506639592307178568316033439073153303229391098307418523745556949162370839618754825331714657520945252013875481051845919728709239722269244770125576684572285165138692025972298962448488064282487593614865073188125074142887636760634331369470666365999529301391916359895775328977931402715320155854718004339702657310779570651367343411980684708960460486854085813610752944735823372229719711477975083318919444329411604351499806575223073087721623022082458857799250279934773245731569510756715017313617596479814682740942606042680619141077209118785093772744481092324182153082120461148314509548822990848713228383587947163388561905319606931240687609278063872344362746752319253909833481608694446649396658474584472355022720916237042652989203977511744555535046390355716747577476430768291790028136110008828218535184055926064540415942043081374080942301716267577776825913761241698826441242707207132111082549055297779800869982368478064129006255786388275389167279944085935618049212708094398002773133828203282452806125310544290636953095062867364164973356884934487769366520655412414671998178217851002471623636416831521977100539461389358348201695611378431285352130979354332581354421771886107996693593322598686163173091956900566100319732711910014276847848482784607549460708071287982503797286563627735864685203387781411711447488662580506919074616983249559689439820043740266093359451795279470837398893812510457712164918416267341168526716387812302708234976506100956892054099586007977404466522826031043604785853756197203659574797542326864743641930696275983938639039383976918529453645314080185326049716458396631545041942484131324627562348361695524825293457752765911242135039196794110091975825747570795386505568799966389696249682246280342966618524092015699346105263218024163990791087132083482297903130763979613473913387176208922928712094682675515949616267443388284705478374658029384543881572979624256705070684391120324441805258828422852509250787864822604748651961772908816194380783959811159097025994482453404926919796944922483742026319123452985413278017571278566886309150358857124522190490885881345265863704746228263588956571919236644608937090368268874303754973376288862484085353465640115041462926017035394130089878665138771334776409467909158695157752579971217718909443837122861551887220981191484052592382920068292711250569816439601772572259768012623447983369317370268885112258821014795706180517495609583877032038048223764780202857829613900087634097949867241477820722398981112549887784310561560787017925696945478944574899189450789104776948969124427698064774021771308210774498675118083848377140246948789789200127922544042988206918987941080213229730827690255539103739275582043076502307615545309193623059515142968291118529600993950169553663464472074240224949614572614109928901068324130068211147114566598653975234575260644389185930565044366393116001108968881017090742771477265223806396303581603252017467829710954822985343413521574441176308265778385626082663160908651082450850219494390316261203030852320657614703993356424039212793921477017152023812702975090180642248767216176787186820146640075049858959179489141898945811981166766767170808958417303432764811446543595418634015844195047934691554050223561608312574096058566460662719383507164351661101386660993035073313069955716804706013822525515533056761110682353978362144060302654190404145577230935702804278403687876413224776226002198161508963623553291372473425796690649269790459891949449662734434497162619543058824618041217236890350648441493035341339677722497236966734545138008331189365802094164092973437751412787668677178386372246386901815475375282245813809318446288294605920682942075072774629822880638169371477662359989082379276962773285629649665570212988295554230364047191993415244940920604530986966933515031262488004170410349415695604383630856473825495652469190529276541843602095979249080866386859816410557433030131120597006919307418842721380676606492045017393675143982663469887726869561867405220787200566946232894314890798822098147226028444874947376198263353641501588628128443875786381112926797179439990922916825839092357124168749174656866448968685552166470253991097450460836745665776472567072345311249003579071254220431847829346190277916865241513339550320580978949242251407171309508801142462524615167545251923953553812812796260665256935971137006909979688518557390466617284338472954227671934777936276788589891063819758889652011751278052432598139972244722591673113941914651135780718062103411861458368484552768493818792461621795938862063507451763056325760717280557051015665570040719485293645791748867210332743309567807945264041911552088112683723606891810553846521465344581837340337575816983786603970147034983592476490445618714709223745252830335030049582105783537791929412139077666889615999658819848049169039429437562782426105040077835870008683383707489836861848947846519033195580928067520781916779357919581684434751406228043820330757395441949923732785636347709074020264905031104602407841853676929169108066940640934182483936811287487300187931038293402458787582994845693268663457343886526115370317989144981530950100566693608492368194385097064324657539024043053941959974602378726196174219543946708813954653192301733919067704673869912462150060977427632515602398636678171393136327767037299342951693778873671329147637095788215580934326288840911910852018852545035243020530629293621139561443932574144697089598068829122935731776730489045717358325562473156966942186455302127002114022039974608747779644709489115244797796589906384418770997189567851284837589695124739467392960938675720763779185299900011086163519213780957046726615385324925492817408567133339731588076377367093080077926628622522134161015406886491016458182682593162761762379998002418582226999896385410590275161171583552341286538648885208081413890952551752752797152221884999513693097781447598139937479799584372915499176297136232836731630374010313502043942856037083079284572855603421118286922603912225520993199838422159918448395641159089305976756705607255697017154184132277599592427392938983213868915348765539995943077594858133294717775720439621772454892132175003496794944803486399576292334316087142198570183000261767196592083498937714834808242405965785655310308867240264750725084240104837398367051824521123066238391904852929941093000718163245431136851931524669736901982562996216814232339219187517362249544143838108073634560101557169614027499080920897378574498357297870125151949273252611161270439044500436215339165600634590130638837538406159637912104127317075279667888957046588281010056971189276119613442952242095845370940420408785438221448450917300404499485015618821325815982156305406684467854915034867591295681736123801644123903472484880982695945490420745637844789016272486813545684665580677166106400066529378041174791179705123454191196373928042558220338091435619540304355802434014630796745807381153118372758265098581751614693253118459658201085261240929239816470742412216818546733542986999607169421929800394326943465975730067446356260970304813476771890576978631310520918610986809549213489461855270160970352221518582845449240776827108303819094494349973652345765519749649310958102444092065522056161957615174661219101969136249516408701120946402626071662270491861796002047372616649580878748688354792295293871534443385552049753198229230272437336753678022532393043874055184367911111756841551329365459321352608483315813334374337310568596237612671310603149703958105283852010022577250217733701047198419667300512304972779175103484703105288038490648270726239725182927861156936432252693896147533649924016941277794467332256579075124762539427709667169335313670086668318029176967310803557640237231328476703794053310311820101309395685542141383864830782211759227453232247222599993480652705495692598122075926249149059025080339063266945367639035599443590872363729278907201041022180650203892026357573097811468229412919246771523165703253446140387755383761517408100583680263192942088900969832791145099411098175243011028495152388183916902688052544899401372205613020195513891997531637831222041877674524454439472945945212254095374591974227370351556447699278732972179879420749801974327671114047748851166038416940672866245738532130035162815316105688928284265191769628703870398388478524535797061411200689742531616776934946758693566097915215363781852121921266589221146009676114370113880990427548952197197793587964394675135785553969275488255012991794910026117762758243938305646893882803367448467823194897238658298949353783762585384450212168523959099319015548041035269244644024724153384295951342588169331291340066513552922950611042664665784552557527329526991222642332215088273248516866665361603520835955238201517248244853520194287825971728930306223831381541107286874995748916814798772743186221871346550267849457341258409383121259355173215564802573398512742704407407353903309711766205739603005850572880227927179705863585546462587859618635376158672896533233699549913407067756479576671402085350179079209249233543131557488175982125732060048551988337610948620176856392229720122234214910003609592928397806655297646929652255915926843451405045566792524234905885047768125291074726237865711707059430190638416289880363751650390879052030444196453432195347346546471973595196025067314493203517091225798046431962802290239671550536465115332623149980169153056475053547607860207391885581969225821190724446164347656307844194594110576792306538361726391459536687379047485098306982872205684718711398869858317294785706246042607703321866399929168556274085551900157149582074858798858927963962886642316870029583741380775822184803732565395060022164330511870278833384757665789177983496628191962352707765946493535189857347970687549875458419045145213049730996897937959794156202605143810611598713734230136901890281412728525398320287477523443561838173293818292316049345833632539136167226924039140406480460644135895289197019166310421168967015930147894946958187321911099505281897711988711986440711206781762152755466176871831112451052660929435148527879081317378330218707839157868046840119670787750254465819236549430724723180882781380800498009997681913741209779008348640190124094824911594977145019009747796649127544460467428600868260071783252436776499503307448874271267037441639349631669659614339079901183854967640661714971402324716688608371364540073251883464247008581361272298946073942177695211713468753824764056219306029960615714963478676063271289460377364780779908789119694374694948721756119137458611220931626554435268407506342063623259853423754193831196822960510641939047408041517463239276398036147791768823711124554469403650924174273895189888261773301296597176093238168673898602284494223265973033503023529023169812999040854518427316573312766087472511745078594697118939720977713302594750217872938788577622688281692810911636801747417784941249725383961109844305428477014392159551331431076168788988569290084440324079103589355431543999281199292075106877733449820167248665228704540250235452159420892950731047234328569696921783329007157636061574786939467398213664407458777725098055171191943136064714165161316072512894042066104560945492786017799288070461971906640229475346422951137664902689538880023720233208657917884402752519306741337770701896574672161185533453422328642339907867753444909885936388031154743698567644292878171602323173273194876934667058056987393758751001171478861250884636993226549158207023070147724477550431365239144561160487466568984511452077444385275342682659058686754277070638882719331385445448903571853607535211471856374412735709013764283377436284460290231937342006032339701827707922817442089847588744750494996349517641320120671806850677834301397403339936324196914179019238540804491813927635863888947846261154343056708076375323933598767814935726758167789515936496642310804474947475865687661340840217148070121244073595708069268852618981241845239625501954372889470019480473741407998604411900951037029193441263418405020994094303361480076149295100962624745446550467217847414473500041749715164653532302920687277804823616802221784964851015064347929101622179630648327637687380603612754752974970029149053744377497534328571746960809258496336943458129317117108749110943530231269560651773367664239430832362186295189004611440592803547913033137146900023343642270506956296218655251529600728827340284662917217550133975294701804836435603468062751800831292702336291596085862177615293016738724534504884272841122349359660602202190360922370551132725799910004522848934386417702739100885687810909977641047143363695788010064393522909865656672138344979003352840989665576735791189768139643655400593235417439345892545613635058062893557581403178518529678550854034011830876857075004332710375269005275398156726238886594609684164522894656666643117415552255406921470418708233253877054918082927050214470427530282060399553781104384375329931827341236247969602131021426032878342743245861195045306133939322074780233254643933422730663181976488755094378227681335718503138551807719931614750344541719384731755237076027863556146460738410843506758494102586700860138868618715321908492007126865589707875689858105219292094170543344099565493690834388075882098724877634249396705111127634773665575252350634275462563176731500256038365869233021602990256900032352927488655490124416903452271837447299576242220639010907061858064097277856086727174377391537703531304601984931766854839949112775796533738980020917645130808081778526229854568799545636474153830960355056110667221970651174118436424704955422926114611808924206118633986104009778463930878802091271348693806759042132848977432544907839407229894124083874975784340941411789865437199229987857679079972812278866111383228117434403231935742412951943355777337320738797039792870381403337389249836994358066884293071110536418096095489031736481868834142904129262251299674149240088681775282677536767206682131494660086697105301879195912692669752737013459414707875332326832316805520209926198362044238796117915453474668621065495507685425295760656476351263333253557053579391889347869918730826586903927618911562012746134707451077209085361192437234954620077993720817707292652708920276099798204463859903235184577063288658339775658030543696920328358660586443711471963490741241704808567130613058265648429056733041283618448067490882859963365870952030401758438815166830096400653200589361857914073145024511257892789282012220366162507932778645783796644097201418760841458244803535271505188446325364600228373038329001148344983727415780410763608177474534085659766722855438779553141472201463883660140533273604776967204250729068893701780448002308249402131898895961276065230462135625138814289282424482034365894100618732231319262029630825600077324878984657127034891232398030151880850241090275223242683618285738275138652335488836850092016887233957720005123868359875312327017035129899936666445612378536864845904651190457646440643419208135324042038936473647725455300569901618785250323245030220455885019543920298770089651967385349965131986410066329735724022730291043988913669457208725464761438891007894401376051232101305572947867492280324821625860898937283773095038586551924151489767910591860630091629894310383726671100588154173294223723532094395594361641772465744163614789556332071501898580910681585287558325199372423177803751934338469445772702432876660006353837836703326676911276499512012962582693758329854966142867564873486417870035100330795449024284598485149429540972856737011140039980827119239141453802229603530372324417112527376064694011108981738030056876113314966941924915704431558708610086023561762708054622649049338521931180300209671257547211129794234628485633664404045197995878735616750046586846414924027073838323950629857186400659775611342196592070598169552997720795851864641489120086666175562439645778515180160384529046359837419156435243229978218877327828099325455308008277836672418275750435346665325739671985506750834857577562045612641496395264482426347660689847274946791804353362366051874308617906390474552359039812115785633662445482431920223051425348154020780114779718873485466160750066983756633375027947280911825376031437610838390417455312417927418478813239767795436873710212137850412494991847465160047196051375938686881233218288388039855640742456557676359641088365920800229589580739998212276979988060059286433886029676374980065493978457898258899695626513870863967195189417628051186051143850527902484536697960050092080018734068164574345216950905142467408231172362206509108459790789900935688249765506819076585037292263329658400840334443703911651918318863206224084506177979352979979285550048957452854769917110802987647100565140080883702332581718307479417361622995966993017794884062651434505397196069395116054966387078372208286495937249742717634708016775907594277259435004301089035868485896786714358190271668478971333623690298798338050336370164705382206735887598487705212548608557462124012177788808319104211003460062057906595584891542518494477419946177808481450736030647936524026490478748604770354459201268694152330901493672916895616887540284078399037382994770715721275703971619812251168155469894038647837135488907360139008313193339134501666772312541329083212102053108202297680534247758836007215220486139071741091128638505452260822036101738481918768120578834529930885032843468332338214627474749848240644896029175385104045688659856645221426062024389308831897432888911414414944316010763331281262581235973890151347909426838718615554968270002332886411059869219763135610736692850809498283104418349888858763568626218359772693675365334335478813100341812132988089348275392076257605274171608160729989915222663996382159687340262377596184844167241877430499467266696525961873922792118255327000888738216608308731076862754700201872012123299536865580913664556003609198864693989255054400782510467971752863106194886628216151529602069027034319849447481284632401402237915640524566126561377818427940870089696647162768112040175042203777960661383494935285891145967925288239477168587336692115864894200011358348022914538241180031723440081229178541616281104862485893862931314781580929099849929790025723663385256738050541378141257540675818027576504555692856993175194886865046922723986839223166952291510690890165099157192201938772180073744361395520795773414273656501934718321083650656676350516063046085473676585281605009155309372032971540546011226179858420919660100034986158006779424245268971529623483525659750103449182862259059710785618881444488273733830185781054259823531070834521256848926296318580901514461365294130225580731088689780519225535627633596308381077143519930759854675257282942009805297410267669201305522661882855813495497652520497056053749341782487262654372295554021810241157615877726221411357389852569916914983039078011639115242061369651371401013692164044884974391754028877524959096257867901994221198623002816636508756310729679857551117387731256752689642880393660681171598157168842922124970023435776343451437495070027872413143136382052730545706647770154682968890759108065134153342367104434332811695524280188861318426064822703530749854578337218868094306156272452304474994533083367209766079100311153501642596737484121665343039295709715162425462481765140610641555838017962917754230969231794114357430700387322717740738700586105183786602763547733814371035174551077017360266838442258888747614643313397379662416429156052575407391376193894937027042516265648175002807819642603937857799995239621182362330573252823250875082493043588960464387981115975753794299806069252212548430384332671093753746804835254281830285779599456875555812405004701236669125054076108557987921717995111107562970578244152387726255085686848362480641995183322918564509299994938762357299373267298403967538867641015301737963037778935533677014535475081011324338102251375453801006253492365919689556561806644926238039334003165876996374577216681658198479696434174576239983489285798119562279428430558802982138691171545290362097942755344284308392470149696692385008832170298237602126371562027732535865155136205379622116039954181782634415852155025443272581908624586124718784401841161075490255822610513885381104394407242095324645046737970945278053048720938057263899032107869608840684733339344162087061315569141541690358031957803785560435492216633041206749563324626493755605530361499281079517131761927349415342519441964635054465887408014195734522524559152447637762736882907199165483902875080669207754106332336256502832340626975864600210262400101441051902364927900090207197793645715907214990645793468082625989637516323092550321713708619296231930612607825968554907168407524424310608239531294860686660184589407429093110615079805651419178750377809588496473618838710537934025083717492051238501689615871861837795819859955137418083137190691464237122867857076941113699916940827867146546635155598183891552561999272509207582038186215300842416270615518293669136213077130202556885240270140233207568925519285405771849714349471020896876819018560735591774498811447805373682376709486718830434425059480764671062008087684322053388648762910271810955868607713741226069257158205406990492338283398598719259050095358273501618694951416638366242854951116180369522536621635584125214368967250494375705502954384661673054380970138541985618333307703413139071875739741609451613880135268595475819406443893674820007777916208203877574152238813569011666641007250697809462612754152291481878329339085734557254848138124936556185175334404245302932807118460919917012991472799316658902876636875604608849255271382448180701117467463509579827179311312155647669973918331820253398718845511467390114875450661531306595628856340586820203397692389477774363747053287232618196637648971073255115453659333031131019093837523754490397623506257940717326344758993739373009238759217149207727342988082941988655737337424383671105894614626266075399694177676862204501649525445460526198676572751698707949663525811638304723613463002135975787275725219470228977700513200757408099214966882862640139754551084791362693587493746696253240644150216789661628399342329702628214903408580361406044014865241815646434858794634740793744505042692975348467389001436204130244618877930798247365606706702153056279968717165902109591520761795948311965675398848465582109509788726131456674473360619242298493294306142893529140284629321460464139719168132403285421872814168793663610126392388471464309607701426225262223971884231211723241178528251170093721871534270061933311595498730543615131823936392577568967539517223475649003844997070368418613474674308765914208900631304862392751757847981277864004326705435717501130544568703269262181355349929067903403360424878045142937824589905520457189140714116930371407937881364516096680848055029622052790141508054303412531022029881056493817180956519513504013831135447586861323098418168321323757426239151245839501767790833857439105288430536520736402976318014980944312078301338747341912237683935233667387056271874000661136024717667617300205568593418411197402206628045098944517305843697594277739425160369909705027815638484482958311632383602361876126761221791635737974614019349604656322329612011064354929806407903660084039298666417004372296693731604322471838653582941761393122932124245459427083911147218652760745724866541400780804430839314587578113265531861843024870552342479925640847791089732550690026132077594543080636376137051201361452908792574156595525593276359496205983398608460565235736958415647552120820624337542814051703358253495253346020518449244995570377607785573434495947148424224572744751333165970865223005975038198457701646057586609251267367198979242242018515250637248688088871295146174992472816153707592002816226506493229697005533132193458466936497983217095620954670749188705355212240606036419133669480054626067267215568269605394789349499180845560667795288877079118365476136004044472585959458435736732884420822122890055697499620834968636670013561346785109748994354356515605620136568323207434115673380351968083658867696759771496500802578150156205511916453484276295580223652617612841420795331185687514955890841972539396331337316916351046072476706623699657385491293952910671198152781372078025150413035333790575059925316323076926234904691078439693919503812227253037319722474445107099146554139139585293136217432533683023927670384608882517657875687679367688826802695940687804841146418106685395001137486599604050942632173426026287127546531963762849816204839507096419762831052044956594159855004016940136789708720248178961350768270834378321868474677540495878377199733504049533538772454398417964054190556459785157395626879579992047816425017023482764979268964008018829532737403651620554211646915489164186182798316074919088977587575253262157720481892314821402725214316039005468056289053399124229893419377122172234826209868816665230233616502919564441257594581002453851979454393138900571698717665775892740867944879706667133985387529742552504368290666490233018000734096980479808073945050477005629620854568828395501105762860460748314986895073828914679474789748527513182033344638134277887902612963472901444517018438143417821376462657187420280605697389887995845254366288678659909456591066483923766921200942698991230878027491810036505479997723983042656597143100832318711397560932673606500607519587893898968006511950931308681524097327560388960449834255195599188432513217605952122193310060569405443670914525358791994638454429432326366615887989248283154920673603470580706613831867548250046983629614530832844894203115195024594470646988053908339618926329288307421635764352491973317395839783857928097959775462224577413155778815280270140280183489248197763398347358664975682943231645235787590879860390876066246240379451402426464566223188847688056924183288654691332901016380627219840395868061686735569710546245018166634138876378118656412460912988305033297231269719605327649849145386179128799275341959272146560632299549028810907091312356730423946815705261442498829696311632781749438332180642260451002539535926743011856879965684711808678271008917936930854554716587677417568858142399652272251496972961508077595477789735977166069206523904688265871486630416729839097194434388762595270762952480989071480850435073905871744681266533585665209763017293860317850306798448933509154741534217851834293717229819114541440577969862986380475729358654211570390196288226634588777383624005694618664604870482825275085166715081846966912011861668904757769629316542538464272966966702546856591634179170709790375852721660931710156886246555638054452364617443736259004578487317781662207444596091645029647595952532876958226373385749776121833977179892556808444531368422986141522654432213299872447682929801506860334099132784318954437215905328766159443181948841547946909751109178351160298054745607824597883460815700319418238597794230052904049854114762246201612608843569776717411765428764240033085327597705212634848400300748421128101784787599628399531772422652689523483453978463030948044199270373213609678688893993034604283598130447131074079839261197575844478543836718669148410596408518698649459932637590029734297837119733638416379734691214400231064602461058933789261762335312910074998462409709331485382264652492013791865251784211461623485811942971957458982269248373677379612275941200724619920657380899508626812125097502369559452314833258864413444720065537952020975396495991850901486731351518109598195687443139747651552324013557805886418933529947085566865372077889287252337948184687538937257038729540045045833436319085659052025791360048431816233635756387365413718971976625464688697596872128350645949087909756974073666125132452461233459265630928358888029908714397813123863792474307470691350937641561754523107565386801177756340991837065258690416650489911759226201293310124738536232750688214749827030955510983784128325372475161469965488404257495219056316372602483751466340010554492025083921368942015863898425791246738845851872718854832637858632363569243155707638645306391476136889149752807275946394403861412170215765362418180470323040380570108221370431503601899546230178315197685525715751551466151447719649094281690954346804349549315803597832004615651346211887077409928332658606628047657899854892509258886520396187956748336897332390926965463883841175378026821488605835558124650258632093049329910306812195104846742621837268128757419047426852922265868309214297082105469372575975176929180118434696948478735635004350260201072124473173510817529991708783527540203507444126568487182014012707333059916456897528833512138866463890054511850816447254550449860466339675370632744853836099597683423899729790361675693473167044458084656898049689383627760480335392379511841670954300312096099484678253036901110456621552286014981635335946702031364827302207937992625799382112541273652331824416795506012521275422939402357983947734074160692210440586935413034290060455485616966151091517939235565251322529005706626616399840747556161292409265342001828229214224771889207206563499360255538814431913796473292313626240757295374922151541505481486161439447708184391503375595637129668920933750343455058857906266102795051632484347517785978295775323313411556403338574996054791232512815178829995016073083615911762912807140943265709421880676954040922156791249216105364614646174270237019981464259861076961147343871418287024208577454102744157251374605807559652989668103983522331773005856798736211784358073721485893715199859942143076831892246250938439460795076346481880361828367706783175298020954885880573255887648742217293879553030687797055720059330561244848166263936991471959611810810988600032990009574880224663426077308171049142086505869148868192698897864934503622373256781630869980093411805561454357990857799965478299502781275790717707902607222618674689348285072030524157074910082856597144675664428920309135370902987523038654736312562578641361947882296467413488060279839437488088867599828236051930534701304652672217445735590772535403370902678093448222682680053593274050927198651958864999928587927875397210715075391153809797413174486913411766000980892551332294603430136868166360279931872592391424354929275993507786607438760277234827033453019219188269528949249774088459798992834262074116509659699273948423691240298934697772845831203728284342734080440582279279449385500813880860469186297615049748852512933782219769723482671459702540254235044536179822421216874614525001775749713947605392725371515410220051017826506129249370210074713215702646718970176529713529170846693381051341914295151409449535274191100251786675606588089286740192896220173361061377707404659207467549180382211210880569761422139184898779660299310669338557566288780097323071845964934545679097449303139272190049957007922314583636747895359566529361116457007403202909831940409008408006455189265916040115644007700978224902795314347419690556022233793451243422812163267353732124081552859052790805333444858580117846540174528080705596298960709801527940509275683218397940646245808634695942020582766084267011458198139134217769109493631186188584034555691133503811542411654924031597346116788156563936844605336064630810599891078683964173599911243401859150132908382095509344410768769312197988782293593537198007096111765417917288730733276028826279830984888069336133917241494472894000984748321005289428136407417143383750862604881892027565094938513244107402464312659770144751611495298642336640575468116437589335038757968609333810029938311287642384822983177956957457919821467535466615144194479940271281199097752277123252119610598482866706058077704801683207381237291016268712673697468663510162172182951210923396488561245335863030883344219370043264835426428832682045085253755391670342298510101240791652815282178053877948977154259387833692525521791097260735254755618317567726589263934090236977898070488889533001768033080964352020515624465895005372854060191248104423340744299475277063476859885100620036971367756235206040881659896008808970295379153880140188652519053561359286184993498714652572977374716481459400154748588295102164232072066728177279872344476533302549821537503226858890572258422159433131778568064332111856079614287771157174759861565675947119039965526059445784239886587228092494363643338630209966115619657624250037371779165687655095648387588685585792363772629008898474154430690326056968717544653041367105232246651558722455468732326955756053401047309862796011602372894278565100868637091089758266599361238734206663049144555150539070595637588187554293181813486405153628836709662862512993035807782770529389089919949664542622271445208193476990560947875444134292560734053337063940557698527728823901527391674988890430190248277740962123437623771908281171405783186441817996291976810993186075556557998226961899670505172503176970478318494381174105275028007164338657876084119897513726133620867213265307058021024183986849152145662738263711400764695322920097385398830140165112304853506792641405855223258965232350377597738969524234776253945915473091909670635824951733894422842441690890589660074437808252302182164094347365335981091810165325498936236852670961537328994524144662622431693237259802425553316465647703219931940096947383304113797575355299426165435216249264901202435937549720565760272838440903152626779553219325273970382404419424587985859846781540788635587515948941100411778748944502650203511973915518963080129984974652062938675447263343703802103216183312660101358702610588424035217529640766864782156402917035720017055514736724330170550520652178702579779484955594393385996288966604084534992808757887299465721086827531800822034503669206341119390769408551044063234359031185562305536043937417842317487170226200062346072656604035728764188813684832337862573503838491030861586594880626236663590941386623327835927321717242261635468987759100931389908205337030770125738718912435770089268772646148830404363784732440617363888102030072243083955413007193831439679970456749005959094031979836487634126392952125001974832070209779717836871185108707618032380023315277752035894893300486819522695218370814949896932469516548422492744407152604262917839754341539982172145176473319158732484361020100096843159572114232745239469462523284332950336060642864278383011730314933243463477469646126012777763143946081809278161847363459726085802082993954311369716895213259145683275933972210865623028510820734195492283984272237171447600320627621860145163832082725642648053305440108558000290856661858612943374585011721473586332779871910908665438633411015793112979556722608816324261617218240188630575982778748753216923065833352233711992412960663285551058869264633439446795915954686294614812267851897476985265416264653881588951986235110499785126886178087546621762307192867904079329799033213058893242834314134564638404027209296264546084794193282406062348821824423155096768904504497061310235195168378920891210746365273129740636575425724775096719685973840576077625549226389290134994901861591563708501023107317433094683524423566926509537438379112112112658879915751136317409207119917901667329649860100149711346557414843299024723560695387656137649394843018433478356786091791751305745282035536083934703526256356798287317181098199795831694546370237474853953650490965856766206827600821037559521394063663183057061934454436641882284337706578013703943005306609352594266289781854950351898955694436213541830663431623291621695983012038496943108637122750855537092780036012131708176091919272216046545333582484727067579416840034091823452982412452608419924000653635798647992947937057854184661089608239599508185063613570334829533970740227350035397393155717000491010204512679354461400115671394772335434139709506541341677872172226232919488944890308313364141651038254765895622435753193383680251800772959113895329441321721859304347096223992276458699860095587401063244938903631524427854527566729843925507208921156170380241316676078047203333145097818042063695366164952250125868882199360300793348864318938743538350779520736015874513241645425213979256676823982493109630427250526950543131849623812953265194125672661660564722217583709880675198616844293991683931488262348199697465820163923974650871923890267949940031368580963834738838382045223106716399600585770193305784153142999204994212344264185603545510277282390117483700082920984635953011329815361699580130063349632704773033869225243280908569596520924798977694322277132318091865693169389910910818137796930753149498399877281880235453475339256418983891401212406155809988252657479354535872175784013808059440368582374626977844863590704640726364297744401319292782694774852043441693789987538844035071829495800277347848392945872711029439190143738835446051406882570211233732353055205031785601381001751490539891533463476060914684491865795302793124812634292938729258908548785949974381609026349427257680016784008319822904823431224402746515750618877298990789566549591167421981146525982486041286695660346918649040893890529952835320375384828169153724378204160041109679640628149360050340719362200395015558988046003444392907438562636648996672619995607099011884690679787327881837494215470994195935009191107945020127290308719121239731563844162352311262518412437733499009201665458264015815084041372907673911545500186625364412514055512709567948836632239882862499529369150873406945635957430892689287223897788917209404656390186123754643704792312526659721911710831620882926714044399797932937935874846204682834735444913029508832604600747171792330300686670068879045983191414914556440968290589354551936445290932282717284780345437528663826658911009721234328805723634742252808426175723315214034767241558579691071299808539939227912672632135448482769304015962884348742552654461754813556572068845625918388293019201590573776635466348340225490519233570427113140964091080026750991318428149521130592552801650429338683804247951667750614813969302526367422406457815563011843737461106370447413823835929427571149495806735636579636505246039196761251582998379113194960798374548881126167046083541577264690350164040695374390403760483232487426907969264701730604605917641115872186492751601401540768096893232247106816237370071431262516928009116525918031071732149607695717330287664400388449004944403498864333360834519927216481199359488483600349580811081108803258488028117205380233106944766633970369772033836667500635856303866070883281834303457907185374443436889871019188538271949884260374458219127304807439449908032641760467442676895825187712284759765538892708197843487425672698947785306797456136861074026466056025262726253521599259674374717153826626922252778432014097817849155420887280472049764295288679353452257281475683610989060632309587905680120375957627610190163630854609626389444794718618646337790455190841902049220437390756944540835564472841204458038075119485233019599800644385006444878260393031248453798817756948921281426853927876203467130843966604509890604936184239397768012564657747251009692110704436962950828733238200269704213001973708578284212609185512288364053406427420303718076236718966075921928082423103412412810073729438174264930535115279310370809436535349704372122092772808311205709694838483480566612422178866540874830727924909126015149114122361383532493824266615853045739591845281785115924981801565811135432910818553666710891431263810106402449405293846623437189678807007567580086177116082086508543729472080209244417461996105698618463632958636895512937468286886682404553092230351494222523983785368113123054100219201694508508160335783567635083767105664768942661296097468283896289743762752819459804356761526930363403745840765716926799790752853383204561001290717065254048726204539116643589665766760207503852419405772018558805297914315650481025104791231536384841908392109956913137298910477627531090150672724521128080344094934375618956437285199128164017185489864055505480273524163381538021863534274161007995170494627712376739573174171577949643459882973059466169081648635125606820015220192986268562363724238995378028616673102128718868859658319934729971451370770952241624919178579880792404688510246051074486244400907290665535504891210734791442862664527925011154938086489761748830213420041441410795441427287670967734944140175009830148176010626330199995334445025129924805020099189346881861627509479431811633412006466439570334316748863076684188151895455803823629487713358007691599760014770387051723147876917505701098914898156122133031445729257132348607973498863402998273351611396186096977683334633642642475919666944082526369731541662808000659382179410786966504805500337258129350693101053207255202279770041500327998007405564901936828562060547815868627270776451890278957005689876700179680660140928575716108494803686725737227355919718772745097589449324636885629611882714228876922922654727015549270728493342955748787958683652293011241684802436474270400250339991796631824618261137921681148269031570836386231758265876473874785409074213192879447679603339755275165096464233516262846292240987012113005142402910732427670326800972269997556931810321969623075167947349664420039190015168031606911955116810359733062178050525928264724932867089085518874155222323826592938411100883237239419184717929853250063224262081910303242946266965212686054995542914328193708056213167768755029525425228121730715134066039136166913974313475237170559641391942930559556154768506208515234225281915601010429907045194668938269933118586223266628686524560667715561982855423538455341489501453565071388554543413749648778431986954572055748058525780086179666897015651026699461670974852804355186180055286280122388273709964778105732046855525585709331418308186257861378324726572970321067236186259757164365173062037174367307490246762922896153572456886183623969935172618995367851903065774032456161997373528485650562680301728277393976085706730015645692751763089210426842212469752577387265542210891229336053451882108895436093074719896835353915251316716889023128918198142247183496249375669742767821529802640336650566896509306560107164502860459284808453346020497140593686897163253179398741826121969231913899808762316510754425254214527198383609803492073431918205384313892349547927187330484542497846422247526867514548760491877160241712023567624788494434928841060712611775246913294873725213093415321346717577035639780758614167683275903632702235317671179998350358779664152708154826805626435810369727777705898847828223156530818093922760967429057841723216560880367472838031056702612438620596147962493894376430630634116658168081135637041043896498551610069029594620049986471482218095442076018635583292167262827239525881900914642855602062909618153167647301300257865177260440887047235966117406219906959148898946796785265630682107773324332816340438606462744761386084650946327756033944718602019303703826129060200685372385470410133550988380528141702110978409620807711997699979439215477794486894243415014562775659596501840302648309615813601078200240905076464301671678264357564791487825545492125005154563158399916778472384307047774025570427119515500850043845083569416806784433720974794127733799440155379312546033451236785670015641768344045426759121074314580788072339328233175418935760151263459569043791957344628793101241465836126365790826768941084010864182013856048108214272807421492723962155717422052392349992253004762661603830133636670865974026200369994082612122983027641984627467154924303293174679552820647120298635038596422626633367131070921212257380172519157892095091006266106336238865213631462749009201939446412199279992873912379794575302535380996591374368875867370683269214009907039303435258154034127358427240703569235722463117102489618311505265338894364396016170821820757424555729645751950938013045267030484071132579919704000383695297637175849308803685050271199402133951319424587426894270817726814085078707537025481185285217124747104571388430808225434616852501972955318332785066003160125045393202099220242221786632325664086168705178937882742242277165746617028186480005318789740910675334686262814998827237874071631478811776664224908230911808824944065082991981015553822387296404044844386735156296816936867251534686678253214752937639262632738482524494801384379332337480470709169945386371509647614941509343253879599228405683359341651150369200331627869129155068673882533164331711203264432784443794776075453809372085505973211287995413910137967773765035075707572416004974965375019430059449672115197114300308341296634363994018174330297705356895856527977484502082739452667191333702984833554618443509315932958410103837594032571605948350008824847778370755659616793205222944442367310107768568426622743058753667993503486152316260847004083332330934165984957571364648033739868094656854766500386094226118684316127496335727719622159618075553247931102450101054149694376997536689230943684015239637005008436776961362604652305250764577945044856588556303130337937637584568226098090221625852840065007874359290321320280588570788290885914502093892780043884142856683543161582956314949949293426434596312557816405452813904309919340117762606091291396350276557361466960427486323083036243880609805853987508200972976388861815215602054945816834928203725847667673945028734389184344497300002237854372859747728736574566265858956786353570529323722805481645627762807379385975585544049928360987093531707819283823266536710961820867633924800590269133451145478524723280221339382378445922687713943891845750409806611868670907219748024381644678781086851605483002667174026633942147115787092007842782089215280932470301448694378940120771506628624553222556977274369136892021197129214123263594672095597217355486420574693213184565388870349400407812238002050221101397933292440154429190620445874493260329716007771129191303341536040030592428787830710953329225322053382433402794995593643743855620097211156641499198323985531338448063465927345270793522844317122045095552926565677044820428094261462968855508105089039793320121397450575464235778223558550701675483599212849144814888133652970620146615312291602056113346547334646776467996624798663764467372375580618750128640544861527721799710886350650036297025492806666030463115163910449108678407169818833956842794038931950535234731256377643639809891076870027413672509017278335449342724752031217068013036299854864486679298821254140700140508370654161486627989944339229164887984150478813186460524403077637832381364584373993133638828939106376978010829730086696447469524751600169514925248184909347552458371906402894112143342913042425119075991498804897744279855393295019487193322201900767227385856948221965134031470815752979578234072872870864061610195683636663998136823702282925492401514502031130436657684615954108211084629706091437805772721273839178639131717887443026589301934722580722282264602230721192844748786432122622694374886983998153642178727677253887329096529940391620545690681265076676045454676208253215929693285211021809327343955990867532051223585898112036475970871713426656434583507474132880978383694284993881783628246832043836734870487600118712075146229509088907333216562883425010474157959519802753737353207074615734359950917633034041867497697849394985536732586580997316744690441713867540958059446378852789930297620222604833786957027197184006698392559628539458758277975628750775171072662357262156099911422044199119776211668331641095917636420244676259499477748560348602202823573665983770426282922735568820780900244211134532936029986419370700261488011130066473681600843990864279445635536649030253558266681746134732163994916058042638442347875574571919294921314038478195707704847242887613666027599240203590166042241934340471174690849959178248913783842199708330094706059766141282204703771349261845465467303949686774733804213775764864721402325034567509568877330744461204344698138303194549623159225216894758100480008789347237834635276279450652193595454415121670770058993190908223195136491307771401008770891360107630083958316519855924342524280718239245765071497107790470268951510947850084898361951159837168287131598618856023948505123054067976955802164238423731900524591132981388533153613275526318590113074530233657968268278701964894939858312848555329420551346758763412603037648991945626571950767817366711356065267604903640125757089182806339341468885796378166403252061915963576346584214070960520321235843301919111542224330257078627857685831760336918405043623623218177322286607121028025353816376982875087437289188692242440448124529064238399893918617384521476474527290475856945769548940414733949928109239080949364363998094818608866216883201409871009567794548425101533234569090375516630089610312693060075013396845329775390573341511572845753442124574506855139857087672290632520712822836898675653699908618283594666925898009548939833508608607260599779909008815361203081003227157528415246740299200554995948799831259966967806525309956398417425352543861623538307011474134635803745731847267250875746770766982302626792659921211234941731833882053196324508227865888959093887982719859970809616249967455654558771431045850598961881187639794534438030685376039310828691341548451406951017195388733834499617507054365137344410662419697760348536748426469448604793483530932640750916469203634994632111695419146368359339833746929053805269210488100993581075171407008234382621736446155623650688385406664750263808383762293216297895345148809644306105202242490456731839143553416517872397784142627170207117616546800488510968748159534050146410010900225410460505272717611800300176174751886985947613572282512798560845822104300231710375396317277094328371470734178310033428183218610039541143092072548258959267043864464067019986182140080743256758222364998974188269708680978061703088007330850301817979954406980309944743153559891729237589541344018176990147496150015837818215855483607900022663732655686300110093239694453332639499744272024497667341832341518261996223270150217325539338388475444196708640955072180280866107249608125454281286619085805121430852989367325716034183142321846736567033177166764958622722078083381202042487964418622425320574164505509217667075489286611913040599708716195534534575866921679871342975350542397202975526974957753497844993170014618854346782804011500877397090911335389729777688425147425653707225659768549265335006445942228732041557055574363071671478315218985234976551488390132425423807503054634266265542137826213300655078857699962239752567691950051475299821394882915795308134086830649337794708684433794705369036429172880274031644626953416473124875929802116738429300846368258041108589443155064127547730578769498657997299214316929898935573100095777193327343666456136807739936208212526323179690927158138732929201188422171096903075703929226961371897912656149953213489477096201294742738385902136137967167055346799290500698397301715510874102818517964855215115172099528516768891486769291346230843087259403358807539071183504277202836323683179078265380290655140041083740719498772639494011706018523988193688596387804837137717786509367084073068391855320094340208363746054252695211873108044187555617609150757296353758504243240978194894253561488051648399185550325409817923941633018831897300169815827459443001516839520793289738300462307725198142286148951142478439440317937819911800743416221271375057013264558879247432237718340532156058990251445907985761617469374174049678441215679716738971752972094145855349507157006920996807623674653318376939138922242997007311089636286145640685321012699136080416760311519093495183273488320240136224855610240134003134626860317310814142381469445745744312988970092743783644851419704393831404193089809870336977181337096190347252542337246633577184269223080133659191757033533670445433368346875296299597712382816252387319226452809710623121348465020836521844818866184432708251643138892691346300397967516905108567723009576758783140251278160521197786504211118003803877658280629033901085979269565501357187891176745582524331542155000436234325332651773064604028627338774142790245242183923664463705762075155544467497176172763469820054986252146724511695147486423691645218403742894405229905590313564067061881281936147158516087644390217739145563590052556448005684212375509470449959832354588039994963950899048481525477275883542383419590884309029779786306296038796100137911094697557722558499278494833301800755207967534234274887248989499965603683949638931118762378569545423932834137939138021647616118285271041532031479967768967462808938358947703060275473914250749974237751018161294576026327190979017858527604259806672994861552349980466179473571652046506342195244663206688176556106240872502147025613296682721844457249268312486837310823230261360564387698331214742713878609427817727747014502988707165820279954505779956773797633115663620397397289508489929230073829872744566111631572338222471484278324491268058258977023497243998988844939067198209483010356271863466864726221166286092829190808860962867602907791265041424348316701049279913939388016706714493232090945822681407566101660625138000793051663759617024346749625055889316850459372609378181761805626424927044621708514952079284031715105093449061273621226386882727965380249642434080605888446776533493338058135061734807525410509222833360336289595102939226655200812022605140049324644218351814904241332076450281003498689306907751777566101994377544114969360082451954596671173255725992859952119981246044186943505451985484433714684204234607713930938280777325979074551646211563456576877418149487019493256147325630113073449915110046253186604961336164705987026471007687253247036526105011083795161210599213425560459092290947785338107951611009854710399684225861046708990969462210054298677268685138827493436368017381290491823802175884434858199763060018402455043639347525831184432193636078822342855272045714074737369255993115783930109736819090487924888661206532460152000335168141422972804477193676562839111651217927275006871239204489224560659499951882162445251561519251541248698539440557530254984069771032438283335078495458321119998635017531513927437392901084739392972242542692195276630589584769378343518462089531228431076626920567680291911716197358785828771504571705365988485439338455687452361582509297690532338080100239588158759601890869057946746760040728484613767290873389593701930186035809192800969562487800035954203504649282600218351160276500359007615300515757508898779709877246512623459434858447146969974708619341633908471726486305914339279858862338017846384694050699293616338270067608418255741154878091279432910863846947853495266842413245686736164003947230214150059728260677166998592152224446922722452662753747553137462434046326231320967634891045845244598715834085735563556630887023572750027903905856709684257476157704227887757124631483082575613673921608702672850353548863884440900066221903279112207312376948419523363518890952580963345764362987689019978287277952578086509868522185854654213618794096811802407819350928688707440238724062879588975043085326106396878515638060391081322698344181591025607591793497200486019243990420559792338398268709614517166098033509667819207870694670445052964510380048754656246144268720559930338804756155067939792354864468392917295248902411941414395004555151105274496092565798501994597445334832292324136115789201898749628600240683858562935279953952763525046396599512968205865885738109875833622381771863255911903200835095037665281452075692485455860174792407834667524564755230285139131803587488375127641654069323952591318391877310092234823466809945560512533544279271701158598689104477558802992722469475457343409971488630110503021626875573525751934778139174961643122972879514029762422373759765314287522934382892975362750581751132453671903657267884376036661342843964219541887566119884579693381298937901406563419516192474661306516511725267669323609419087733340690450558165213454487297074862553371635331581087738855095802330159523967268648400713750438601474834235330437085390227380449117576988953079133406811397562588492545284394178380123683157531767298914314054054266990963190681914906510208311130377896728687657942468534543011606591877413631321762198303416289445543557360297724554881458955418542210450999122832422240671256313535578227419398806196547685103176356379705213628453476087647191624882510939310918226676457010246503649076887174058871800489062109983884602249535444174934077227481562851572448302453765047321847532378940907877851143226417167207865271313548633238344810072504878677344464081608772771449481960020157980944682498260587592717763415996642278042914584234546121362414297976133124187195363825151679773423909103521409278990450682793503356406863155407032340671391506418478690860575345041992163225409754423164352434991500264140292956147699696135281539726892935453106876852742287916824480432608704463478624349069682252057662741054671106465204178936003473244014157701024500525111785668386033963806047470587868478677866005941018778147625395184562630317637358327298263546058429323574557986170934591291167804403130173996890297165284394825291332954976005579513856860519351140890707453397241952980145879886978105344437928598187338219021315887361960592742773315472002853239408397789239344686421601638980426095208234422381784439647101937884365289752765795163630751895935377213417194091471158931428412311647990508749331887496749119177625623516517274409813373547097884797343831223446489714488277146796704707528417151005177758584705360452208655868043224502154261560328310031904546602778549929217020935777114230574433742647869213136054226574013575310385064398286790589577389246677367491487536907339515858623562466719142440369524996637703770985252803613777816346232435468253332516733074960201249413720878443642861735790578481437239478915479884748129025766655262300741908124515803036992955037147164379926226167619218381593549727846720152665688420845010280046156910091842431075734179979783749230883487520580468055061820398994057860895824863813246156474145956952950257440684073664889904226040560602079193578678161126084813574082600007829756702414971176685873724094152073889241847585711465880388970146267953322313509070101452690127057210105779022277343195276782480856529188340361561348550929855796859839712262320837313667484421485838926042660191699304201533766491830909468499432157653212172381580140823486192736058717317466163847683264531184832681703369211623877310612543643962337345035839522545922383698407681015377194206583397155612108653083191645988670212720030129762880942895247190983775045851394570956574880254102538475085951906008554776417154677487089697871874700602935649391122591469261263511710087692787102960769193239654139233235563061366787913078401419567070881356320830880213526970725503189214741870398652371928414023072687812809490256436240867996383840921607586376700609603866327956945454200216914054497140193729992601076381319927344795034858657960779221356583223536408862834118876504409798505054654654340618816822304137332216455898377580961438429059850323819755090293443799336410337513679189169504960056663576720505647998532197059594358470817219206875917266453374606287085863099056469497814288864827362802618046077223206196839764684021703896226885242604920443377925672122905761457061866837202922236817090556108848373230317984179859950962146699137111763195890862038319018061032059854841643758537559118461458584528636882655994870662977243594811242593731963776359913818723798612690418725118495457562018917042825869646026822042170164938176626617811529465195189729743965577948535312848582920828318037995320941088406331146501838211945555989460999499266195976995452899102082423620367295339270261124959008335815158764211599728620891355269369880777066243495576565602414466461313951949093817390758101911627280585346834490256559339783660736784597741875456385440960717762071157152054663841375517012505847417609854817536768451158381471816080654008826680154523338651980071906453012628196539678057912794047592200584891296694888963217168962672527132555070744099176536736468323874720058609140609125633443807501075614691579295085050547070656868116338927157780046853815222838857263960105057058243307334956179789792708461912072633112251197557082335365279102007024268161463397894521512991183827518360244054304112902681963889699612182085241809012781165396831190827645273329640058674414682090257661164073139455063771453745016860874539922946234522818828837496340942470763000717491170722821267660042795470521180204638104755668948924724039745847695888633985075452182680439794593084627425060093791510138248701420978485908934470218315026316537964710422414848508953653174885833202738382864411676022315464960073515324718648310766369966940592029950073626018052003382192830878675968406343999421251846765507910757723562376860823556630936746998493392075127302143459749574953145597189522407961223123553409134909993234776071487196398726480243384457525538908352522657598897188751829310731782947814194860357498926797639375692780897942649640984709512814089650303781983675097553142351844585048052518999108785885084128715673248602784852202625103212672429865661527695246604319778947900124911930886867136656012397500815427149001629595311461521909491378190818735821252571605128316359578846573762774931071481719546509212499934584164870580273389017244188393954501649198066523773617773603148318070338133033338972591051988165809681695447229880713273435088736826826770722034381291341169095581164119393086610843233071610442261294455334123815147843960365561837877205018038913232670227465189079832876850186118464035832178304638050199921558206268148596626835738621220408323149112415323716735712682952546582245705117230412997688385500025680894367542856812391925356804836843226527830989696461401860946353979452432274274964920385141721059486526602561621700757001951723017250514112376787574823102663139662690924447844096274279748103136259643012732398383704025649960014459222375208937377135086960530601311256939481230368773686301164318462671604583327430309190082530180667483584749343753766607113653497482984301901089950970913459388149100613517153938432877737734771821280254447470438819087196192237223304078940382387097398511730500403660027910360212920875397242062759420082766066071073341577474795254519604098132952303380378722701930037663925484469314023785380625108348136087828800437117299693827825611561606438539305841566582411873588437947478804984065159864435345076088007997181939891110871504386314503554946209094365654392650941459734437752499801655609105275249481281179902173573014492328741267556064260298802557836413692016016617669748043542306072551697935735746825089695874826948731881544269818023315400606701953197215378857346583566060188867877883402696009264891214523761321850570390767193931751146569912952896078615794446670090410139420800171065178067033197994516163258550311481959276610659074044524985800229299228966543054067588746481449229311460408549457355981220577363061921476421011073334112714243475459628100874153150699878674569108206416345365903297922921012380381007569387269116011092957834426860655788441475726921085179645009860474953277920185440079838954484886707511916628030508605658217777697998220345113976466651924617025416334341044221145733295408504392807954396151307885264705378477983896727073836856837620235140207456693911087053479132411488788790158615971668352740445806936367038922357337268462210096916521348168176682743961853038638673061119918119187716359164169444571406379455424290874419543670817530677676541875022056511296774022477450002728679040664986471899711013362194181815184472591061447488424875027349454680510566851684048259975803596168445168373243003982331546478158041588277779460034850719864600409493977640398092361316514907508342421422902139051990165573319189692423186174767104600600148134265471179386165793927640354534589543137690424787165731974481919188300904505418400996882308154835099253666611841538312312998231819699109801429636853713921345260197299766841937950906406548032602340054884977654139891095815240233234467133442021495220744851782237688425688959031252711264762708767338357468592642121004081137201237521417098050822536684007206712882631152148490890523814401714196984944804679489675174776184049404631094279956737122753825775748085792754776105710867256129753274940581094794847870606374893196903901621417734653625666077403420493919792655024777067311768016577482896998471910716852097033010898010186445031926303162374116046753551168125391955617905343365937938089282722859914768508181201172867540470665654742948597222563280678451402182626324367627789943262937705557087265579856057809551086296577566990613910362180278129785662042808063521713920147250640452588776439271155252643537150490630447948841296952179190073624651786379689854808868529795126378890858504242865541942872273056884845871457476143153314718677063731935291546180195217512217731081929119956154340451468735032164383282109523299782542573539172290016513396984876017270183825894574556108791029901424155246809340828709852267349158535664375031049444588500491485483180968913365990395654771006567422899781917903880556974077808484614702490694200671838213724208851280759884631990288078363988372431080994688444143679764701359755518252438059867085825863935412502662727657199067541943193285433812175474512578521148274909532958863395251951656595291321511692041940837930800910247884453729889188341633145491480408091982281173152722432780262445509782321678235044878025855705718538907483505898554256099969620966130090965658274503055056304302205589701600825504127756601491826803917988196135982155843447379573702413895350487644347515252532802411844463140907913400762357692797913754689226884736149676856077439534956014628788995262183121832769384699326248204543358092547676462813616252866002903472891134064144250270608421664146813965398780967700813244277543465345874410359433720560138908410081960804386664051419536311000388461950017124667515147440366134559808879788950521931999172295176273037788753694443728709322519027105308073803344250662527867491541720713646960403245267328210151103865256574620291837156086589496185518608531139968035120710186676603591051690907519688103777386210264556171179825957862984636184672745364037121364433025001866944845893062929771460245708428537857217531391554082579635931071315989384210450732463188365244921677970430073450551852731279385366659239344190124417726744852219108768490083445392411318877611652510551507575859804011711680935050414745944483162589233546375855776767002031155304479918355861115050998041016086837193337357975553651024649345386759740045299465443507262891914362838579825472072300373383314140809137622653162428553463542462300076344744853432331717707644082936407500448460168077342282673654690211705120825871739934721949817495250924250726925642789857144682543911295027774569440308524614307137969039330836064040018859177956858262686679114699075516215713058458238926200549247748286076368766901533212848354177289041468683550109704090524777537298208489933703135462881564099431841848525123082824584262118062924394370484670057600731014483833794809349939449513215416659281982338744013219843698812101653169164961442714143245482547387629724500143589118257677641415351286224243126644694731445894464907012370826536309474640534463336976668148365069960714298144682556320014978368933051669087408158855984456703270505669128365644980537540195891176195932619380439852108327520574536278469874845019532470297825798400478093569804309947662567686031949573083415953921209066913357170933142936795525992559921024120101313417481679563312303503160869343508168983778370718810001468711081456752658660638884619648395491000804102621263814323434264516893555329375430827852957296723644138547682740396981624166189947325058111521969662924312118815724801397142272873868447289013964235982967010968586926180105408495917618647401412474267934889758834498858014189818668698566257552425115133889558784816299389496397417033311988726873131528027212434926334053497309720298910228004908373296479534316950778781520725900232954876062179302157414640607899306414205889014396961918180959152949138198462355194937194456512982188462378681558730644868873850415529812634340472775726538865787580204790312618484890551873888725947776814785942928251702376169625542673210477924328163129048539475711728834200324746845178811691006259463580546059295237249941449674655889780033821763324072532714591843213015032197235641764896047227129055747346130958417293148044805889632654064150538697516962493630444716415940433176064306038719972147798773892848955893028582296350937617680827682919135911466714042777926514452512292960800340786722340541320649179899342782139190630921424731548524409813721719049277450147536299714482855123942922188882872165823371928562075908049597357931836592697073626866846662967056473414696012289054649334216959657450094861720796723399048221426950965351576190183628497897472913885974861195482287233272330631073272906238657963912961558017968672419636993357507327926654753450832552123516981295456326013018790230598241273242036157017241368719980083222349838069075595238052192860532054572107246906693777913015221780039950986575108200809776528168571461898916911635158704269356305188550156111768320987228764381341870572861116475331926890642183771521971835146026562830353905646181730936806570256764236706591127446751335707108810195680022570551336875595585544273574341544072591447472845400028098970682853724683437493734410851193196097453241753890472845085958747424602856097878528545187775407997154621177303031339100172669288976201057951121885825950956918526102107090036450824200069159718001599236330078833562106398636742717199392085787672934536134885946613681541796565247637961760715070517432423497976271253568381906775894367733653120631963151801986593531388967149711435973775550871188943713859848091954630234668612328899619278198946718625627630057172226198717255668223923904890768146987080707751220177091609648770120434768279559338063610192024519833268119705454153308595651538813921780342498141963164905511260143454931265701556562158264090824648351579043435702893453635054819012476149728370681444278505199006903212896548769236882909068546671150995589760754891507625492685131792418299782542728547778448453461101792924207968158552174577602546294984095234678192840960476386210024350185606609410667690932843429705931268359659552164788030824711745176610929643714782697763464025941436376119883442043651405819785395750254618094489169401030013543819259121122854238722988776519602373221724050916405650079014770648187623734031750235491964410642041932852871687936595663020518293155034697291267571007407824355433018154958785858475434507850904892164905683726569122392614760515053956908698779269999187649883835020011034268265026969018909896424000140656288941654229991152436190033893023874485198177367035859326595056483973691102528528964240238162690169769797872053924417306882145869496570622068064152567048641672910089034466482148259576598883675676559305620962774588428084766784414116997805736320364832583212662721001886011390639353175491376666606897406774841966431435260003955902744717191497660803060479889578097868601071357264140408520715503208109783638446056461520984027952828516557607719738796731794525772221096980949945273561032910012006494033523485945355873048645021280439047580017537220142423121774893185173329466211269176408088586862489556539533649460684315877915679859150495016361992776208222457743409154600833608278358758581453060018874654806158469935209424129086588097007658952952942711111315126687583428566179129561920536410044079683799872613222554918639288601507650870472774003701806254718086876319171696486793614727732979757046379755146280328266354020758820986430077712971580486344586381703953969346321181169192104636494630154711153619666625612026906439506854218786812240993780516646058740408377608389717211889712944024277671668754396479044681943854146770948657994287785792979803623008497859770742430848349599307423855758769983547158184688235373094032850678988103388739359527893501071404914173640804862181613420873011412458842231120289553227515291208261892442680444656692441590713999797893022991343828360615540663044391445778085139945599094074239762612456772578548076328639557450793670916499825916076795474644981946658952214795605488453772955033488494865214498815920404443957690438775163101524744668822878389148182995253640866407630244850888822773889814481442580382544887918223306200047057093191744017116590681555324789182407775866665100435926469674592435181453789517497170913007733429647167891477189372321676652882834647772070310297542094397523932163345722780599675988114774549208494809224706159973495073321478676741593210626463245533420320135047805255300115734651077808653087217338440136071977085011680526600480673446362453506269853330351107802011024714941904163599640702033334178009708280027243676240239632839833190086800100058785505242035602151193311212381125806324264054598875454442839222700398014359114677186893678295446859099994129657734990682460457444371064184692311755752541422151199708105198384237430802858411911034947006709981625809080232934922144135663658449085571277501979917843893240809260006508919841301015540362593229032108072689825169873993483717822344427052288062898849905137744969579079629178617645467526962720055032628667023552336797726063643852366606175531613341317196197864392121268769055177347789594578286793751698667802479410433905992805940732000255661814631962700778143239536096104701729340494466620042894434699772502523362436113819044501776630394960920395546918993072887803159200038513497548607143872818383086380817680722559842374631006953530567999908324197175226060014824313203037348268169926095288097144322551789684890648663457922550958843785072651487101659277551662918941361681291844882428584914633290399404985318303936955530378939063462556418941415029264319234049598323408367493224900433835477731924409751183050397065819857193854143426088211957823771085106209820471610682278689620969757921676775517314616530623257688107672947682658597173652390580624930436511108825021373017722979145548745526360319873068471900353622658246145403431408136194441206504994577360905054778745696917584830341379595574153259059234508991895104113725321454131921375733178112506607565288638393093800774772362121100123864093486021508415014831723894064495994297265569568730807876269888569731031755846775128444574553397997813792654431921834421363070757915775647019542518885598183471508749639882165975381022375915486437492344074425523139962629180384112629956456129401567847766137658011123670830980985007918997025977030110831796067951569965572007575902702144061044911452833206811316731088885223390097768175624261207932093558751202518412009102502007023386813814634972054308310984171324107369665562496654937381813957760624019775704510736176400350162938954403024939727373854471651438233295189222680764895418150428010246315726137001519913632525676047478506575714031274113457537113188910649703107854178914089554130455302878654582163342569616634049525997099279447905529226719538257258587393274130154916630672048328356066972804687652587441088521105876230763044801393780365032533142790361470708396485178111545244300098858104533794718403395346580859879503012075351566479135465214976248731740221718399842254842989306171139607700220638169440749741888701799889068347341403175965274567786320642727227656038739437174585149316301185870988806202046350716742616122073255219743263265181032576138673817502982223737574646083182965575011782438275471222775799172556149461261270904660505267167223932500389201907340426107384301197825454396941178367831034191888309584133979272805382546626473199829417047335138373106220916975733273156589158399416510189572510284174693874373753133185652978668579739303451944894907199782629217544087253869509690256364913361662649103302968370399404779514747755870330411967687050772107617321483418530312001893714042946479603145311350066416700023524669310259433718669444400963997152321649187814086836681368125870117467589428150519860600640710086475174958709157959905729767405260915067140443398013208738176994367507976640722447299842158803184305897947861652814216645807199421852517436374675233515223073367877374551529844461509573192306345037036313453322168768871805379018319904446550904855025013177324986195190433459157524173696890570121205948432263283565890164054944492494351263003114712693604264490550542501889653141667181313000917724453608551190885106698104041467588804923153077182674791076853804068398921227580309702149594473809868273473312340587938036654043442190717164560665129378355602095649072482648351965488556846296156897637715040962462010579776075850857781777376501426558909658580563413806753500690392254667257452261154877591099601883907846796078591115005269420617357121701976371785105596442959618559023720438391967628002735526981355323275637931672939282477623932022778544033100210379546063147023481872886415248211452729969152894850131780271188121472084090813830635493161325791646756216819484619434213399002311094007368175499040105370285459703462333608878126345166364275991309512708416171091252888271665752450769886751300197665033144009722236940513663503005517281624212062955587593905225204836125872420287156842497966510035381857017390496082026717117234446921374861682933593570817241106919584808267765255054877674327988929228526399335672320294573301001520843029197879539804218174400897658113932684317529388849754954547596665544635912594206180442533467344212032289410055743489598571841851117728886296883795457231078767117936640524239691929950908446099602437176001623544091050434889834488714558740591334803757508108213516471546244015687292725425961643005362084352528358998024484653362422817109599601827699239352698885776941029330533541192182033534815267864184300550859195484210442525809817478579086995239359572577878359857446016518293777772864837474595440203648840299944295003769029699812826670409448793305461680584150168511183561532408798094923463652836206847759544700761192784929675948448992774264756317901512710819515240377741714381578912318556683115599448809641013883431262041387895097129237574051734778907972947159713776030845364618737701437543788226417693517009464573693269163629836955181552453496432755298484707463786288236903178335220459845956025360838502442970340189970392285865395671330968107511680246013657146012292592726485990026067413336342912103988713654170966139605163811546859346092725013904046570958813090147586439690356080526002237067236208245581181104709820327435557479421048052102582945221727461079444883918690338568109856888473513216220902224916728774326675355246632875935193968645350659198408253015704540743454421175757722114992310792258682019154490386219338234855437019047513801817401966723441526965608853765796515819930902713986177822928103138866085869256177002823453937381750059810088988044992163878606494194942003728500483586733358419306065079413977546321632519557047405447758733069812177634710857655153708861398629124189882384961710471521696214316529809386737702792483019120104057983961636647935371498532955879072997143024922657859098831534282291039354692521854358932834033079077749660374347639359192129174608455854501478303286948350836377823786093757486840385379733704303180151630575572859840539517606670680890940314761502410867637720572494875842467283500906724147538683524285131521824679772373745705655291821841553636624574535994728495285140266712799463114681763773933801244847002709448323561838029381738291966632458552074655518389534127169628384377734519284699241471083404269760700018182204794404287701819691216381554007876115119366692872982493573130991180381561849948696022256167794093781010683628532555609969925503390052027633657135364055586665400097666209196786378997827923885723733291301616727422693871941122400000852137552752735919034668718884001271277947100817035228006279688274415192053253373855168093694549786789710733924396709597311514345638326570413189498231548126537259395975675283269228288437973242922424415919423396209042686615963781323856273642608141820472118230036648391889539721693265027529331515394513993428691615334165115485101112923744798941721691321577793251660840054500252718711487093865529781654778907992517365552078125868472676816797487586252427646134096661776029377149391080559672415449995426515067850638413525415089100674005993952074787337038441672320733134525556389880446580080915750147942037139997249753619127876102451083024162313175339423890521136479018002018284869981683123004832474627600914139214330016395652367362789835704364262039618514932181766121720953319121045210670266874090641919066784531915512931161152675968995662200513952927276870774262354013616729425606192170846845084136763603683726050134796690309333172432767501077016178941879137036576410003615620374169634228827967205498547282836561829082987166479810334518370009378884652334426945447921995955901150236225598284371072480043530582240830473314363170265028896465972017758373959256362854059666662550126674583687965776797215056816760067845756991797032721491730412298066456848713671526919843460994186809763222427245889347264252765604238690439311764137594322453250858384001622021750225328190551116273623414797841749098958001' ) ; +test( macro , '-717897987691852588770249' , '5678' , '52992561458966917842048333229403244806917799627848421877881735070477262881098520765035249624964340882038688516377409835187369665592703958080735736766945912536313709777389461793817187662953548213601180992839097018162700540199444811234129652849225410276267930982552729151588039493817422762367215695837880393501083343614940195379176805915010804690716402053261575165097342342740863670719437568773682027047862479103787981449864557595411550480691451690239227939258640148661525627569354056573032574365819474479753874049318092332197860174730296445988139873008708564407683788184545625049358109338930604072043506368501486476015294370204931967091112231708457059830732539826223797283205277978138098770871113585235612923319080860928191126542635460138797782729492896291235430456696065935768220494159845006073392139110350323314505384289055017134916876163400462621881373937156047111273516233295024171469513762593244072341275620852077848874899582624269495895402815765777547424606219477655639449216632626280672365511304216574465048481409555551898153578798780997838187598030296504499299634026846370222734083675507056188173301287819190008251323703160735842279757966250463716342218905187576189745969039286653568566712245083192424309450098888181155360995569923237384829100088794333552637537227162177479701619093609870600007097257152299648831715938521942096231520452892461541884420652580871321292450318548928985510277252222535133365388202103209163165539197901552072608710284236732915850819518113234646115533291363606803403675185089565146698511010652775061073223214261491866092146057590474879116664838288380912194992229955697790523281474198511681898554287250127257584177956384808694445714111240128709963424475982531545945446204678284012510035965008794769324049843450109531060002528540713991395046933182699881232634176242677648962206607631738502280973898290005462656772264590786129579181328545465308696435762205327818322165386961509403474972525469518547542068305372202808432048462319049469153118249646785678722142597199696100956128198604501655682922926268156814400446792306656470188135722009834179368221149303323894575881803165080171867765138413350984666824885942458943042705023835971675031330773162756179573615771369921528023990741381103617964140627847781113773752668975380722356219881474606884340999916287255829002765995657643610750292167091336372823055491725335254964911991918866523018470993631691434109295300263601212125887194770564215757107756618621927605011672982388667069376436126257785256735035080395442838012293011886480858182971214107329249888540878170831338663664497081571648293369670697492303978168090750719696674347255594774732019346186950722015778265861706529434650218922964570378758677250144083322218433388621419998372158607084870550629095764769864396578302522198678754554607834625544465903300910375218946617943281021263817868702534903565965515996857490410905151194367951674404671401634726316031502775424938708095480058006939655833612970659151929020021108105677362480187576212239598103259569657352323481949129023622185672875961306339733885857708982104417776147428446169851035372923120375171782152648094932708525562623063044339202972582525453779487351603066880013958145443211731768489287736596200008852460116803737486674746320357688425959700168747470090109849460232048475582033235140686903423628462653109627172118888613705624945389644912331260448674882803772456442287538433120812454253132443354729068891796527676701606716457913622114298779919239138678095658602599035272101050540631199171079787674726148712746094500511958909309383648848324958153313684693020237870128517588375127269029825997693115614438073154312047924340357482412336581044347428383345931096734448615207346214924813291025243318597445591410601657643923497289883965796840775243249869681469920755474682727417587202159996646531840273727959008935890037688256043389201553466973472089962210203795891910446649680901883560841094031991763415446185012636385884139521383390919645656949585657311438685339885917614078799309904047978363483036838818577158746493373606130783588041171423001575976326332942068212106971788178296357879590268289870554895714998398477383074091612380803534549439364991095989289183083877933651758973534265032552397343750530201088858666516716202042806877592785968359618297523122663345711107589355569471982996246008945010788125903082708965247233856493295495884971617005159683177020951059046089360849718770603433176136962787644988761679786793574894146198596283619577589492917433648008790154607904592377489003959969338300144125428308936896784361334723137983098924994947562038207668868190447389976840741447171621269619747614678405424544476952607756858007392925674149003932269670585532289548230838340609191813200074864347826444440499651323577336653937195827618989214774650052553204749548153719625554328240930029474674929792915810450109353297164695948404332144143911830336116561122587580838323433271508758381427202886466864203006769876629040113309536126898286439306875888068434906684986109839807912211044229574073513385256008653277622489509139402265793326372569157760069106457217990235011506430988742050031863394618171218562494463476850191629255740324446363242993320648668718706796758945218459365076583628726166585648610786131608405727805072734696605117814467304269584486848714577856278821187639674139091420868276683680482402061170964129020179849417226407523345979683703744990934601753619379872634811616761518185857620947821097797023780246814812679446740501132957939033231020697754175111520932341860938863741889626558269454453009814222388294592392173794599397585978687451892813356296473121549635013676249164244665043044957101593039072361182135678926932958876432422873012810178205318591023576753916592920079031115341838800740563121977641772239560122596720253059357199257880604788460448454541912874334474110048318114397597184518307140986163690693584548192536813827180198436161154497288570678489493883807773676094581689577716104059811574599177659911227887188217401978474514757553745261264218832355099235158560242297233406180137292308698109610071281861640728221129462482399191931254988997403297870669677165754913546299432301037504530872073067858354779137558761312187986108590108671713663509463849235645441069025317032282653619885664511756487047824929057588473863132476505639554060087119089853326292527491890156165208813193528270287317866931952302862861082174087615226626147432099575255480389022327072418068332438673738233637882790315683455450464590709105784350178739780127964769969011026088597219619472341103459382289201174496483005244865985320414773065969458214373055466663167449827644842719260068316989039810368349530823214414315840300587086860582920441160086337872788129994593466901398749881456816893076117420457023093235142704769500472838381750950452685686468352355934718793080770041896266326591193598230038726258131382339638465090689033062834104050137121528398579502285618016610064410178458485780348478662846002089852720537701136965653853259363332024728436379986256649234691293765971251875100216741285408346246009343410757983483597963489740851123818712786795291798837714819930591978286010640687992692756495314962784887224591285887831740631885066445063662149099404455330521550962587381135521874864351037529468684827186997370955447481995887639571571525702373403403761671748587109161571183805369675426792116895119621582920253789699657615500011890976403807282199844302806272514657032217062946033211042074109494896045803992953473587506222506781346147810525891832442558813747914920938494195556975736956239077078403047716108873401240720217398379985768790248880164667538691286461771920136462983631359473029704858507306794650707316446091278308009089124701630706210560168792994743974642056525288870381921514176601924996181921908722977903765494032218635205563065562888264623205077967964252752702442201464476030020851153648989654374063092609825139716406169830702732441666788603492696815334157061439959989046789065423318960712201089688946540796678378497252260148940700296093007934347669870770800342086190913566676064617891161093655936605836899446861184700094847166382869925437304928565010472625277681782787551544062045311275114543518096882812611825710549053207666530027825046311534181156975603474991929909024388711945463808425263464957653237271591373069179547100808683091655216330416092310214397175383390044315163696300849781070219134615015219064302516596226701912265613020932966925428815092790344445459519486710818501491744578229686083894654498423852571127489975219254353172438337650602238280223597768220243105815348527252142824365262184240072688609964102457657199429178311502128276669149947703560777240739423309436247534508874804401314162274740915591635435183346939875420896409168143366133287003880010386186641170364265028042141513465453408101841921842528837600797310807883817569665409313593668849776576983790985321325237847569765650823790815463692017963395752927945155773792906513914253930342695948572439951274479143533256050317996678589637630517043566370062714774155238038673228364852986154012293796986173903941816772421914136811088242656279247112124439226958945034478877984596864873339798554814421219750181744221681578059062457004925780474249073437168128231790400216332672320703915847426463055894401088311795843457416623717000078714687159781995749578194250354449880164141903126715398601118555657753088212238422071158309996360998060316430904776007237664213238747361809842176066931627956726802459178808505394046664002938285314488362839317461527679372532822934704704470253690263875879702240062788026418261529389183596155698524599722228817999108140672748144745689714554812265041175714545225389990781353970530998752805250297945973556929670870774946985404265424068777800150897438843100570165412465536409965604362377295700424297999045416603027704210682281919437502308628718607989662408388051610908664802514940396058178295301888644151245892936386802507105326053427738255325180381762764389027620113283759653480743839809992357496074117200755535328327778239627950809058337055235742086687019858930046083297050726069315089882694837254737886800564117843966144822575643639731768343937069600705061564770014386059309401600994691145418984296800446891914436526504588487235668560512126375658106759961423238985938919327850368124270203404746108520903433047821070462173699752058768991623911437121303926263567247275258743101051399711951304774969904872170431870967998534905416515742768485058006433022048620528364549739197129869684349063800961670793383545725472346808561542828191153302612521938569967207547584404136442698715207952729855421979521420559878331433668100753209636435675712543276009510142074799136997641192447567079334735530723873493925022491212344710076896739154338361999719913499831623432329457641993249784570344228676317925346610689759322653659928903365020471696174639950909615303515965200146660518282411647170608800939660621685552950249611706475325198479518423077155301209371280575534360462938867984963297040183736104969929190183531952577283379234782953108926401989267488044466794228043770347285979888837421775091151607628072534183685174245345816369526145717126891495096063726823540297588186575358585981265343937095373338996442251138594460569709569806492449609367188654079820152455364920624125030761646597005088999711445807387895998396475835641806955712083403146532371590752368935420985233735695950492134965346564198873831201899225738635547303457400703163201429850285547082772143821844313238723456259228759115534200528631507109400219431734564426566942208047195491924187286616903223592310617985108600082628611087567285767001840566153820546701939593194433998024938689773662808625697973543664837705457336677737765607746286815865891347597385126417092248398027369133671804532615511954414419259304523253807140857494548560843072982788068686101289767274829556337961469578050554176149354133487258534215364379154660461310427570189912699705529950514413147328168458631103249872388038937376864265012237965847164952284836681545396080247290559401291604967701175723121502236181093388323626875423056619719092568232717945805103108385877791944344245670750247392343384296108323807858305055418400741553693700502565024106126585636797090774279356316370509236531508263353733878156923208632989404619022265962263865918260332262005803614050713268964027332085964017902372988449905870060050221522451244273428597501098201640739856281753377806262510621286335117441922221183997764738785835690806964058090618523209727153455617620262903964419882379089412045613968114570967614290250244897455062121766814873521607883867929237291112681395681208806316115052463955424369530957702703335301336133507196464013784297392355963686577412082487656646900727164897539211910515592015131790757084187802478999731058868779493827694303480414208944059771372285831516411891131036856120211199256880755033121745020506905940385581282403448035169726911436826243069847201133079363947969342361067328363441956715292529385906162072082866885762473853872136917177105248829462003088491198093528321254844293731158494353309329359943621539173472646030822664165537362617032785562181639419716789150739604369299294852110605262082459555983084488041202822751327819978152651961662242916641572040409255879415966668785223872853617095739101441693844227787889967257101619837706529517298805962370005920305999407921230127760675120172113782634335023130691310728800481538764425860624015422603351785485421993634219805565282967254634644843789616543323341653341146495092459321686531162492849751882105121323719768549112911144880654693888232614646653956763580397332567522797083319499426431434148243989859609258432804222067142397999063441042035277929314828603521084355742771233471852499158339778603981017500121847933601889420815095445410655577708991650898864592139988828909325847690688265292963327637387564935819554712076627813142907683346250203958929989323689935059457421263112380235019472983111424135581186825910973214910699149667710959563181536691099143613233601161732666745012245211307688622118221683809456064734882630698593204467656990257941572412614139802715394281994293120883156362501711873082011731962032490574884682131178885924065895059613017568119400856466320056952350332528728576467215637026738604714597593759418177681274482897193349099377791845071840865476390482509958300517175834887188010180465835340333367167368967646066303894894949259012937252758312734808329709232360933894530979086189948266744307651572635781288044544893571461370440118431167905294073527312254045244808871450613885567599305888413740007585647252065620950569327491405356998305146429471623136661921767554001049077582559141269075807726942292324962879195004849835063558899374919319497877100701211206496709025329275359077524423372451805882088092879051313263439053059246113586757853983808973560033255079821096458791208111949975520419973969738539460358523519982416915144979569986992658895580772468544281855421641228395656106360926287526507440986113241371749929933626943002948875469110027470912266294656790428857661799285796092963253692751518091473958954584426686863281912392953724819538676197544419608647219428371546066604565530829571887668487791705473466987941636508397417037367030291035726974209122929822977256282776129310660064280234827050717329256768834139633843952427070535536323343517859928713869623513480175609016408364304241592622958594443056559986989106563619631715224662514109451710877519669377700137922914878226108875076080968720985553774478319079858681651339801277697214672775772710298769965771899451131005224958432124257866462047576738776398467445567954900257927297206412032651048753538257470550748950042956467383856098326990699095531754983730997777376855850204059808381527746257418211558497066091371508074576455448794073221457106194028764995140574406949894779285509688637508122002763143590113564857465357157613251821223444359965532981305922833468097064802147367022534931051008695237039566704201353988540866088741667038552935423161581934287462404348346959712557410094417500120546248110357270320222372208679677188804508939856387875484398668973720610306440393165985553874361652311139176073072642232364301455756578533325673397255829115802632064375030488532724282480941523096056375612516691335273199076868478063949077979981834693199226789642526467313758886727034664155374708233413052241176017997770755357925454917422006910044558649830410441042783912087181440912216816911418077643846400706686847762348581058766312240711484387486718123588654129529313123730637305855816034535443508751239517641963906747738873083589048844951039924094554710311263734798500241327075231542378920749258310205825922008644493121370590192760015148501273427214461014155067372554805948839297269789248975606338557054691632614937241901458805041012227038978979812168094150773239740200926858206670986309560725257896194349092782159293694188307081347049188661030610107456715733073715420873434056971119630761658470234370438116245797515154771525887334083368102698399109278569996061959700658346646955565093203139925211068688479012109279872461395639869548120204532938913593022473786111209373901721432107297071448742770742412159279076830118439645403061943303917551223288001014702113659615663577592748103708841776873178445568235386839518530066675979433748005530615064885650866749177914061788524262808081456736332733040493983863214714692393115801670972860894965741349096171975727706157112301169070137414347667759125039407153467452265210719726714985635420293189470049637210766042254751512445609291095350283495503549502917353512206358756772848829158151755615008365723008445582823523075844725615067686956618810366284960890688672135540705475984841760373827462101875128799270857413282580082072800739904057148821354442778410810970050701431502851594089320392059591004827037030949407048303186582849254894900004175510461919883551638536839489510245449220044773071872011316439740663014720019722095387628672305811492191697738078092246616407460689410223935009608878423391167281114435298028095665936771603627090834937282850979762786426899134362341889415374040340896380252725754909908018401107333556100522040895675585460969780799009744922983914153517048037312468584877909733205649413029335540211297879068656419387807383048842494215387689331649844934805491180381285929557990551329032335758734597115389529509449814729908343459195813101027114347572133759851590325554983005153111501432758813072569701126690781490951740575825405497526335840722010023321789428374242548378889836216282253171286247053640123351326348638420215428018887341486150219038345363430704186782773219435948195386840643853198799818242098668338179745226151996534978279230096399308636037991368814207217507069935928147009785676785160027497317009001777550195024132691150567507011354412329032340603521157466518995650811670602491853174280204852628446269615787322879786482369408633164257134657023953228812362587592950746528121453810577970418765900895068401958324820738606431245080063027400254319882177028368653741793457795068935169938691425211024828792631933230877447721276360612404169065676636411366175986321744222814400246758586497722397143948714428396712767471630538898122410697568130170950184011778819880862316215372642601335542980464853249009026580690749759635033913834129498173805649521698922073038683841857811453879318495594875910979538327284780569733959417673964124812143583018523970514641401891081019284489763221082086325354879697385907787761049442665031058490028534622149846137905767487116029644971254430227080575349336243717394801443483839458265798732710051462772605466482812641037899172879970734427748668316293777647496909333662168116654868712457269032630974156741200422999141171874097340818602076458352626593605494845936264195396202806647904404677157734745652872270210704027405978135714048673747336292778720101960923698684395527092073172044177213818544969591585627238532808299570223371536372799012875224234778370905326852914976423861886454350497565400489482872955448045615907842220173649212448684979945647349079756570932865476086046458864652043811750235877344393220429343034415180297212581588145608747445493372426999318493938150343775786331056194752510426503166230913186538526760445807413799806204051029905931303093836872257279463684631738363832006044614840509662858475110814261755496445327276173263161251358809092006580985277059802629992110919876640778599238851224190806234298093499859897877945279235571464696627205637879325947667945367188005248720580469836926696939939415121732586533901411675573681854304269524168392617282088535658385037701299391440541334384518081022468387518749703363096233963804922423094068395126707285054702218861778016173542392815212283678372323848563282862826760297013819812339131493327915541965803998097384090951244169643369018641096219195430772492922432677413755019687006516340030964660067215342977430274756427296622985672207880091256161463966745535322513359262081324439248033434926360421216544044746832762555450035219016309931057323669695525075977196214861598745789848117118689974917406963326147153664733948922010644259043986576126492884735748201429479293157327397169116086340829373474447532461009810536262731597451754627874681161347317493618449699664690398390949643587566379695090443777568885944452505841199312483422475407319328641366974092114345516068535284073079980141067468263817385977308228962318323609469322490263507101669512786080642752319574742157425134152748843756299008728152305538809501024125010339213159780735824709099108882350824446352596024291069384003047531175618027373859127640704478972526885889432610483189753615050833681837753536005311543749368107499347315534545941713644730273702333948596900145557971505509367959108594407502948243020888234056853650963187076323765146652614211207546354464881645918117204811380635728429776867963381852884230518246631190131825530206787122927542913920281579736988824992521073962274953252144927376468933425658712672597384028057932228407070530265731165980966598601076506604289064934821557949717410539761505040873308406110474412692271216992858783788017692940669126619626790274625702146919817133167454141020585503777417647004018422961010432475942591656281157554753543866527442721860074055221343919493702427083052905183704806054896861313080853192781874338774353472175893928663360488609634784890485560515252214309637081204987618424027884591397424067625820413547165571090593288097729180898304860943714385424978418160835850877717027658521907629768814727424695191227358428401962885565649381238098204936255938797308193040643227676416950981533713051600283871175312807406414172316740879617172963584690587789848239482341701897688268557616992035582225306531638164023604262595670103263609695362798739463036593927714273709560324792380672245014432684528132529510597382659551239028729153767533108869546101650464606517031212471681999067256252173869702628620955732415793090541749027540473718940312552425322149119344958406002437705982398992267252296771928467559404038212669370252790729353944780711661881552113249584403769083480856475063987837244029373948596829428019040641426569984762280646821052726889241697080032561970596779105934595957656757479131467410030344286211442477923310898646446342650046369081113562118381113974544065289731235914381813526415129034466320886690781519982064571162447720218016309577515552126698701486349767343461948090842618080712299219097673966015228424172663889427342731020122066675346414052340618598182609249461329861211149036514914521730088889300616712047373574894553971526437268977130623792336839865094059220733603108966045443149552683777916379609517221061627320405151444134819286421255392382822364134687682168786843209394288411699746863444889434411414485519234492407599434325668997799101520066221602884158226756336984242409440361323534712903377984364440121709955882861088033253565408769726596294534478786779815095706073686709431442168829090896416212535563746063403950198043478906364003836786350526095004964058916984298874819382063723661497266846181942426357905013650755458667314604787157987764491101741899567408074361392569794087507924311908229702294763769391197478812554522186741135262551897352184690374471893073000220162512552332060179402611785987981834888043869118074160633762440696320006275857520907876405364367283599977809702429809327633774811777287837997929063319088643981288504577794563897734368357724456507233435413578168544122187905557510349163877892031860938380863700212457499941173051991635044055263541028899765559085615828388330183855986870987907204189354310066588413218192874980402116441641033329112521433352585269389744561428992772734752313702102338324264613628379476243754122969786509425444725576325781027140066964089023790292891876331352393285001370386695304261889280274262043056322796927733119572711356326685350484589411334123538058781520196877872573359539914258371620972518600167848136853804940166949001046871343046124149316149555200621260500187812862150026333455832936133319251080100944562462138196424435420637124060278270301200807655723626316279314677989720701526760643271100348145148124820564605091911779855169535418882307665289900355017573800822546237397396616805582194694056466899912723329771183008166619132092740342879643527581402206500436271851742975104495236263710329645094452343102310844177958838929699065716898974352408381283451421410089914102753296005962431058406067303947323833242313152680641247938380343115958860199956778403253209323348645070739497071952928327376353617380302386451510499726403590049039220125741769453186556766459550919922603305625386150812873799214104365798370292908598658060494523919882837028108696230018764525326479800889430827403509641329404504108584175416299778457550149516420306914056180810908889377149438217925739822836731498632998974190671944437651733816831832102819701452336948218481443109835371939006988086201718924066189320116586181314358289815550824203560990687366887222969587068618783822844334383574224286655847585666103020816988760101669647856537819653647348642372860462072094399934119806713804526340303858796726062832597308487962786568628209393365116177313500258916696602298504935899488231886983956122931761650910471751605728341369214793135444893690581825560582275170663803345907902656817500959962305071703161844221586272436733043463590790972533783408461905472360665984339275927320721268991984362793905235237928358401214308908599626975869024433459897721710178957512745942114341723971665941816834394308329806825884356070709685761638881841811423881417063972638317949761209293108884169157244310554120522091867059525129565074635172821024753666469843554970503238670636464476697226613787178875812109508162171406085559173637604564435642338746751084270357452547638347056148137732031656248286326291618903398185758507933313960978162364875292581607458217158798787916676003226916398811579605403809873107421485543087852003080885632791018542669430381491298441535109732809291308440227122322919323520142248717203062944396531767516101348669545805257723994808980312479264837725492136882355862941108451810186385271944727323937476421051113190387402775727960536639091788137833258176311969569961943551611853786770670960071652604792541940305956411115347733415222667549394453865233071674925052111317188727005402659672862870124353044134138940763586559553241714723475928344653659170671048092842027797901483049343811224941954463977298856433740106969036666079845988063391903825032855950193013788243789490182350376071702678007109765795706678377357340602031572982332824123773826221420577356000773691991307382149359100536109508425616929397580550980381697733400694828091467008203408893560621735626409474184799062207420684997475127497499271462600004670205579497645152495972389782480775949584706612600406180867943792941868858006175201936307008047616757589672523735789473093905193759863364945186628110590148829061593580057092925835363208545182849585868221368570360897560213869098865474255930740671657540215219483723251702391679084671148858456387364281103663462079699683913175189821329916045361853985054542513239589981629807348515391518514157410480876717317086568995965776721883816029400496479881361209069153709752129572198334892249502748191465310837081561861610032985534309285339681126580547626611304860810381677502832262489332934346926301205586228829998320869739620904253982155600321208706995102261899336727019317570934776614228279624359270351092121785581627705454815208145814747270980169200427592287264446298455337451867154675225312599671885696403119745068812877999940157697775260282173718338630223097905166067171605705202669147542203111329964484204150252769374041699642264247344682780556183768647043088086067328086717187740722470761010716276890826844033820289730485347275758989422619495961781370981845507287224106646612891699787304991489991450237892608587094959507431025121524157532996055387813931382902218941327406937104535120623519125622928074921413343511233341463048114587623180196119633871033128642353961758736942162376474650866446500486254254052378915783117942846877531394483736296707763850427149576406806692201719207270711640436539293214966734241103817572475879693972994529271225318511005262619518630808170022848370992692989178376091827819432746605823278836088860098280229785555789098175025591438486997677754831517943543494195444780421155712600231315338591816992539029327290383750279259408507030866894281949592643856951856970260492648859191372445722757560829643128598473999963495915365217562729260899176033339914368657427490270587754614627221314473523385599772728811860813438436363568535104917622395452899623639754284218650275206353695145264760567105459178562491882032831507849731082780751290549815090526014153248389638366562779197588704003763886554458980922773564631738946671358670002437792609926532640853858166371833689910006342371227521888985462256616595134913448753896321572610914451983732905554764025205460856114907835462908762361867725808829101494129427887010484807824575634192790958596192835856035642229775443466803753619433447559913956011510527564464490362903893004175699539657818550413774129471722988670400259357614877806334270973688298172787849219764510531270431348031231230366988119457069574129982095326123736732280724513806554712464556176030636815599985296475879329526942793809334154537286409720616279737748877805830625972559290659320870467177007699656878854930950374408662534796671508779289654115928497876570228294960433889385643701335793908755514074473749964759488535101951927148371376246782141759279753146527867175256859600371220723263087493647651934107824747038684956089218459994098442077055339542213286639575013424597339692639209982667429839922996745194919443742101455841754629560994904267305390310619195510596711795233359996984129886409644969307626193230100243445176341224116774838302230433293550887983785529668376917774923810049977020766265752226119147869678480128953266773825987624533026602499804124858105127910152228288680919984865137490347059505127939634012785058380116016158201512139929087364709693014634031763687342662706605079791983804043837557045973734575431521833043317763655587404678815578341748648519218701877257148921016285162472607623283323249556573753034374795565710904057626708068152251494257423269988884212986826103841847235290434753139713588793284927733100788323782464581521308771041340355123219181562733669769963813626654980259896667571531426558561083021853772568029181635433012078770849834446674149991209906653073314199262005928322117392615818629566430413616987317922057832297584265671398209566291140412705971275976266486649851786135002249020062965980087138574535447132363958635609925366757622786251073626356537120620726163351028366500669047752276806994698670175421508941444055686927449826465211114309355867990655881671257209904683585254426503206543491199687267119577128778582396178926678946290201534745035364519018795390246746811766723584255073984715970376061829082762752016704470773798620997166862372135899943680412430608608549449361762094538339329299440793971638832722944360033468293012144165093312313114839006029476318874961592758500904627465226488109581697907382066846687530136534632837946481815741937620620154295350284380932563345904144633726510177800611951790431250878298814044606538474701064227373555412349001233072133083235347487459787376279403703807888154514448002202951245397248869293062600560134295500105008538576207064629412523316530627112626565186270777090318018659291403078286535004079092813364057772695524445708298445548622123608796436695854008220295952906804796979613002284502190226292523908476214322919392774132723010892233879221455324852691358984021386299602980995708394090452538155116048679915227979809152112372669411580872195011069091512211098837265014358497390191374862378298332979828589280675262431318918898318225215446376722107524363251975033827569456312898080064881381141772242054225493451609900958323016634712370823083984626439009976816172490877077263224311036942854664827302424290250141379316709351675690520061130683735321311996496187247021962293994184343787870574057794627801215642399757391689423643087425702078241032082171429850853657783936393491748921202257137973536585938902448803265913705675751505623829853836767351048275120136814974429359820277661179090491547020218952518317240856799497902090061811729297871492235273099451994560780849999017077268810932708025581118347013333023449244901948116998051103180964193421409328454794534892399934923614215588057091032039363419930676743779898364001040849687155406279816603303339546771517073573996877517822995705129876831722490952428194724842099930819145094619254525540759400392691443317175946185255495513754986746278892496030387565394365588879946177842768690923727638413659745835806393996818031833024802300235446835796085570745553032228525815450531967652475109305456596317989530038989405999117072923810555284059845086948523349452739911967441605727895585516463617479813514316281381343200540684480647554584918667587044879862223471871709991329936110666394849738825285286263958437079344497666129723469849274424451217808101012327262154782486868475696579972204483320055712556519479118501769492253109282648803982799956007070413969057766641895108542980107519788443327966941933926975271423626274088356029953637857404994029785121788713172223066847502903458085949291823486875993171596694026412513484348659991282842807440540512919421580435830982886747148859097314781713081716943137837514388166635564093209988083853631966764152001236937201021272205337526464980001923248970935051413391014325982735295720169702781387326630373314301750994939700432204266441734849243617137063200743900861763556953331088533375662647974513214949950360582587461449318953013746171392411021921268719401083870455409243782703438717812520258803044022398736843362885510789738025682748439023460396397947226212022325837892155810227799539254487217780142395057860256227526753652355653439544898392544874518721260751136602267606533517775781758994893256983747903520154900084664232199826595227499066488170533660614570516974168882282194703476740231831764399346962406995812197194307712384356275327126581811963829857081764545583491933201665655011341750864389214260118093942175688349922926371415338795911538883608650663492494285079393689588623801351274317524162255546872032205137602055977698588526953067919577657802157230724010580762546282119676770146073279290190567417587379003247680752947289021207629278566655115192835788767007491592173561216460960732338187214850961468821550647703718319006714895171928841330718580062654702438419600965779600185378625085906358134551760230035403561105143710833508540322391028617424456041890440768192600260326521458091222064446938238524580192166531189004653013760970323476986163112729146041847368155310536930201842388100514907989986285028152232579121250243087183900990150304104081116859121286448239243348357354426439332087091013606470363706785376906184268755539296047766065167508797445567080041967876599818349026917276210630616917313061541554664359090008971749776374922888008224470479856127371383520079697079481864438879042548335953589849253380664920899400066389165030020576281747877494368823642902286149859757979430259416772186621524014692936483589683321666232231917198657382422968512537393374246432506459315712945887280161525313402564412785562279688402776014658097920177207595566191984505720566032171980817248093432499471573407422741267535537792190907867772310470192246974486242409294991646564339659296311172821487691415387361518368358002232126427175348186260983285915013630462489800994709039714768490653776139921591148425560513222581914691269099627882433950238366744049435126864696551517102338574990439051014288641107331775276925590557112123848552944123712559927798767656060604001870745831020943534367217710806627918743824819528778901432361132400874522503036881964803363227725213671319249255588338379558944373081448848288914340029381563870874199421074704225053940653263054076372331153673021564933861085136777463657122583608153245145603654759564012552343708794221112376282396672216677067893583529685387362866085958575144207549201885063634649664356022770450599025073193635589697904649689742659731140870664049705909529992131119908451169523625982480852065130458048303330783267873632661502527296193654564481985949017941867590637521370248661759842942985486580506523527905415291993129997589693562083571993824525692390012764335534053818968643292421277387911598443675823895632044862101929611888494601135784807263444029447043613253239718910969875605613576775133853633741165480175557199106843404370509722920321859723309901527892004815816154454240322704330590162893392597841258761159890728628197646144967822207646701728736399384331473403587477868423279416635027533248541770967263778198842567490190381802603584303232553124123738656775047738687142923133780711030685516297965124193566037052352262354539607323266508361484876586175823446779222126520889533051136757982925713629289751952089225590370193731715841445105382621870755409206256938181565226769507387707852521144122034388075830457994525416533663962455970297774911851804521911035459353309532169948020448427333167113803415885128164774439258952605402088109777145211067039266101515402978544740570697381766558881546774239387495303310021282368800400514079555621371851412626774730245176141487171901398964327496365698995566554278753549639947813610318041843322486236707793661756645237618569985152051174050866426218945874684052954853332216442206370490833124972712199887443585954028942543566576436008194402325554516608853398435525073932650524074286205850550540531543625550602818516054893310255606074691613285654709269754001340023163558376144694499945698271995324998769772391227717778525548481765287382012664202138451078614644891981447633443984616961062704113987629899385435093671888725031427992000013446048294556079409188916356329263861385119483041778470111323934672117382552154014552689712635622044067335585091419078549572685722517799853945139066113116557823200991839478980485148139756437276310315585052962711094520823502876017799162004452308825294752903780143322159163359216776682795639765675024359141047188281889450388835463485151185055730257857244956639772765885901407478608833348764219975332660938410968229409406088016572970425472041832771272378171279797797035736576275270098485254500981153781872753941048954786738308270916748413503252625251966120660459010356765817802826429045068657112315950170987790686087303575594630278186797170965451147353365942405760693758157024450678772714436915222715682621542648328393696771847903632197735143219253117775874065572827559278669061592703292357856712182245702829796197056320474383079124060345835424419150979181507698302000007069045583234865337926621992623375749971204642446990777626632490383499047710478578862245179305716165431024544308084192556089479503354600043311566543487429471050399741986074927517309966574629189828300270254631391989455006206141157242311958987861149970781306061082396476609746044799676946433313570016028171027821734752039087742788832856846639871795304172840764319177762201671679871703331176399614205812745806594113056822213610394374595550171039503669220580872124167464169590577829197969856928840564473147431728291951743418213909020891248139717532829309139307324676418134145138999363155157666822088563424974605011214474234561958644068385566981590500191642959522021800166068563481044756233678800379514457696678176805627254751999892080533501886765304008355851853948156310423934798610892860385518158372125742586604990037334390212148772332920836540413171820995316460503362722328438872099507648776358269375088834055987113695732969353422819649914493670628253189886707685826733188098490064699162769196462197178091601033240633742092060902726567598519786428036312494443148817711021658763571536644924743944370048324568741512735789195923635121797799038653592749525637165000255493407622344594232313502271601912269778165783446812278845417457586538145675618091493526724848167114864548061108275777820993568273138069570417876796279053044809083376787522011494624546074909061660691640637286419682093499212330107661282280374851441004473097968359669954161836104289719705649964194654369452812111646977860340985060266188051868138264924697766217093257796481229661635130361603763575209317631745373236794727193007345895568742625048392643535752017720886976385547006530147162370985119567662827452345951611661122285345274467812187128152772828198044470287829483436630828621443834283933061869973426636841662503174938088958731532564136006533111241497517080811026547277241069801619368046197038254330917315025484354794049944205979487352155731523443985515670321446995279071915493012622438463701624086676046991036641665468428667863243481438144104997475129384407937791753089800722213988580814506420181828434464111345849729424096408245260118164415180606108341818909452188841412079787980645835501934806620697807291698253154706727593807361760609508840206608172948784237440941360116633737918646533724288158512019153861656684310632599855068395383404299612799388078946939439804726113661786432879308541638420957312446608450673637732399682300434221464859925923221506390466698969039225502809581860888180763430173987356554433665298962587119505406649522644887130093859157162141940270620429317071422670076888270015287432039353142292463201458311748039953024013036300157681289307831534247803967378524151269240623018079511894898426335179627535676928729840275620799295814291986056942345428344453545269535794124327345707388409443474582974771283667398460633838739913858003572434702047552352950879994724952355013458855725485470732726133558254542140241633844025957105365419313572521406256164016462372080325523482769734126885228449084718164714605387688663314237773503394896942177771487500288657934065953470677148012467516329412866843212947650541393396631386347555804426102036080289255754843634434329602817459750576423199736486570021428392611373877893467131270574799604435726228651959220155729187266319233386485777943988660811844393451428256717646755716254300083904773522205309371240685190676214538753207966844645134821197918259003182495235479846985293701759492154378658914612708682142567444147095497018617281359110902117920725531122469148975703268958203323016883831569236133529003603833362202853118400173131984771412931859271574480640448580883928197270433178482028973090531595725903261739123015610187695736065475604480716148290769317072346477291109395091443012208320879788331725598789382708448112357055474285327626461197894056314208119696290296871946392825764203702558293596084592330063422640815063526516709219894586212199245909945107086110527318146202939164664570138496089256131319667582023030903220338472809679989900075966190134720802260549733743988009810716784814967132808315697037229066016638783617803049541403814297797063504097571959601223859618220236460435365468876273616964977582199141192717139286886479366882946601855885523540939542911001721165181303035250295757804176416487538695267810352135675174637329741832437202038317518501153696331084859275436546896784758870744418504221637131581695470043451607111498383586197039434557677809493753161844551986777183528706928317708570047213682844575429346154967850073774018951110599706445779164048664056208523721691779348621942136050587382152008824636852587867072370504325971481960878918898595254980293982721591693440821999279481942233518649498707717083882102011010920568111932250810913249902342481472764561569756057047564387676395955386968088987048250789547613391325196480282398866643140635374540815498886375692701566620478926327386180090314769809070586546850483645016414930149011180928072625396135675547919261758488905962683028189154974348858839670607559911538799594215181566419664461648293512903197378392772465968575275924040207070331647259700136865792916743805636460060225022009555911506758744722703329764833376608884035244776681807079272059851958248969103955274321981361055653095030882610383596652083951976626946931369787729556364440715932097751242497500001584071338920490837692185167860605115070019549822090122604643634410262326319800746320962802835287034390354111115865790874939042813949509988832911268012219132145696181195882383952958868481795589403551825711445660055304159790661413008365913113607195310961659663716376009165695349750905934408643499052196577976419823962941950712959992212234788580725813670158180525202141811656107580848620353789727923453309609949287741837902512599149154339176262431563817727378679677652789586189907215092360394745291315315178280769752824178866136127120364844360843686570666924377391665188451950415163418019008550860833335991205615992745172384110734413150392823334652249716284396986055940980014856009188306532585605420519999060408247632994088479770891700298117903439944095625163759805013608980060771557434355471774895250923968185127614872473437277089861855286234820208542123288985527978805250685814884921559427896393702833660533784695823628880970072319349073259978716833968468179590572694799891627034479004070759376277217793391752209577997711609243576249426419043330333248714674522314937604818018967788378992728856961524893134453753720792091904689980700491208047979392621587263636601034393317517058140153695430456108047489091988799433658727319727603208464797159018320689274278962431580710268611873345082042650017311093587316737506047072564104601699540422208265285367519250051097876841814985282642872180071842394128862870024131550427158424470800953331106953095712690997421000768047945089087663231635404628237322206056194051230418812268915485268026095537420507465353167347945777910402999486556725081524841236691353551068809229611287678981310879402131425967814033549233559647486789458759659524816156257785428046357885788728798334726449873717622126595441912361442030013584241365584775303418366701542287195829230746483209292971621640713714120962019145289378780969314257595128370406067557489678645404458053687082712789287239312499629853769537574070273969474157449684007131644293612697622540605642045541405898737405461999281923424705046372116343888909788638977762339671372562117660223660695670784812600612056762192717861277640703396725012445752647660972755926419081291679166524667260979795012933256505922882790031660146080407763031478392867425713264775858816101821915969759500481246145397674060323709892952582602767900235601067846724543572473980966420366855192885879180614548283832841466665075996354149725301338358519169323717267254062579184541615446217563552842801325876467818631048968727579042055430766829056006240108948018339677305715364169866474021158726443045415282083577876330771922441471903310208177751083536690365995902758865071635759854772834694926455251271950341529608500788151798625090215572084029028380951507817448298079939298183520695590038747651635996543349440728664825713158380373219558529466057128032322906043454271320772921500287417319365976168419625624605115776262120980985923226829065963505843252914585540909170419599634277050723038933433924966297553342377580579351310874515911272119419209407790850494402102776888845698141493104421164929231199034729805606023201679897060290278578720809957791951623105561111133441647850732477421840889254450727982538571816636875200828789909673369478549612505123453026030215697838939324904100215648041600048460039211128583146953718878628701163065895128903772760366897751078368367149449860760323482919313636639333077112532263506484449628903562140910917184883359776685061477491947729628529940226933346422619715834114167408979784271108750432262839890447106483996662801874672678069833459187503127812301867619501888954744651596042888493821496812330875953213277829557379428092928030401078060596211030759341486094758152719531736557706698181800703577011933959623488542790769609795754171725493159747905511760096118476672312212214368328427513637719899441014615290328882809796585736312071114005119700172543463579423776006423420286785176042602478265390069956838609562249314263338461011350408175605961013927967017552360420813070363697740897703263694257754856012654337464403965817533944829983303847137943128996206061949794495555772350381966455640399658960314931510072397034602157188468414498235332005390066923861865352437171408532901795023023963305004538478595986842966576827375616876814560462321033161451137536544148847560393613737181536328819284288283654494839769934062928897803037442335381073377792138665249528844845017487627988924712134129833878665284628767176241405461020337739105966169340002371434437030992017569093264600981712234552096820682678182956004241998659956895146005707847390853503811705773368682511571235504699508351848211408274201762880277944793124322084314104623005572039931534794296111644783972369615224022661119722029047041665683970708585749056976393919847203913389066146411665473936057926195115695695372679013803092665461271109469924054694941918792327473598367085225448873229547450901639248463592556312744455603370397515050475356724383915330376573631292372402745732770801947701519132781347983632063172159675682339097266427478373480515275484903594400622175573994679551026905871042323165045382475029142779227145853127831067763040180729594761438319420585431546444900131105212053283280444109163920317054623845778114784577652681377523891236283117469043861099922393013973145606449737426020400959335723260763918132824769576181564972959353534565137763089779652100094511330446364797507184259503543793453450700361208294282937345258864388186370815590043966329954654849125677177327740604000767897331162108194915690616287252972595860248117617268977717440000074061968313794506703892623292525804480259861766805425912512279877433662083855611776315705013366749522257941448775139795054547860959739810400803175328510521654357751870807142781191563107709530016678215888193691287437297082541468231278653445347712336543897189813930534546163421054102145489580924669226658179842336331091598641340097439471837720432580138626610040040257095582924562504785423881749020155620716033485839761416339278967015865325282388487004257267088252026526083144317305666263332820011765688760660248950414043569433347527093520428825842731654779513418611057685506312236998762941492403138134130278628895223957785888951153773377278219125362017598290832241727107181732628628969099360075180094934523410329138135442828417419667660450020302725791226991835309309904350519775277169896695751012666612484996123705824658061230636549341946353772353847256502559299230059708672205806258078192365971229407426411100522203370801883360978801045660422495415498395392435169201553938998447359782907217478259097827470124954127685902024144358350312650572612101443964768748398651928890056650901122614041238234484827589365452085753800901291898609505330030279920549391725529609085950104393364051410163218270357861744280293822046879547215661467548620526839159988042187655020925238897459763039384102623956395291728187832665657676191301309167658030267202643710625509623416068746532059528983901144863435882231708345398017370764455523600539902232933592756840568086521273281265548544166869155189217769253547646162274698681904982234866298619169147606728419531849753765787033118972568320216833418202898103877938830638735413399030740564216566952884545843561312568965256410100307415769201396847369236405710036800927520184308720379877462570422389272530968336374888153750668030474213183276584156135282037084306452805350387567036817741427086657772348793596448591205056211475960654991794579079509727749744145381046319701859330950696301434310162412623394533581040768155023230373375367951934091941241165048796250062129299057998101829846308428031549873308933439874652060342146147487112567741122821920746044030465493346166046949934759667809163747600240109859253313224534523318272414115305989077622667597620194386096109434183389241552231538271746064990361981994758480643400109172872094736135632452901332851948137971314553706055023957966448686966821991071157048343122334001260237583112954121317179044296283918200831396802298468845835281830105166394193289527823526663377548771320675672435904302829506965065381751997283437772160841249722003409268884062102256196782344983409233009570294135858257059097270907739258344911489341204245278111169086281184455973633769673687311268585203110806661036758146943995527693971279945008388466314779754691489727612537392064606860749506761615404385929028920080939532208104450150030102765923748624515319131703319720895752546614973524876482149732609293236236247273777247682281412717649106363575287531179493828389605764658808933368078871183171217047349880988574824325448372362610802218446169817070746575905701523040744440387553885188323723297560118413455086687428020491756241547694681510237054642664561138533959873257613324391861408301343062755145453231896143425698238618820153199341060086040582767420305271235520616347786529138839814469999702896131238637423238457679536703133536334614066610801078208632267460386521332681908693272437495162368891180048919544538231408211021882239835055241719820614932102560630354408793308986702893896750522314290296683540293827484505905300023101114992678464105412926567451101220289034894056181353733141385555104182626617264287068129416704930481819217760443171667541407462632641111979636261208100709624085412270249731273141538595684501410362538480004359104643319518414061525957275846423061937152965946901155002156142045064539496986370236697651210737114979925333838233483192299783546734471866931551536263459780264970260754449708918898646840741976940696392398098349093164620481102695289878324157316315265067700879853313949779009728011413535569426979582389581110912157244737931259265697284970217655135182755148621789122423740790275289578800695567912194172232381437001835055296422752802918477505980017007907830328996730968596231403288779932382828401789209564023214626352152557846773852252722874386407429775877571315794193926987712301114758359459503977627104506796335065315210696845619852741005843152072857586021494712277348477454941140247292113886806982524284931523693052325966127425300967746893055139725681250453767381048254515620100529385732505537575705833592952363980135107610728887764666569723973048108451266554589176904835207707227061181003264797909809603964010740136778165330131636080406736628862983444586970582772349185817537741391488455814718914037828201228379025106991928961877954472191162771803243900838963413363540922360099635689809501854005721083471139343422463302132347161478224568573755012232757654186967083217823591384926492065733104917127987001845373958949362819097899361570859947150307057739759117086549735298283819946900303841606500062502318918356952336582639401806122557399912051397857458771314546873219089182093197569434149084560114632323348457092797433851092597638983214843267901257463663134781314617308650305690845449700988250818658679957942716416638441577123155235542071894931406458086716314074927818884112642886658753625509830302008526793083053660843091515069802823880052816971852890353005110913111226709140643938928883849361969638411929899250818485685497351413304912979628343794926690672319498774771835144880126905945243021432825265901074072219675205421551379944471783809347780511228363292693403155051134265892661797569449245517472868660920599174127187787266072773703505077452795402984339284890109683702584921296131737245478223242813633895009345139605954330605487395849639794196025882962585218410041041429164367732771713486946842899444326395469338024741363056416431094423601582895344849458557569072143815600281853202226854482541926313966220609663653863085267317512426610902406967587585145668827935607177770167562516200765317627419446873064701802764040551347065283472151903752719308428159105984289801003877027690073436219093706923712506639592307178568316033439073153303229391098307418523745556949162370839618754825331714657520945252013875481051845919728709239722269244770125576684572285165138692025972298962448488064282487593614865073188125074142887636760634331369470666365999529301391916359895775328977931402715320155854718004339702657310779570651367343411980684708960460486854085813610752944735823372229719711477975083318919444329411604351499806575223073087721623022082458857799250279934773245731569510756715017313617596479814682740942606042680619141077209118785093772744481092324182153082120461148314509548822990848713228383587947163388561905319606931240687609278063872344362746752319253909833481608694446649396658474584472355022720916237042652989203977511744555535046390355716747577476430768291790028136110008828218535184055926064540415942043081374080942301716267577776825913761241698826441242707207132111082549055297779800869982368478064129006255786388275389167279944085935618049212708094398002773133828203282452806125310544290636953095062867364164973356884934487769366520655412414671998178217851002471623636416831521977100539461389358348201695611378431285352130979354332581354421771886107996693593322598686163173091956900566100319732711910014276847848482784607549460708071287982503797286563627735864685203387781411711447488662580506919074616983249559689439820043740266093359451795279470837398893812510457712164918416267341168526716387812302708234976506100956892054099586007977404466522826031043604785853756197203659574797542326864743641930696275983938639039383976918529453645314080185326049716458396631545041942484131324627562348361695524825293457752765911242135039196794110091975825747570795386505568799966389696249682246280342966618524092015699346105263218024163990791087132083482297903130763979613473913387176208922928712094682675515949616267443388284705478374658029384543881572979624256705070684391120324441805258828422852509250787864822604748651961772908816194380783959811159097025994482453404926919796944922483742026319123452985413278017571278566886309150358857124522190490885881345265863704746228263588956571919236644608937090368268874303754973376288862484085353465640115041462926017035394130089878665138771334776409467909158695157752579971217718909443837122861551887220981191484052592382920068292711250569816439601772572259768012623447983369317370268885112258821014795706180517495609583877032038048223764780202857829613900087634097949867241477820722398981112549887784310561560787017925696945478944574899189450789104776948969124427698064774021771308210774498675118083848377140246948789789200127922544042988206918987941080213229730827690255539103739275582043076502307615545309193623059515142968291118529600993950169553663464472074240224949614572614109928901068324130068211147114566598653975234575260644389185930565044366393116001108968881017090742771477265223806396303581603252017467829710954822985343413521574441176308265778385626082663160908651082450850219494390316261203030852320657614703993356424039212793921477017152023812702975090180642248767216176787186820146640075049858959179489141898945811981166766767170808958417303432764811446543595418634015844195047934691554050223561608312574096058566460662719383507164351661101386660993035073313069955716804706013822525515533056761110682353978362144060302654190404145577230935702804278403687876413224776226002198161508963623553291372473425796690649269790459891949449662734434497162619543058824618041217236890350648441493035341339677722497236966734545138008331189365802094164092973437751412787668677178386372246386901815475375282245813809318446288294605920682942075072774629822880638169371477662359989082379276962773285629649665570212988295554230364047191993415244940920604530986966933515031262488004170410349415695604383630856473825495652469190529276541843602095979249080866386859816410557433030131120597006919307418842721380676606492045017393675143982663469887726869561867405220787200566946232894314890798822098147226028444874947376198263353641501588628128443875786381112926797179439990922916825839092357124168749174656866448968685552166470253991097450460836745665776472567072345311249003579071254220431847829346190277916865241513339550320580978949242251407171309508801142462524615167545251923953553812812796260665256935971137006909979688518557390466617284338472954227671934777936276788589891063819758889652011751278052432598139972244722591673113941914651135780718062103411861458368484552768493818792461621795938862063507451763056325760717280557051015665570040719485293645791748867210332743309567807945264041911552088112683723606891810553846521465344581837340337575816983786603970147034983592476490445618714709223745252830335030049582105783537791929412139077666889615999658819848049169039429437562782426105040077835870008683383707489836861848947846519033195580928067520781916779357919581684434751406228043820330757395441949923732785636347709074020264905031104602407841853676929169108066940640934182483936811287487300187931038293402458787582994845693268663457343886526115370317989144981530950100566693608492368194385097064324657539024043053941959974602378726196174219543946708813954653192301733919067704673869912462150060977427632515602398636678171393136327767037299342951693778873671329147637095788215580934326288840911910852018852545035243020530629293621139561443932574144697089598068829122935731776730489045717358325562473156966942186455302127002114022039974608747779644709489115244797796589906384418770997189567851284837589695124739467392960938675720763779185299900011086163519213780957046726615385324925492817408567133339731588076377367093080077926628622522134161015406886491016458182682593162761762379998002418582226999896385410590275161171583552341286538648885208081413890952551752752797152221884999513693097781447598139937479799584372915499176297136232836731630374010313502043942856037083079284572855603421118286922603912225520993199838422159918448395641159089305976756705607255697017154184132277599592427392938983213868915348765539995943077594858133294717775720439621772454892132175003496794944803486399576292334316087142198570183000261767196592083498937714834808242405965785655310308867240264750725084240104837398367051824521123066238391904852929941093000718163245431136851931524669736901982562996216814232339219187517362249544143838108073634560101557169614027499080920897378574498357297870125151949273252611161270439044500436215339165600634590130638837538406159637912104127317075279667888957046588281010056971189276119613442952242095845370940420408785438221448450917300404499485015618821325815982156305406684467854915034867591295681736123801644123903472484880982695945490420745637844789016272486813545684665580677166106400066529378041174791179705123454191196373928042558220338091435619540304355802434014630796745807381153118372758265098581751614693253118459658201085261240929239816470742412216818546733542986999607169421929800394326943465975730067446356260970304813476771890576978631310520918610986809549213489461855270160970352221518582845449240776827108303819094494349973652345765519749649310958102444092065522056161957615174661219101969136249516408701120946402626071662270491861796002047372616649580878748688354792295293871534443385552049753198229230272437336753678022532393043874055184367911111756841551329365459321352608483315813334374337310568596237612671310603149703958105283852010022577250217733701047198419667300512304972779175103484703105288038490648270726239725182927861156936432252693896147533649924016941277794467332256579075124762539427709667169335313670086668318029176967310803557640237231328476703794053310311820101309395685542141383864830782211759227453232247222599993480652705495692598122075926249149059025080339063266945367639035599443590872363729278907201041022180650203892026357573097811468229412919246771523165703253446140387755383761517408100583680263192942088900969832791145099411098175243011028495152388183916902688052544899401372205613020195513891997531637831222041877674524454439472945945212254095374591974227370351556447699278732972179879420749801974327671114047748851166038416940672866245738532130035162815316105688928284265191769628703870398388478524535797061411200689742531616776934946758693566097915215363781852121921266589221146009676114370113880990427548952197197793587964394675135785553969275488255012991794910026117762758243938305646893882803367448467823194897238658298949353783762585384450212168523959099319015548041035269244644024724153384295951342588169331291340066513552922950611042664665784552557527329526991222642332215088273248516866665361603520835955238201517248244853520194287825971728930306223831381541107286874995748916814798772743186221871346550267849457341258409383121259355173215564802573398512742704407407353903309711766205739603005850572880227927179705863585546462587859618635376158672896533233699549913407067756479576671402085350179079209249233543131557488175982125732060048551988337610948620176856392229720122234214910003609592928397806655297646929652255915926843451405045566792524234905885047768125291074726237865711707059430190638416289880363751650390879052030444196453432195347346546471973595196025067314493203517091225798046431962802290239671550536465115332623149980169153056475053547607860207391885581969225821190724446164347656307844194594110576792306538361726391459536687379047485098306982872205684718711398869858317294785706246042607703321866399929168556274085551900157149582074858798858927963962886642316870029583741380775822184803732565395060022164330511870278833384757665789177983496628191962352707765946493535189857347970687549875458419045145213049730996897937959794156202605143810611598713734230136901890281412728525398320287477523443561838173293818292316049345833632539136167226924039140406480460644135895289197019166310421168967015930147894946958187321911099505281897711988711986440711206781762152755466176871831112451052660929435148527879081317378330218707839157868046840119670787750254465819236549430724723180882781380800498009997681913741209779008348640190124094824911594977145019009747796649127544460467428600868260071783252436776499503307448874271267037441639349631669659614339079901183854967640661714971402324716688608371364540073251883464247008581361272298946073942177695211713468753824764056219306029960615714963478676063271289460377364780779908789119694374694948721756119137458611220931626554435268407506342063623259853423754193831196822960510641939047408041517463239276398036147791768823711124554469403650924174273895189888261773301296597176093238168673898602284494223265973033503023529023169812999040854518427316573312766087472511745078594697118939720977713302594750217872938788577622688281692810911636801747417784941249725383961109844305428477014392159551331431076168788988569290084440324079103589355431543999281199292075106877733449820167248665228704540250235452159420892950731047234328569696921783329007157636061574786939467398213664407458777725098055171191943136064714165161316072512894042066104560945492786017799288070461971906640229475346422951137664902689538880023720233208657917884402752519306741337770701896574672161185533453422328642339907867753444909885936388031154743698567644292878171602323173273194876934667058056987393758751001171478861250884636993226549158207023070147724477550431365239144561160487466568984511452077444385275342682659058686754277070638882719331385445448903571853607535211471856374412735709013764283377436284460290231937342006032339701827707922817442089847588744750494996349517641320120671806850677834301397403339936324196914179019238540804491813927635863888947846261154343056708076375323933598767814935726758167789515936496642310804474947475865687661340840217148070121244073595708069268852618981241845239625501954372889470019480473741407998604411900951037029193441263418405020994094303361480076149295100962624745446550467217847414473500041749715164653532302920687277804823616802221784964851015064347929101622179630648327637687380603612754752974970029149053744377497534328571746960809258496336943458129317117108749110943530231269560651773367664239430832362186295189004611440592803547913033137146900023343642270506956296218655251529600728827340284662917217550133975294701804836435603468062751800831292702336291596085862177615293016738724534504884272841122349359660602202190360922370551132725799910004522848934386417702739100885687810909977641047143363695788010064393522909865656672138344979003352840989665576735791189768139643655400593235417439345892545613635058062893557581403178518529678550854034011830876857075004332710375269005275398156726238886594609684164522894656666643117415552255406921470418708233253877054918082927050214470427530282060399553781104384375329931827341236247969602131021426032878342743245861195045306133939322074780233254643933422730663181976488755094378227681335718503138551807719931614750344541719384731755237076027863556146460738410843506758494102586700860138868618715321908492007126865589707875689858105219292094170543344099565493690834388075882098724877634249396705111127634773665575252350634275462563176731500256038365869233021602990256900032352927488655490124416903452271837447299576242220639010907061858064097277856086727174377391537703531304601984931766854839949112775796533738980020917645130808081778526229854568799545636474153830960355056110667221970651174118436424704955422926114611808924206118633986104009778463930878802091271348693806759042132848977432544907839407229894124083874975784340941411789865437199229987857679079972812278866111383228117434403231935742412951943355777337320738797039792870381403337389249836994358066884293071110536418096095489031736481868834142904129262251299674149240088681775282677536767206682131494660086697105301879195912692669752737013459414707875332326832316805520209926198362044238796117915453474668621065495507685425295760656476351263333253557053579391889347869918730826586903927618911562012746134707451077209085361192437234954620077993720817707292652708920276099798204463859903235184577063288658339775658030543696920328358660586443711471963490741241704808567130613058265648429056733041283618448067490882859963365870952030401758438815166830096400653200589361857914073145024511257892789282012220366162507932778645783796644097201418760841458244803535271505188446325364600228373038329001148344983727415780410763608177474534085659766722855438779553141472201463883660140533273604776967204250729068893701780448002308249402131898895961276065230462135625138814289282424482034365894100618732231319262029630825600077324878984657127034891232398030151880850241090275223242683618285738275138652335488836850092016887233957720005123868359875312327017035129899936666445612378536864845904651190457646440643419208135324042038936473647725455300569901618785250323245030220455885019543920298770089651967385349965131986410066329735724022730291043988913669457208725464761438891007894401376051232101305572947867492280324821625860898937283773095038586551924151489767910591860630091629894310383726671100588154173294223723532094395594361641772465744163614789556332071501898580910681585287558325199372423177803751934338469445772702432876660006353837836703326676911276499512012962582693758329854966142867564873486417870035100330795449024284598485149429540972856737011140039980827119239141453802229603530372324417112527376064694011108981738030056876113314966941924915704431558708610086023561762708054622649049338521931180300209671257547211129794234628485633664404045197995878735616750046586846414924027073838323950629857186400659775611342196592070598169552997720795851864641489120086666175562439645778515180160384529046359837419156435243229978218877327828099325455308008277836672418275750435346665325739671985506750834857577562045612641496395264482426347660689847274946791804353362366051874308617906390474552359039812115785633662445482431920223051425348154020780114779718873485466160750066983756633375027947280911825376031437610838390417455312417927418478813239767795436873710212137850412494991847465160047196051375938686881233218288388039855640742456557676359641088365920800229589580739998212276979988060059286433886029676374980065493978457898258899695626513870863967195189417628051186051143850527902484536697960050092080018734068164574345216950905142467408231172362206509108459790789900935688249765506819076585037292263329658400840334443703911651918318863206224084506177979352979979285550048957452854769917110802987647100565140080883702332581718307479417361622995966993017794884062651434505397196069395116054966387078372208286495937249742717634708016775907594277259435004301089035868485896786714358190271668478971333623690298798338050336370164705382206735887598487705212548608557462124012177788808319104211003460062057906595584891542518494477419946177808481450736030647936524026490478748604770354459201268694152330901493672916895616887540284078399037382994770715721275703971619812251168155469894038647837135488907360139008313193339134501666772312541329083212102053108202297680534247758836007215220486139071741091128638505452260822036101738481918768120578834529930885032843468332338214627474749848240644896029175385104045688659856645221426062024389308831897432888911414414944316010763331281262581235973890151347909426838718615554968270002332886411059869219763135610736692850809498283104418349888858763568626218359772693675365334335478813100341812132988089348275392076257605274171608160729989915222663996382159687340262377596184844167241877430499467266696525961873922792118255327000888738216608308731076862754700201872012123299536865580913664556003609198864693989255054400782510467971752863106194886628216151529602069027034319849447481284632401402237915640524566126561377818427940870089696647162768112040175042203777960661383494935285891145967925288239477168587336692115864894200011358348022914538241180031723440081229178541616281104862485893862931314781580929099849929790025723663385256738050541378141257540675818027576504555692856993175194886865046922723986839223166952291510690890165099157192201938772180073744361395520795773414273656501934718321083650656676350516063046085473676585281605009155309372032971540546011226179858420919660100034986158006779424245268971529623483525659750103449182862259059710785618881444488273733830185781054259823531070834521256848926296318580901514461365294130225580731088689780519225535627633596308381077143519930759854675257282942009805297410267669201305522661882855813495497652520497056053749341782487262654372295554021810241157615877726221411357389852569916914983039078011639115242061369651371401013692164044884974391754028877524959096257867901994221198623002816636508756310729679857551117387731256752689642880393660681171598157168842922124970023435776343451437495070027872413143136382052730545706647770154682968890759108065134153342367104434332811695524280188861318426064822703530749854578337218868094306156272452304474994533083367209766079100311153501642596737484121665343039295709715162425462481765140610641555838017962917754230969231794114357430700387322717740738700586105183786602763547733814371035174551077017360266838442258888747614643313397379662416429156052575407391376193894937027042516265648175002807819642603937857799995239621182362330573252823250875082493043588960464387981115975753794299806069252212548430384332671093753746804835254281830285779599456875555812405004701236669125054076108557987921717995111107562970578244152387726255085686848362480641995183322918564509299994938762357299373267298403967538867641015301737963037778935533677014535475081011324338102251375453801006253492365919689556561806644926238039334003165876996374577216681658198479696434174576239983489285798119562279428430558802982138691171545290362097942755344284308392470149696692385008832170298237602126371562027732535865155136205379622116039954181782634415852155025443272581908624586124718784401841161075490255822610513885381104394407242095324645046737970945278053048720938057263899032107869608840684733339344162087061315569141541690358031957803785560435492216633041206749563324626493755605530361499281079517131761927349415342519441964635054465887408014195734522524559152447637762736882907199165483902875080669207754106332336256502832340626975864600210262400101441051902364927900090207197793645715907214990645793468082625989637516323092550321713708619296231930612607825968554907168407524424310608239531294860686660184589407429093110615079805651419178750377809588496473618838710537934025083717492051238501689615871861837795819859955137418083137190691464237122867857076941113699916940827867146546635155598183891552561999272509207582038186215300842416270615518293669136213077130202556885240270140233207568925519285405771849714349471020896876819018560735591774498811447805373682376709486718830434425059480764671062008087684322053388648762910271810955868607713741226069257158205406990492338283398598719259050095358273501618694951416638366242854951116180369522536621635584125214368967250494375705502954384661673054380970138541985618333307703413139071875739741609451613880135268595475819406443893674820007777916208203877574152238813569011666641007250697809462612754152291481878329339085734557254848138124936556185175334404245302932807118460919917012991472799316658902876636875604608849255271382448180701117467463509579827179311312155647669973918331820253398718845511467390114875450661531306595628856340586820203397692389477774363747053287232618196637648971073255115453659333031131019093837523754490397623506257940717326344758993739373009238759217149207727342988082941988655737337424383671105894614626266075399694177676862204501649525445460526198676572751698707949663525811638304723613463002135975787275725219470228977700513200757408099214966882862640139754551084791362693587493746696253240644150216789661628399342329702628214903408580361406044014865241815646434858794634740793744505042692975348467389001436204130244618877930798247365606706702153056279968717165902109591520761795948311965675398848465582109509788726131456674473360619242298493294306142893529140284629321460464139719168132403285421872814168793663610126392388471464309607701426225262223971884231211723241178528251170093721871534270061933311595498730543615131823936392577568967539517223475649003844997070368418613474674308765914208900631304862392751757847981277864004326705435717501130544568703269262181355349929067903403360424878045142937824589905520457189140714116930371407937881364516096680848055029622052790141508054303412531022029881056493817180956519513504013831135447586861323098418168321323757426239151245839501767790833857439105288430536520736402976318014980944312078301338747341912237683935233667387056271874000661136024717667617300205568593418411197402206628045098944517305843697594277739425160369909705027815638484482958311632383602361876126761221791635737974614019349604656322329612011064354929806407903660084039298666417004372296693731604322471838653582941761393122932124245459427083911147218652760745724866541400780804430839314587578113265531861843024870552342479925640847791089732550690026132077594543080636376137051201361452908792574156595525593276359496205983398608460565235736958415647552120820624337542814051703358253495253346020518449244995570377607785573434495947148424224572744751333165970865223005975038198457701646057586609251267367198979242242018515250637248688088871295146174992472816153707592002816226506493229697005533132193458466936497983217095620954670749188705355212240606036419133669480054626067267215568269605394789349499180845560667795288877079118365476136004044472585959458435736732884420822122890055697499620834968636670013561346785109748994354356515605620136568323207434115673380351968083658867696759771496500802578150156205511916453484276295580223652617612841420795331185687514955890841972539396331337316916351046072476706623699657385491293952910671198152781372078025150413035333790575059925316323076926234904691078439693919503812227253037319722474445107099146554139139585293136217432533683023927670384608882517657875687679367688826802695940687804841146418106685395001137486599604050942632173426026287127546531963762849816204839507096419762831052044956594159855004016940136789708720248178961350768270834378321868474677540495878377199733504049533538772454398417964054190556459785157395626879579992047816425017023482764979268964008018829532737403651620554211646915489164186182798316074919088977587575253262157720481892314821402725214316039005468056289053399124229893419377122172234826209868816665230233616502919564441257594581002453851979454393138900571698717665775892740867944879706667133985387529742552504368290666490233018000734096980479808073945050477005629620854568828395501105762860460748314986895073828914679474789748527513182033344638134277887902612963472901444517018438143417821376462657187420280605697389887995845254366288678659909456591066483923766921200942698991230878027491810036505479997723983042656597143100832318711397560932673606500607519587893898968006511950931308681524097327560388960449834255195599188432513217605952122193310060569405443670914525358791994638454429432326366615887989248283154920673603470580706613831867548250046983629614530832844894203115195024594470646988053908339618926329288307421635764352491973317395839783857928097959775462224577413155778815280270140280183489248197763398347358664975682943231645235787590879860390876066246240379451402426464566223188847688056924183288654691332901016380627219840395868061686735569710546245018166634138876378118656412460912988305033297231269719605327649849145386179128799275341959272146560632299549028810907091312356730423946815705261442498829696311632781749438332180642260451002539535926743011856879965684711808678271008917936930854554716587677417568858142399652272251496972961508077595477789735977166069206523904688265871486630416729839097194434388762595270762952480989071480850435073905871744681266533585665209763017293860317850306798448933509154741534217851834293717229819114541440577969862986380475729358654211570390196288226634588777383624005694618664604870482825275085166715081846966912011861668904757769629316542538464272966966702546856591634179170709790375852721660931710156886246555638054452364617443736259004578487317781662207444596091645029647595952532876958226373385749776121833977179892556808444531368422986141522654432213299872447682929801506860334099132784318954437215905328766159443181948841547946909751109178351160298054745607824597883460815700319418238597794230052904049854114762246201612608843569776717411765428764240033085327597705212634848400300748421128101784787599628399531772422652689523483453978463030948044199270373213609678688893993034604283598130447131074079839261197575844478543836718669148410596408518698649459932637590029734297837119733638416379734691214400231064602461058933789261762335312910074998462409709331485382264652492013791865251784211461623485811942971957458982269248373677379612275941200724619920657380899508626812125097502369559452314833258864413444720065537952020975396495991850901486731351518109598195687443139747651552324013557805886418933529947085566865372077889287252337948184687538937257038729540045045833436319085659052025791360048431816233635756387365413718971976625464688697596872128350645949087909756974073666125132452461233459265630928358888029908714397813123863792474307470691350937641561754523107565386801177756340991837065258690416650489911759226201293310124738536232750688214749827030955510983784128325372475161469965488404257495219056316372602483751466340010554492025083921368942015863898425791246738845851872718854832637858632363569243155707638645306391476136889149752807275946394403861412170215765362418180470323040380570108221370431503601899546230178315197685525715751551466151447719649094281690954346804349549315803597832004615651346211887077409928332658606628047657899854892509258886520396187956748336897332390926965463883841175378026821488605835558124650258632093049329910306812195104846742621837268128757419047426852922265868309214297082105469372575975176929180118434696948478735635004350260201072124473173510817529991708783527540203507444126568487182014012707333059916456897528833512138866463890054511850816447254550449860466339675370632744853836099597683423899729790361675693473167044458084656898049689383627760480335392379511841670954300312096099484678253036901110456621552286014981635335946702031364827302207937992625799382112541273652331824416795506012521275422939402357983947734074160692210440586935413034290060455485616966151091517939235565251322529005706626616399840747556161292409265342001828229214224771889207206563499360255538814431913796473292313626240757295374922151541505481486161439447708184391503375595637129668920933750343455058857906266102795051632484347517785978295775323313411556403338574996054791232512815178829995016073083615911762912807140943265709421880676954040922156791249216105364614646174270237019981464259861076961147343871418287024208577454102744157251374605807559652989668103983522331773005856798736211784358073721485893715199859942143076831892246250938439460795076346481880361828367706783175298020954885880573255887648742217293879553030687797055720059330561244848166263936991471959611810810988600032990009574880224663426077308171049142086505869148868192698897864934503622373256781630869980093411805561454357990857799965478299502781275790717707902607222618674689348285072030524157074910082856597144675664428920309135370902987523038654736312562578641361947882296467413488060279839437488088867599828236051930534701304652672217445735590772535403370902678093448222682680053593274050927198651958864999928587927875397210715075391153809797413174486913411766000980892551332294603430136868166360279931872592391424354929275993507786607438760277234827033453019219188269528949249774088459798992834262074116509659699273948423691240298934697772845831203728284342734080440582279279449385500813880860469186297615049748852512933782219769723482671459702540254235044536179822421216874614525001775749713947605392725371515410220051017826506129249370210074713215702646718970176529713529170846693381051341914295151409449535274191100251786675606588089286740192896220173361061377707404659207467549180382211210880569761422139184898779660299310669338557566288780097323071845964934545679097449303139272190049957007922314583636747895359566529361116457007403202909831940409008408006455189265916040115644007700978224902795314347419690556022233793451243422812163267353732124081552859052790805333444858580117846540174528080705596298960709801527940509275683218397940646245808634695942020582766084267011458198139134217769109493631186188584034555691133503811542411654924031597346116788156563936844605336064630810599891078683964173599911243401859150132908382095509344410768769312197988782293593537198007096111765417917288730733276028826279830984888069336133917241494472894000984748321005289428136407417143383750862604881892027565094938513244107402464312659770144751611495298642336640575468116437589335038757968609333810029938311287642384822983177956957457919821467535466615144194479940271281199097752277123252119610598482866706058077704801683207381237291016268712673697468663510162172182951210923396488561245335863030883344219370043264835426428832682045085253755391670342298510101240791652815282178053877948977154259387833692525521791097260735254755618317567726589263934090236977898070488889533001768033080964352020515624465895005372854060191248104423340744299475277063476859885100620036971367756235206040881659896008808970295379153880140188652519053561359286184993498714652572977374716481459400154748588295102164232072066728177279872344476533302549821537503226858890572258422159433131778568064332111856079614287771157174759861565675947119039965526059445784239886587228092494363643338630209966115619657624250037371779165687655095648387588685585792363772629008898474154430690326056968717544653041367105232246651558722455468732326955756053401047309862796011602372894278565100868637091089758266599361238734206663049144555150539070595637588187554293181813486405153628836709662862512993035807782770529389089919949664542622271445208193476990560947875444134292560734053337063940557698527728823901527391674988890430190248277740962123437623771908281171405783186441817996291976810993186075556557998226961899670505172503176970478318494381174105275028007164338657876084119897513726133620867213265307058021024183986849152145662738263711400764695322920097385398830140165112304853506792641405855223258965232350377597738969524234776253945915473091909670635824951733894422842441690890589660074437808252302182164094347365335981091810165325498936236852670961537328994524144662622431693237259802425553316465647703219931940096947383304113797575355299426165435216249264901202435937549720565760272838440903152626779553219325273970382404419424587985859846781540788635587515948941100411778748944502650203511973915518963080129984974652062938675447263343703802103216183312660101358702610588424035217529640766864782156402917035720017055514736724330170550520652178702579779484955594393385996288966604084534992808757887299465721086827531800822034503669206341119390769408551044063234359031185562305536043937417842317487170226200062346072656604035728764188813684832337862573503838491030861586594880626236663590941386623327835927321717242261635468987759100931389908205337030770125738718912435770089268772646148830404363784732440617363888102030072243083955413007193831439679970456749005959094031979836487634126392952125001974832070209779717836871185108707618032380023315277752035894893300486819522695218370814949896932469516548422492744407152604262917839754341539982172145176473319158732484361020100096843159572114232745239469462523284332950336060642864278383011730314933243463477469646126012777763143946081809278161847363459726085802082993954311369716895213259145683275933972210865623028510820734195492283984272237171447600320627621860145163832082725642648053305440108558000290856661858612943374585011721473586332779871910908665438633411015793112979556722608816324261617218240188630575982778748753216923065833352233711992412960663285551058869264633439446795915954686294614812267851897476985265416264653881588951986235110499785126886178087546621762307192867904079329799033213058893242834314134564638404027209296264546084794193282406062348821824423155096768904504497061310235195168378920891210746365273129740636575425724775096719685973840576077625549226389290134994901861591563708501023107317433094683524423566926509537438379112112112658879915751136317409207119917901667329649860100149711346557414843299024723560695387656137649394843018433478356786091791751305745282035536083934703526256356798287317181098199795831694546370237474853953650490965856766206827600821037559521394063663183057061934454436641882284337706578013703943005306609352594266289781854950351898955694436213541830663431623291621695983012038496943108637122750855537092780036012131708176091919272216046545333582484727067579416840034091823452982412452608419924000653635798647992947937057854184661089608239599508185063613570334829533970740227350035397393155717000491010204512679354461400115671394772335434139709506541341677872172226232919488944890308313364141651038254765895622435753193383680251800772959113895329441321721859304347096223992276458699860095587401063244938903631524427854527566729843925507208921156170380241316676078047203333145097818042063695366164952250125868882199360300793348864318938743538350779520736015874513241645425213979256676823982493109630427250526950543131849623812953265194125672661660564722217583709880675198616844293991683931488262348199697465820163923974650871923890267949940031368580963834738838382045223106716399600585770193305784153142999204994212344264185603545510277282390117483700082920984635953011329815361699580130063349632704773033869225243280908569596520924798977694322277132318091865693169389910910818137796930753149498399877281880235453475339256418983891401212406155809988252657479354535872175784013808059440368582374626977844863590704640726364297744401319292782694774852043441693789987538844035071829495800277347848392945872711029439190143738835446051406882570211233732353055205031785601381001751490539891533463476060914684491865795302793124812634292938729258908548785949974381609026349427257680016784008319822904823431224402746515750618877298990789566549591167421981146525982486041286695660346918649040893890529952835320375384828169153724378204160041109679640628149360050340719362200395015558988046003444392907438562636648996672619995607099011884690679787327881837494215470994195935009191107945020127290308719121239731563844162352311262518412437733499009201665458264015815084041372907673911545500186625364412514055512709567948836632239882862499529369150873406945635957430892689287223897788917209404656390186123754643704792312526659721911710831620882926714044399797932937935874846204682834735444913029508832604600747171792330300686670068879045983191414914556440968290589354551936445290932282717284780345437528663826658911009721234328805723634742252808426175723315214034767241558579691071299808539939227912672632135448482769304015962884348742552654461754813556572068845625918388293019201590573776635466348340225490519233570427113140964091080026750991318428149521130592552801650429338683804247951667750614813969302526367422406457815563011843737461106370447413823835929427571149495806735636579636505246039196761251582998379113194960798374548881126167046083541577264690350164040695374390403760483232487426907969264701730604605917641115872186492751601401540768096893232247106816237370071431262516928009116525918031071732149607695717330287664400388449004944403498864333360834519927216481199359488483600349580811081108803258488028117205380233106944766633970369772033836667500635856303866070883281834303457907185374443436889871019188538271949884260374458219127304807439449908032641760467442676895825187712284759765538892708197843487425672698947785306797456136861074026466056025262726253521599259674374717153826626922252778432014097817849155420887280472049764295288679353452257281475683610989060632309587905680120375957627610190163630854609626389444794718618646337790455190841902049220437390756944540835564472841204458038075119485233019599800644385006444878260393031248453798817756948921281426853927876203467130843966604509890604936184239397768012564657747251009692110704436962950828733238200269704213001973708578284212609185512288364053406427420303718076236718966075921928082423103412412810073729438174264930535115279310370809436535349704372122092772808311205709694838483480566612422178866540874830727924909126015149114122361383532493824266615853045739591845281785115924981801565811135432910818553666710891431263810106402449405293846623437189678807007567580086177116082086508543729472080209244417461996105698618463632958636895512937468286886682404553092230351494222523983785368113123054100219201694508508160335783567635083767105664768942661296097468283896289743762752819459804356761526930363403745840765716926799790752853383204561001290717065254048726204539116643589665766760207503852419405772018558805297914315650481025104791231536384841908392109956913137298910477627531090150672724521128080344094934375618956437285199128164017185489864055505480273524163381538021863534274161007995170494627712376739573174171577949643459882973059466169081648635125606820015220192986268562363724238995378028616673102128718868859658319934729971451370770952241624919178579880792404688510246051074486244400907290665535504891210734791442862664527925011154938086489761748830213420041441410795441427287670967734944140175009830148176010626330199995334445025129924805020099189346881861627509479431811633412006466439570334316748863076684188151895455803823629487713358007691599760014770387051723147876917505701098914898156122133031445729257132348607973498863402998273351611396186096977683334633642642475919666944082526369731541662808000659382179410786966504805500337258129350693101053207255202279770041500327998007405564901936828562060547815868627270776451890278957005689876700179680660140928575716108494803686725737227355919718772745097589449324636885629611882714228876922922654727015549270728493342955748787958683652293011241684802436474270400250339991796631824618261137921681148269031570836386231758265876473874785409074213192879447679603339755275165096464233516262846292240987012113005142402910732427670326800972269997556931810321969623075167947349664420039190015168031606911955116810359733062178050525928264724932867089085518874155222323826592938411100883237239419184717929853250063224262081910303242946266965212686054995542914328193708056213167768755029525425228121730715134066039136166913974313475237170559641391942930559556154768506208515234225281915601010429907045194668938269933118586223266628686524560667715561982855423538455341489501453565071388554543413749648778431986954572055748058525780086179666897015651026699461670974852804355186180055286280122388273709964778105732046855525585709331418308186257861378324726572970321067236186259757164365173062037174367307490246762922896153572456886183623969935172618995367851903065774032456161997373528485650562680301728277393976085706730015645692751763089210426842212469752577387265542210891229336053451882108895436093074719896835353915251316716889023128918198142247183496249375669742767821529802640336650566896509306560107164502860459284808453346020497140593686897163253179398741826121969231913899808762316510754425254214527198383609803492073431918205384313892349547927187330484542497846422247526867514548760491877160241712023567624788494434928841060712611775246913294873725213093415321346717577035639780758614167683275903632702235317671179998350358779664152708154826805626435810369727777705898847828223156530818093922760967429057841723216560880367472838031056702612438620596147962493894376430630634116658168081135637041043896498551610069029594620049986471482218095442076018635583292167262827239525881900914642855602062909618153167647301300257865177260440887047235966117406219906959148898946796785265630682107773324332816340438606462744761386084650946327756033944718602019303703826129060200685372385470410133550988380528141702110978409620807711997699979439215477794486894243415014562775659596501840302648309615813601078200240905076464301671678264357564791487825545492125005154563158399916778472384307047774025570427119515500850043845083569416806784433720974794127733799440155379312546033451236785670015641768344045426759121074314580788072339328233175418935760151263459569043791957344628793101241465836126365790826768941084010864182013856048108214272807421492723962155717422052392349992253004762661603830133636670865974026200369994082612122983027641984627467154924303293174679552820647120298635038596422626633367131070921212257380172519157892095091006266106336238865213631462749009201939446412199279992873912379794575302535380996591374368875867370683269214009907039303435258154034127358427240703569235722463117102489618311505265338894364396016170821820757424555729645751950938013045267030484071132579919704000383695297637175849308803685050271199402133951319424587426894270817726814085078707537025481185285217124747104571388430808225434616852501972955318332785066003160125045393202099220242221786632325664086168705178937882742242277165746617028186480005318789740910675334686262814998827237874071631478811776664224908230911808824944065082991981015553822387296404044844386735156296816936867251534686678253214752937639262632738482524494801384379332337480470709169945386371509647614941509343253879599228405683359341651150369200331627869129155068673882533164331711203264432784443794776075453809372085505973211287995413910137967773765035075707572416004974965375019430059449672115197114300308341296634363994018174330297705356895856527977484502082739452667191333702984833554618443509315932958410103837594032571605948350008824847778370755659616793205222944442367310107768568426622743058753667993503486152316260847004083332330934165984957571364648033739868094656854766500386094226118684316127496335727719622159618075553247931102450101054149694376997536689230943684015239637005008436776961362604652305250764577945044856588556303130337937637584568226098090221625852840065007874359290321320280588570788290885914502093892780043884142856683543161582956314949949293426434596312557816405452813904309919340117762606091291396350276557361466960427486323083036243880609805853987508200972976388861815215602054945816834928203725847667673945028734389184344497300002237854372859747728736574566265858956786353570529323722805481645627762807379385975585544049928360987093531707819283823266536710961820867633924800590269133451145478524723280221339382378445922687713943891845750409806611868670907219748024381644678781086851605483002667174026633942147115787092007842782089215280932470301448694378940120771506628624553222556977274369136892021197129214123263594672095597217355486420574693213184565388870349400407812238002050221101397933292440154429190620445874493260329716007771129191303341536040030592428787830710953329225322053382433402794995593643743855620097211156641499198323985531338448063465927345270793522844317122045095552926565677044820428094261462968855508105089039793320121397450575464235778223558550701675483599212849144814888133652970620146615312291602056113346547334646776467996624798663764467372375580618750128640544861527721799710886350650036297025492806666030463115163910449108678407169818833956842794038931950535234731256377643639809891076870027413672509017278335449342724752031217068013036299854864486679298821254140700140508370654161486627989944339229164887984150478813186460524403077637832381364584373993133638828939106376978010829730086696447469524751600169514925248184909347552458371906402894112143342913042425119075991498804897744279855393295019487193322201900767227385856948221965134031470815752979578234072872870864061610195683636663998136823702282925492401514502031130436657684615954108211084629706091437805772721273839178639131717887443026589301934722580722282264602230721192844748786432122622694374886983998153642178727677253887329096529940391620545690681265076676045454676208253215929693285211021809327343955990867532051223585898112036475970871713426656434583507474132880978383694284993881783628246832043836734870487600118712075146229509088907333216562883425010474157959519802753737353207074615734359950917633034041867497697849394985536732586580997316744690441713867540958059446378852789930297620222604833786957027197184006698392559628539458758277975628750775171072662357262156099911422044199119776211668331641095917636420244676259499477748560348602202823573665983770426282922735568820780900244211134532936029986419370700261488011130066473681600843990864279445635536649030253558266681746134732163994916058042638442347875574571919294921314038478195707704847242887613666027599240203590166042241934340471174690849959178248913783842199708330094706059766141282204703771349261845465467303949686774733804213775764864721402325034567509568877330744461204344698138303194549623159225216894758100480008789347237834635276279450652193595454415121670770058993190908223195136491307771401008770891360107630083958316519855924342524280718239245765071497107790470268951510947850084898361951159837168287131598618856023948505123054067976955802164238423731900524591132981388533153613275526318590113074530233657968268278701964894939858312848555329420551346758763412603037648991945626571950767817366711356065267604903640125757089182806339341468885796378166403252061915963576346584214070960520321235843301919111542224330257078627857685831760336918405043623623218177322286607121028025353816376982875087437289188692242440448124529064238399893918617384521476474527290475856945769548940414733949928109239080949364363998094818608866216883201409871009567794548425101533234569090375516630089610312693060075013396845329775390573341511572845753442124574506855139857087672290632520712822836898675653699908618283594666925898009548939833508608607260599779909008815361203081003227157528415246740299200554995948799831259966967806525309956398417425352543861623538307011474134635803745731847267250875746770766982302626792659921211234941731833882053196324508227865888959093887982719859970809616249967455654558771431045850598961881187639794534438030685376039310828691341548451406951017195388733834499617507054365137344410662419697760348536748426469448604793483530932640750916469203634994632111695419146368359339833746929053805269210488100993581075171407008234382621736446155623650688385406664750263808383762293216297895345148809644306105202242490456731839143553416517872397784142627170207117616546800488510968748159534050146410010900225410460505272717611800300176174751886985947613572282512798560845822104300231710375396317277094328371470734178310033428183218610039541143092072548258959267043864464067019986182140080743256758222364998974188269708680978061703088007330850301817979954406980309944743153559891729237589541344018176990147496150015837818215855483607900022663732655686300110093239694453332639499744272024497667341832341518261996223270150217325539338388475444196708640955072180280866107249608125454281286619085805121430852989367325716034183142321846736567033177166764958622722078083381202042487964418622425320574164505509217667075489286611913040599708716195534534575866921679871342975350542397202975526974957753497844993170014618854346782804011500877397090911335389729777688425147425653707225659768549265335006445942228732041557055574363071671478315218985234976551488390132425423807503054634266265542137826213300655078857699962239752567691950051475299821394882915795308134086830649337794708684433794705369036429172880274031644626953416473124875929802116738429300846368258041108589443155064127547730578769498657997299214316929898935573100095777193327343666456136807739936208212526323179690927158138732929201188422171096903075703929226961371897912656149953213489477096201294742738385902136137967167055346799290500698397301715510874102818517964855215115172099528516768891486769291346230843087259403358807539071183504277202836323683179078265380290655140041083740719498772639494011706018523988193688596387804837137717786509367084073068391855320094340208363746054252695211873108044187555617609150757296353758504243240978194894253561488051648399185550325409817923941633018831897300169815827459443001516839520793289738300462307725198142286148951142478439440317937819911800743416221271375057013264558879247432237718340532156058990251445907985761617469374174049678441215679716738971752972094145855349507157006920996807623674653318376939138922242997007311089636286145640685321012699136080416760311519093495183273488320240136224855610240134003134626860317310814142381469445745744312988970092743783644851419704393831404193089809870336977181337096190347252542337246633577184269223080133659191757033533670445433368346875296299597712382816252387319226452809710623121348465020836521844818866184432708251643138892691346300397967516905108567723009576758783140251278160521197786504211118003803877658280629033901085979269565501357187891176745582524331542155000436234325332651773064604028627338774142790245242183923664463705762075155544467497176172763469820054986252146724511695147486423691645218403742894405229905590313564067061881281936147158516087644390217739145563590052556448005684212375509470449959832354588039994963950899048481525477275883542383419590884309029779786306296038796100137911094697557722558499278494833301800755207967534234274887248989499965603683949638931118762378569545423932834137939138021647616118285271041532031479967768967462808938358947703060275473914250749974237751018161294576026327190979017858527604259806672994861552349980466179473571652046506342195244663206688176556106240872502147025613296682721844457249268312486837310823230261360564387698331214742713878609427817727747014502988707165820279954505779956773797633115663620397397289508489929230073829872744566111631572338222471484278324491268058258977023497243998988844939067198209483010356271863466864726221166286092829190808860962867602907791265041424348316701049279913939388016706714493232090945822681407566101660625138000793051663759617024346749625055889316850459372609378181761805626424927044621708514952079284031715105093449061273621226386882727965380249642434080605888446776533493338058135061734807525410509222833360336289595102939226655200812022605140049324644218351814904241332076450281003498689306907751777566101994377544114969360082451954596671173255725992859952119981246044186943505451985484433714684204234607713930938280777325979074551646211563456576877418149487019493256147325630113073449915110046253186604961336164705987026471007687253247036526105011083795161210599213425560459092290947785338107951611009854710399684225861046708990969462210054298677268685138827493436368017381290491823802175884434858199763060018402455043639347525831184432193636078822342855272045714074737369255993115783930109736819090487924888661206532460152000335168141422972804477193676562839111651217927275006871239204489224560659499951882162445251561519251541248698539440557530254984069771032438283335078495458321119998635017531513927437392901084739392972242542692195276630589584769378343518462089531228431076626920567680291911716197358785828771504571705365988485439338455687452361582509297690532338080100239588158759601890869057946746760040728484613767290873389593701930186035809192800969562487800035954203504649282600218351160276500359007615300515757508898779709877246512623459434858447146969974708619341633908471726486305914339279858862338017846384694050699293616338270067608418255741154878091279432910863846947853495266842413245686736164003947230214150059728260677166998592152224446922722452662753747553137462434046326231320967634891045845244598715834085735563556630887023572750027903905856709684257476157704227887757124631483082575613673921608702672850353548863884440900066221903279112207312376948419523363518890952580963345764362987689019978287277952578086509868522185854654213618794096811802407819350928688707440238724062879588975043085326106396878515638060391081322698344181591025607591793497200486019243990420559792338398268709614517166098033509667819207870694670445052964510380048754656246144268720559930338804756155067939792354864468392917295248902411941414395004555151105274496092565798501994597445334832292324136115789201898749628600240683858562935279953952763525046396599512968205865885738109875833622381771863255911903200835095037665281452075692485455860174792407834667524564755230285139131803587488375127641654069323952591318391877310092234823466809945560512533544279271701158598689104477558802992722469475457343409971488630110503021626875573525751934778139174961643122972879514029762422373759765314287522934382892975362750581751132453671903657267884376036661342843964219541887566119884579693381298937901406563419516192474661306516511725267669323609419087733340690450558165213454487297074862553371635331581087738855095802330159523967268648400713750438601474834235330437085390227380449117576988953079133406811397562588492545284394178380123683157531767298914314054054266990963190681914906510208311130377896728687657942468534543011606591877413631321762198303416289445543557360297724554881458955418542210450999122832422240671256313535578227419398806196547685103176356379705213628453476087647191624882510939310918226676457010246503649076887174058871800489062109983884602249535444174934077227481562851572448302453765047321847532378940907877851143226417167207865271313548633238344810072504878677344464081608772771449481960020157980944682498260587592717763415996642278042914584234546121362414297976133124187195363825151679773423909103521409278990450682793503356406863155407032340671391506418478690860575345041992163225409754423164352434991500264140292956147699696135281539726892935453106876852742287916824480432608704463478624349069682252057662741054671106465204178936003473244014157701024500525111785668386033963806047470587868478677866005941018778147625395184562630317637358327298263546058429323574557986170934591291167804403130173996890297165284394825291332954976005579513856860519351140890707453397241952980145879886978105344437928598187338219021315887361960592742773315472002853239408397789239344686421601638980426095208234422381784439647101937884365289752765795163630751895935377213417194091471158931428412311647990508749331887496749119177625623516517274409813373547097884797343831223446489714488277146796704707528417151005177758584705360452208655868043224502154261560328310031904546602778549929217020935777114230574433742647869213136054226574013575310385064398286790589577389246677367491487536907339515858623562466719142440369524996637703770985252803613777816346232435468253332516733074960201249413720878443642861735790578481437239478915479884748129025766655262300741908124515803036992955037147164379926226167619218381593549727846720152665688420845010280046156910091842431075734179979783749230883487520580468055061820398994057860895824863813246156474145956952950257440684073664889904226040560602079193578678161126084813574082600007829756702414971176685873724094152073889241847585711465880388970146267953322313509070101452690127057210105779022277343195276782480856529188340361561348550929855796859839712262320837313667484421485838926042660191699304201533766491830909468499432157653212172381580140823486192736058717317466163847683264531184832681703369211623877310612543643962337345035839522545922383698407681015377194206583397155612108653083191645988670212720030129762880942895247190983775045851394570956574880254102538475085951906008554776417154677487089697871874700602935649391122591469261263511710087692787102960769193239654139233235563061366787913078401419567070881356320830880213526970725503189214741870398652371928414023072687812809490256436240867996383840921607586376700609603866327956945454200216914054497140193729992601076381319927344795034858657960779221356583223536408862834118876504409798505054654654340618816822304137332216455898377580961438429059850323819755090293443799336410337513679189169504960056663576720505647998532197059594358470817219206875917266453374606287085863099056469497814288864827362802618046077223206196839764684021703896226885242604920443377925672122905761457061866837202922236817090556108848373230317984179859950962146699137111763195890862038319018061032059854841643758537559118461458584528636882655994870662977243594811242593731963776359913818723798612690418725118495457562018917042825869646026822042170164938176626617811529465195189729743965577948535312848582920828318037995320941088406331146501838211945555989460999499266195976995452899102082423620367295339270261124959008335815158764211599728620891355269369880777066243495576565602414466461313951949093817390758101911627280585346834490256559339783660736784597741875456385440960717762071157152054663841375517012505847417609854817536768451158381471816080654008826680154523338651980071906453012628196539678057912794047592200584891296694888963217168962672527132555070744099176536736468323874720058609140609125633443807501075614691579295085050547070656868116338927157780046853815222838857263960105057058243307334956179789792708461912072633112251197557082335365279102007024268161463397894521512991183827518360244054304112902681963889699612182085241809012781165396831190827645273329640058674414682090257661164073139455063771453745016860874539922946234522818828837496340942470763000717491170722821267660042795470521180204638104755668948924724039745847695888633985075452182680439794593084627425060093791510138248701420978485908934470218315026316537964710422414848508953653174885833202738382864411676022315464960073515324718648310766369966940592029950073626018052003382192830878675968406343999421251846765507910757723562376860823556630936746998493392075127302143459749574953145597189522407961223123553409134909993234776071487196398726480243384457525538908352522657598897188751829310731782947814194860357498926797639375692780897942649640984709512814089650303781983675097553142351844585048052518999108785885084128715673248602784852202625103212672429865661527695246604319778947900124911930886867136656012397500815427149001629595311461521909491378190818735821252571605128316359578846573762774931071481719546509212499934584164870580273389017244188393954501649198066523773617773603148318070338133033338972591051988165809681695447229880713273435088736826826770722034381291341169095581164119393086610843233071610442261294455334123815147843960365561837877205018038913232670227465189079832876850186118464035832178304638050199921558206268148596626835738621220408323149112415323716735712682952546582245705117230412997688385500025680894367542856812391925356804836843226527830989696461401860946353979452432274274964920385141721059486526602561621700757001951723017250514112376787574823102663139662690924447844096274279748103136259643012732398383704025649960014459222375208937377135086960530601311256939481230368773686301164318462671604583327430309190082530180667483584749343753766607113653497482984301901089950970913459388149100613517153938432877737734771821280254447470438819087196192237223304078940382387097398511730500403660027910360212920875397242062759420082766066071073341577474795254519604098132952303380378722701930037663925484469314023785380625108348136087828800437117299693827825611561606438539305841566582411873588437947478804984065159864435345076088007997181939891110871504386314503554946209094365654392650941459734437752499801655609105275249481281179902173573014492328741267556064260298802557836413692016016617669748043542306072551697935735746825089695874826948731881544269818023315400606701953197215378857346583566060188867877883402696009264891214523761321850570390767193931751146569912952896078615794446670090410139420800171065178067033197994516163258550311481959276610659074044524985800229299228966543054067588746481449229311460408549457355981220577363061921476421011073334112714243475459628100874153150699878674569108206416345365903297922921012380381007569387269116011092957834426860655788441475726921085179645009860474953277920185440079838954484886707511916628030508605658217777697998220345113976466651924617025416334341044221145733295408504392807954396151307885264705378477983896727073836856837620235140207456693911087053479132411488788790158615971668352740445806936367038922357337268462210096916521348168176682743961853038638673061119918119187716359164169444571406379455424290874419543670817530677676541875022056511296774022477450002728679040664986471899711013362194181815184472591061447488424875027349454680510566851684048259975803596168445168373243003982331546478158041588277779460034850719864600409493977640398092361316514907508342421422902139051990165573319189692423186174767104600600148134265471179386165793927640354534589543137690424787165731974481919188300904505418400996882308154835099253666611841538312312998231819699109801429636853713921345260197299766841937950906406548032602340054884977654139891095815240233234467133442021495220744851782237688425688959031252711264762708767338357468592642121004081137201237521417098050822536684007206712882631152148490890523814401714196984944804679489675174776184049404631094279956737122753825775748085792754776105710867256129753274940581094794847870606374893196903901621417734653625666077403420493919792655024777067311768016577482896998471910716852097033010898010186445031926303162374116046753551168125391955617905343365937938089282722859914768508181201172867540470665654742948597222563280678451402182626324367627789943262937705557087265579856057809551086296577566990613910362180278129785662042808063521713920147250640452588776439271155252643537150490630447948841296952179190073624651786379689854808868529795126378890858504242865541942872273056884845871457476143153314718677063731935291546180195217512217731081929119956154340451468735032164383282109523299782542573539172290016513396984876017270183825894574556108791029901424155246809340828709852267349158535664375031049444588500491485483180968913365990395654771006567422899781917903880556974077808484614702490694200671838213724208851280759884631990288078363988372431080994688444143679764701359755518252438059867085825863935412502662727657199067541943193285433812175474512578521148274909532958863395251951656595291321511692041940837930800910247884453729889188341633145491480408091982281173152722432780262445509782321678235044878025855705718538907483505898554256099969620966130090965658274503055056304302205589701600825504127756601491826803917988196135982155843447379573702413895350487644347515252532802411844463140907913400762357692797913754689226884736149676856077439534956014628788995262183121832769384699326248204543358092547676462813616252866002903472891134064144250270608421664146813965398780967700813244277543465345874410359433720560138908410081960804386664051419536311000388461950017124667515147440366134559808879788950521931999172295176273037788753694443728709322519027105308073803344250662527867491541720713646960403245267328210151103865256574620291837156086589496185518608531139968035120710186676603591051690907519688103777386210264556171179825957862984636184672745364037121364433025001866944845893062929771460245708428537857217531391554082579635931071315989384210450732463188365244921677970430073450551852731279385366659239344190124417726744852219108768490083445392411318877611652510551507575859804011711680935050414745944483162589233546375855776767002031155304479918355861115050998041016086837193337357975553651024649345386759740045299465443507262891914362838579825472072300373383314140809137622653162428553463542462300076344744853432331717707644082936407500448460168077342282673654690211705120825871739934721949817495250924250726925642789857144682543911295027774569440308524614307137969039330836064040018859177956858262686679114699075516215713058458238926200549247748286076368766901533212848354177289041468683550109704090524777537298208489933703135462881564099431841848525123082824584262118062924394370484670057600731014483833794809349939449513215416659281982338744013219843698812101653169164961442714143245482547387629724500143589118257677641415351286224243126644694731445894464907012370826536309474640534463336976668148365069960714298144682556320014978368933051669087408158855984456703270505669128365644980537540195891176195932619380439852108327520574536278469874845019532470297825798400478093569804309947662567686031949573083415953921209066913357170933142936795525992559921024120101313417481679563312303503160869343508168983778370718810001468711081456752658660638884619648395491000804102621263814323434264516893555329375430827852957296723644138547682740396981624166189947325058111521969662924312118815724801397142272873868447289013964235982967010968586926180105408495917618647401412474267934889758834498858014189818668698566257552425115133889558784816299389496397417033311988726873131528027212434926334053497309720298910228004908373296479534316950778781520725900232954876062179302157414640607899306414205889014396961918180959152949138198462355194937194456512982188462378681558730644868873850415529812634340472775726538865787580204790312618484890551873888725947776814785942928251702376169625542673210477924328163129048539475711728834200324746845178811691006259463580546059295237249941449674655889780033821763324072532714591843213015032197235641764896047227129055747346130958417293148044805889632654064150538697516962493630444716415940433176064306038719972147798773892848955893028582296350937617680827682919135911466714042777926514452512292960800340786722340541320649179899342782139190630921424731548524409813721719049277450147536299714482855123942922188882872165823371928562075908049597357931836592697073626866846662967056473414696012289054649334216959657450094861720796723399048221426950965351576190183628497897472913885974861195482287233272330631073272906238657963912961558017968672419636993357507327926654753450832552123516981295456326013018790230598241273242036157017241368719980083222349838069075595238052192860532054572107246906693777913015221780039950986575108200809776528168571461898916911635158704269356305188550156111768320987228764381341870572861116475331926890642183771521971835146026562830353905646181730936806570256764236706591127446751335707108810195680022570551336875595585544273574341544072591447472845400028098970682853724683437493734410851193196097453241753890472845085958747424602856097878528545187775407997154621177303031339100172669288976201057951121885825950956918526102107090036450824200069159718001599236330078833562106398636742717199392085787672934536134885946613681541796565247637961760715070517432423497976271253568381906775894367733653120631963151801986593531388967149711435973775550871188943713859848091954630234668612328899619278198946718625627630057172226198717255668223923904890768146987080707751220177091609648770120434768279559338063610192024519833268119705454153308595651538813921780342498141963164905511260143454931265701556562158264090824648351579043435702893453635054819012476149728370681444278505199006903212896548769236882909068546671150995589760754891507625492685131792418299782542728547778448453461101792924207968158552174577602546294984095234678192840960476386210024350185606609410667690932843429705931268359659552164788030824711745176610929643714782697763464025941436376119883442043651405819785395750254618094489169401030013543819259121122854238722988776519602373221724050916405650079014770648187623734031750235491964410642041932852871687936595663020518293155034697291267571007407824355433018154958785858475434507850904892164905683726569122392614760515053956908698779269999187649883835020011034268265026969018909896424000140656288941654229991152436190033893023874485198177367035859326595056483973691102528528964240238162690169769797872053924417306882145869496570622068064152567048641672910089034466482148259576598883675676559305620962774588428084766784414116997805736320364832583212662721001886011390639353175491376666606897406774841966431435260003955902744717191497660803060479889578097868601071357264140408520715503208109783638446056461520984027952828516557607719738796731794525772221096980949945273561032910012006494033523485945355873048645021280439047580017537220142423121774893185173329466211269176408088586862489556539533649460684315877915679859150495016361992776208222457743409154600833608278358758581453060018874654806158469935209424129086588097007658952952942711111315126687583428566179129561920536410044079683799872613222554918639288601507650870472774003701806254718086876319171696486793614727732979757046379755146280328266354020758820986430077712971580486344586381703953969346321181169192104636494630154711153619666625612026906439506854218786812240993780516646058740408377608389717211889712944024277671668754396479044681943854146770948657994287785792979803623008497859770742430848349599307423855758769983547158184688235373094032850678988103388739359527893501071404914173640804862181613420873011412458842231120289553227515291208261892442680444656692441590713999797893022991343828360615540663044391445778085139945599094074239762612456772578548076328639557450793670916499825916076795474644981946658952214795605488453772955033488494865214498815920404443957690438775163101524744668822878389148182995253640866407630244850888822773889814481442580382544887918223306200047057093191744017116590681555324789182407775866665100435926469674592435181453789517497170913007733429647167891477189372321676652882834647772070310297542094397523932163345722780599675988114774549208494809224706159973495073321478676741593210626463245533420320135047805255300115734651077808653087217338440136071977085011680526600480673446362453506269853330351107802011024714941904163599640702033334178009708280027243676240239632839833190086800100058785505242035602151193311212381125806324264054598875454442839222700398014359114677186893678295446859099994129657734990682460457444371064184692311755752541422151199708105198384237430802858411911034947006709981625809080232934922144135663658449085571277501979917843893240809260006508919841301015540362593229032108072689825169873993483717822344427052288062898849905137744969579079629178617645467526962720055032628667023552336797726063643852366606175531613341317196197864392121268769055177347789594578286793751698667802479410433905992805940732000255661814631962700778143239536096104701729340494466620042894434699772502523362436113819044501776630394960920395546918993072887803159200038513497548607143872818383086380817680722559842374631006953530567999908324197175226060014824313203037348268169926095288097144322551789684890648663457922550958843785072651487101659277551662918941361681291844882428584914633290399404985318303936955530378939063462556418941415029264319234049598323408367493224900433835477731924409751183050397065819857193854143426088211957823771085106209820471610682278689620969757921676775517314616530623257688107672947682658597173652390580624930436511108825021373017722979145548745526360319873068471900353622658246145403431408136194441206504994577360905054778745696917584830341379595574153259059234508991895104113725321454131921375733178112506607565288638393093800774772362121100123864093486021508415014831723894064495994297265569568730807876269888569731031755846775128444574553397997813792654431921834421363070757915775647019542518885598183471508749639882165975381022375915486437492344074425523139962629180384112629956456129401567847766137658011123670830980985007918997025977030110831796067951569965572007575902702144061044911452833206811316731088885223390097768175624261207932093558751202518412009102502007023386813814634972054308310984171324107369665562496654937381813957760624019775704510736176400350162938954403024939727373854471651438233295189222680764895418150428010246315726137001519913632525676047478506575714031274113457537113188910649703107854178914089554130455302878654582163342569616634049525997099279447905529226719538257258587393274130154916630672048328356066972804687652587441088521105876230763044801393780365032533142790361470708396485178111545244300098858104533794718403395346580859879503012075351566479135465214976248731740221718399842254842989306171139607700220638169440749741888701799889068347341403175965274567786320642727227656038739437174585149316301185870988806202046350716742616122073255219743263265181032576138673817502982223737574646083182965575011782438275471222775799172556149461261270904660505267167223932500389201907340426107384301197825454396941178367831034191888309584133979272805382546626473199829417047335138373106220916975733273156589158399416510189572510284174693874373753133185652978668579739303451944894907199782629217544087253869509690256364913361662649103302968370399404779514747755870330411967687050772107617321483418530312001893714042946479603145311350066416700023524669310259433718669444400963997152321649187814086836681368125870117467589428150519860600640710086475174958709157959905729767405260915067140443398013208738176994367507976640722447299842158803184305897947861652814216645807199421852517436374675233515223073367877374551529844461509573192306345037036313453322168768871805379018319904446550904855025013177324986195190433459157524173696890570121205948432263283565890164054944492494351263003114712693604264490550542501889653141667181313000917724453608551190885106698104041467588804923153077182674791076853804068398921227580309702149594473809868273473312340587938036654043442190717164560665129378355602095649072482648351965488556846296156897637715040962462010579776075850857781777376501426558909658580563413806753500690392254667257452261154877591099601883907846796078591115005269420617357121701976371785105596442959618559023720438391967628002735526981355323275637931672939282477623932022778544033100210379546063147023481872886415248211452729969152894850131780271188121472084090813830635493161325791646756216819484619434213399002311094007368175499040105370285459703462333608878126345166364275991309512708416171091252888271665752450769886751300197665033144009722236940513663503005517281624212062955587593905225204836125872420287156842497966510035381857017390496082026717117234446921374861682933593570817241106919584808267765255054877674327988929228526399335672320294573301001520843029197879539804218174400897658113932684317529388849754954547596665544635912594206180442533467344212032289410055743489598571841851117728886296883795457231078767117936640524239691929950908446099602437176001623544091050434889834488714558740591334803757508108213516471546244015687292725425961643005362084352528358998024484653362422817109599601827699239352698885776941029330533541192182033534815267864184300550859195484210442525809817478579086995239359572577878359857446016518293777772864837474595440203648840299944295003769029699812826670409448793305461680584150168511183561532408798094923463652836206847759544700761192784929675948448992774264756317901512710819515240377741714381578912318556683115599448809641013883431262041387895097129237574051734778907972947159713776030845364618737701437543788226417693517009464573693269163629836955181552453496432755298484707463786288236903178335220459845956025360838502442970340189970392285865395671330968107511680246013657146012292592726485990026067413336342912103988713654170966139605163811546859346092725013904046570958813090147586439690356080526002237067236208245581181104709820327435557479421048052102582945221727461079444883918690338568109856888473513216220902224916728774326675355246632875935193968645350659198408253015704540743454421175757722114992310792258682019154490386219338234855437019047513801817401966723441526965608853765796515819930902713986177822928103138866085869256177002823453937381750059810088988044992163878606494194942003728500483586733358419306065079413977546321632519557047405447758733069812177634710857655153708861398629124189882384961710471521696214316529809386737702792483019120104057983961636647935371498532955879072997143024922657859098831534282291039354692521854358932834033079077749660374347639359192129174608455854501478303286948350836377823786093757486840385379733704303180151630575572859840539517606670680890940314761502410867637720572494875842467283500906724147538683524285131521824679772373745705655291821841553636624574535994728495285140266712799463114681763773933801244847002709448323561838029381738291966632458552074655518389534127169628384377734519284699241471083404269760700018182204794404287701819691216381554007876115119366692872982493573130991180381561849948696022256167794093781010683628532555609969925503390052027633657135364055586665400097666209196786378997827923885723733291301616727422693871941122400000852137552752735919034668718884001271277947100817035228006279688274415192053253373855168093694549786789710733924396709597311514345638326570413189498231548126537259395975675283269228288437973242922424415919423396209042686615963781323856273642608141820472118230036648391889539721693265027529331515394513993428691615334165115485101112923744798941721691321577793251660840054500252718711487093865529781654778907992517365552078125868472676816797487586252427646134096661776029377149391080559672415449995426515067850638413525415089100674005993952074787337038441672320733134525556389880446580080915750147942037139997249753619127876102451083024162313175339423890521136479018002018284869981683123004832474627600914139214330016395652367362789835704364262039618514932181766121720953319121045210670266874090641919066784531915512931161152675968995662200513952927276870774262354013616729425606192170846845084136763603683726050134796690309333172432767501077016178941879137036576410003615620374169634228827967205498547282836561829082987166479810334518370009378884652334426945447921995955901150236225598284371072480043530582240830473314363170265028896465972017758373959256362854059666662550126674583687965776797215056816760067845756991797032721491730412298066456848713671526919843460994186809763222427245889347264252765604238690439311764137594322453250858384001622021750225328190551116273623414797841749098958001' ) ; diff --git a/test/src/integer/arithmetic/ipown.js b/test/src/integer/arithmetic/ipown.js index 8e1e3e7..70d37fd 100644 --- a/test/src/integer/arithmetic/ipown.js +++ b/test/src/integer/arithmetic/ipown.js @@ -10,6 +10,21 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `ipown(${A},${B}) = ${C}` ; +test( macro , '0' , 0 , '1' ) ; +test( macro , '0' , 1 , '0' ) ; +test( macro , '0' , 3 , '0' ) ; +test( macro , '0' , 7 , '0' ) ; +test( macro , '0' , 9 , '0' ) ; +test( macro , '0' , 11 , '0' ) ; +test( macro , '0' , 17 , '0' ) ; +test( macro , '0' , 22 , '0' ) ; +test( macro , '0' , 24 , '0' ) ; +test( macro , '0' , 27 , '0' ) ; +test( macro , '0' , 29 , '0' ) ; +test( macro , '0' , 1234 , '0' ) ; +test( macro , '0' , 5678 , '0' ) ; +test( macro , '1' , 0 , '1' ) ; +test( macro , '-1' , 0 , '1' ) ; test( macro , '1' , 1 , '1' ) ; test( macro , '-1' , 1 , '-1' ) ; test( macro , '1' , 3 , '1' ) ; @@ -34,6 +49,8 @@ test( macro , '1' , 1234 , '1' ) ; test( macro , '-1' , 1234 , '1' ) ; test( macro , '1' , 5678 , '1' ) ; test( macro , '-1' , 5678 , '1' ) ; +test( macro , '3' , 0 , '1' ) ; +test( macro , '-3' , 0 , '1' ) ; test( macro , '3' , 1 , '3' ) ; test( macro , '-3' , 1 , '-3' ) ; test( macro , '3' , 3 , '27' ) ; @@ -58,6 +75,8 @@ test( macro , '3' , 1234 , '5856367529932071269049608726415028439757143623443063 test( macro , '-3' , 1234 , '5856367529932071269049608726415028439757143623443063785468784843536946634255003858796842453459905186846046851774292445753149532138648409140561593823222428559200283816367593571556942770711203894947318922509986128995034233177140247221695941679146171215675158154358685224309073135481486540427499644363484815218991488230440687359021965115067678545212365725678242878485920885436927030372580147256775788882374301866845441065076726499613479868210410548366056401445912760529623658838510267592199677099676046090140514526228797525926977514932394954796457727416398081482661262807288229389463819882569' ) ; test( macro , '3' , 5678 , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; test( macro , '-3' , 5678 , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; +test( macro , '7' , 0 , '1' ) ; +test( macro , '-7' , 0 , '1' ) ; test( macro , '7' , 1 , '7' ) ; test( macro , '-7' , 1 , '-7' ) ; test( macro , '7' , 3 , '343' ) ; @@ -82,6 +101,8 @@ test( macro , '7' , 1234 , '7095473421502801124010459514149892907042028920036525 test( macro , '-7' , 1234 , '70954734215028011240104595141498929070420289200365254864883100224459061531095964535961424752183918983389834714345883085722594630104327570484382813454950959834721299254363358098967399048133489131401375954827777487240689332659684949614116231197346793510695402301156840458057925504143947679213040737846060014251249690928324441226158708348216074516368113070768675494487327714367821662938661080440834970823376650216081882744143161592962823478851621834726159007802788609981541818975600270503709811145869971874252832721423453899821462438727851069669041332053765106227148570291872998008674128627485981069824533343176007316751497280494057995201432198045575691194828311578763776024467116028227768366827683004790939265568398432923069244698164607404132404210543306184313774389935234011995625090611727226388755028092996618090667295922698497975515840710550500258575437750076719351206138149202280453034232757583405474400100672191700332560347912741669538744924043142095605796598736664375513698661239721232174697654768024941266796370339939780641017369634940849' ) ; test( macro , '7' , 5678 , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; test( macro , '-7' , 5678 , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; +test( macro , '9' , 0 , '1' ) ; +test( macro , '-9' , 0 , '1' ) ; test( macro , '9' , 1 , '9' ) ; test( macro , '-9' , 1 , '-9' ) ; test( macro , '9' , 3 , '729' ) ; @@ -106,6 +127,8 @@ test( macro , '9' , 1234 , '3429704064564266967142065932165178236257925690701030 test( macro , '-9' , 1234 , '34297040645642669671420659321651782362579256907010306825298584320017224909034295065159266732166824736588968016033381896847023243099736344433210097854593507161679850671932155017203599500044609298345843661231598352934672574000630755280719247078658076071069504371210453795997193380141459822909472292250049962822082559318856309665763195373936160408297178132724501864611562349337209033935902601202229170588203644970751513231529370646017342084334943445632338625406001819417100075123659123153934372275946883429572960429182400235833979860757127508599030945874737763438221696224240363286973695769026948553357192210469914347532288838793872337455361841599848707950096810738215169875752378946944496071085184269469689190048414428631904103213703000348839546159132360494448224371361413782868923322232033859714664315449006669237525993661192066307764695656412997620762143868465614936957887460078238297229855499508020184426374192732713213787351302551235717525464575349122336444905826195262672337776865803043472081042136085365758586709594709588874980188963624351301943558778230597943000313246648597648327615323559497393534626812152826795197456515853598831232826676446660986298958124148320950039761' ) ; test( macro , '9' , 5678 , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; test( macro , '-9' , 5678 , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; +test( macro , '11' , 0 , '1' ) ; +test( macro , '-11' , 0 , '1' ) ; test( macro , '11' , 1 , '11' ) ; test( macro , '-11' , 1 , '-11' ) ; test( macro , '11' , 3 , '1331' ) ; @@ -130,6 +153,8 @@ test( macro , '11' , 1234 , '119832186933538662676926843591940005024338938454807 test( macro , '-11' , 1234 , '11983218693353866267692684359194000502433893845480769112172251205188147262289354049461429172488569661122876033605557421170789272790102054304092511689341645557874249802952871767405284987003806187594928847518777345850099915863264078051816617440620669835924344622459557434141694081118718006962588499405658476477809584051185924057025464163718833076869861008662963948775457304791091957146272768229564713967630639094659383688489828857998385412406001934065445969895732784144880158564496904866299896753946773061123748947095350178138399329492711931118102507186743010708942286629969813642204878306198565914755078983880064808436574100979762259478493960140042607880569732036310833444310215790281432505720437714904537904767412626253808859682743392379188494787465177304942343204339576610614978528053711125948630650946573610344095512008508992625585490923211491629695497720992580178320146672152256706875056491678710723022609578354722578101061602454247010516142562468962308895384683137775859149496917496435957009023897662611266558969297452444733968450168403551460556237438931715240285963118359275426150086656493777954817140258639584026557409436805416478575578840073580647683266895284248911727092735184253994397858925804638577468716770187699083797737507027525458211673613162334364880959262660197607632441' ) ; test( macro , '11' , 5678 , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; test( macro , '-11' , 5678 , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; +test( macro , '17' , 0 , '1' ) ; +test( macro , '-17' , 0 , '1' ) ; test( macro , '17' , 1 , '17' ) ; test( macro , '-17' , 1 , '-17' ) ; test( macro , '17' , 3 , '4913' ) ; @@ -154,6 +179,8 @@ test( macro , '17' , 1234 , '236575071919541870095993617343922148833184955443344 test( macro , '-17' , 1234 , '2365750719195418700959936173439221488331849554433443272309037789270912117133978206777246165583614280813095899236078594286552848472860457643580615017539717857048793304325119681053421007826013802905479250885212839793760101742612296877478711932287387420109262614158330630362237192202151123468592153560375572873151822947436950242912080157786888545384847518810574795754691976973525697429044294851654461713242307440541746159573098284837473930094049306091573440131975480886198509578012017892791103610676499734889373927818577887242310104551008535893775377108954649457429588226369074071331951078940909959401201709240381177136083510255280740550175339832084572676328794889199725393235934601424964165016988318210336776289444267654575587266337284861333685818972410304844379843215873568783484299285855710739185984313729162892241201484427793478780366719828354369198742105822244711994746358620164097425507697349511284930229811697252220792819650825560346717292110648932265899796733644188721108873119505172872099646531092906043987147572277125354950545394615532850018465975565730363029206743959014462690377536775695776234592924640448812639061038539121473894456471681658974744379159553490945761899997224178778022075766625329855978704429033291722506766694214979844269409520158332260044608648267713490710210601126307243035021020433002092628988274703326841291915973218749244960354639698612598420531573152776417281665548298330678827921029701549454503621900176615327265802134551424622450618795022965384601079468969005231566796416059429914871329' ) ; test( macro , '17' , 5678 , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; test( macro , '-17' , 5678 , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; +test( macro , '22' , 0 , '1' ) ; +test( macro , '-22' , 0 , '1' ) ; test( macro , '22' , 1 , '22' ) ; test( macro , '-22' , 1 , '-22' ) ; test( macro , '22' , 3 , '10648' ) ; @@ -178,6 +205,8 @@ test( macro , '22' , 1234 , '354477059642766670493367082551405865684028916703343 test( macro , '-22' , 1234 , '3544770596427666704933670825514058656840289167033434034813245091750883162270446675859397841986880345238161021960809170374322988214534191585053363506454126462213757244784862172250548800355120891239982462620296434675754206726427100313150523472266151826654642293138772262710079764335312817589977974888511704681598808553789636057965795110640986410281597921902662990963638641278281253781683699119666661945433104346601274970659774893661365968347766707077408549681767565454620843792569318870542401828729517938364411892509820193464655128629664809734022850771731500407885408815335930002147542787627415049845408189806745107445132307539157002401311183617949986742914159513317593667951549591942294545010053084686720365553135398975223690151357594502438362943103211174888290826883518964968656962099365383745446040058868947352605005471883468803102923319135160194367582819156826127917537651473185148386098880353425069599001396856273342875688276177114278359156141134393159654758637663041409089129911594364800818125391217718986756939362789014002086984204053324062930069928284955781180175025313587891151051182531528712430068603601480445127763661852050046817311966022046189931948955290807404661752447837636846919052423707195121151844536365697282035619507227238494415828142354268295050195101293247644044457267714935452707723243836958166570458923766194943739329318567831418083291367602614610628703776858094904109993034272453854415127335371407800891291417423473199819581953311554881626790599515656538382928587235599730899217327975918421664202906795230685640597210322674275525454392606193005351353121325240801341129111396762030413616120113277356128432334929643219670987389108486144' ) ; test( macro , '22' , 5678 , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; test( macro , '-22' , 5678 , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; +test( macro , '24' , 0 , '1' ) ; +test( macro , '-24' , 0 , '1' ) ; test( macro , '24' , 1 , '24' ) ; test( macro , '-24' , 1 , '-24' ) ; test( macro , '24' , 3 , '13824' ) ; @@ -202,6 +231,8 @@ test( macro , '24' , 1234 , '151590600073425387047449072838201737923790545622778 test( macro , '-24' , 1234 , '151590600073425387047449072838201737923790545622778515405542489295365280374802003092345748753681766769342781749881287249346464958055559009581857595198530089819230481306713155507019243375785757736393010981297487306518434496622971579086045332205893329146303230768285811255525374621247345141815714309058936253285898983419720608226966436915189967268919455309262250618242751360361248909034678867178267283386443504378478143195886936482599662011569578168577981039494263767900563281750273077550310292671674973097829744745890473331477918697103083690536733167341918362953786259364594330084180149751256516756030378850936663791973239733978417672189517102102223884258181339830461602957890003315317105400603981501400219540598427784828262715802695138377182060865841593833485720205274139142676664443049548450410277812263367703519777502927932788452627831274636998616672291216489574557549335055172197580577132711118453026428882649878235139444805201982069512799047951007377619920034219848761549071361411729427628794049204602980944425540332659900016630759739316868023749785700349807321646264995322781924302276013058208345925931493883895500465669887594678839788578637461303074752727476500990640364376722701859400316730559885693050235239674548455869510362677791910042980988146640583541719495331021584874341075294784062883967560447377347188388603280434006674600263225696860648015867438392697049466565415507219522458255386701717251429282388492292922044650917640291089769306296653188826596134691225361787940784064160312363042310597352769798472903809450672123731170381463659456013676278088123310449702495131987916252551416683646406232220563855513976356100126013273624446723135664155744771247145879322648352616000381514511103819776' ) ; test( macro , '24' , 5678 , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; test( macro , '-24' , 5678 , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; +test( macro , '27' , 0 , '1' ) ; +test( macro , '-27' , 0 , '1' ) ; test( macro , '27' , 1 , '27' ) ; test( macro , '-27' , 1 , '-27' ) ; test( macro , '27' , 3 , '19683' ) ; @@ -226,6 +257,8 @@ test( macro , '27' , 1234 , '200856075209902212199811223498516329401019153294330 test( macro , '-27' , 1234 , '200856075209902212199811223498516329401019153294330654484899457135661710831649025094793443576863417869675999053574959337346792532217485737202817800641723197630343724422691567676966750017719674361721564299756255063995170624987815873886816573528036690980712399472082918987467608319915320632750007215671073941033733822406638067457070592416925055525002249965214978226439419675794443664397992725836030753072150525500182271105668883387299438014566998450801673929744863349108063057027323538841038850392906331064754828529624866950550712400849201192591205142296901842010465055290151680972126095024443830456846851602321575873316021498267598562024770678289890230706320997870461736064158216930272006483331205888383426585499224333788304253250735446206878459830691428518801804316734865056012563110060177249063533223360212951908142458456167777780005320459640618276526423350311574957115723697862633038912990076590485058168720523332363832907739630745212612829631298739740918292687323963984732777515115303964140679392026532299969353302111690876222512591852054954749110470134966527453125805201071472068728012702260328777663337721407575454838256471452852284288283640249611394712320213997254539391537655386427263371372214172403860536953046790124191276197581019979325589039334200287751090718265018203205058843589368322867283544158866611521312017186795565242663733214746314148048347376472660469372081324221562030477828367398702782252799482995882978202357840004609118497407774448098166472475681019210778338607385302368427582889110199771043940039384173696648402793417875142304690934448344767850874922126620454594771669567183452729544713864889437820573063999170931037181075406666631149358312284169719891882097692840499902508546688352472767932029187479332141883194288344509584921993462900826009' ) ; test( macro , '27' , 5678 , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; test( macro , '-27' , 5678 , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; +test( macro , '29' , 0 , '1' ) ; +test( macro , '-29' , 0 , '1' ) ; test( macro , '29' , 1 , '29' ) ; test( macro , '-29' , 1 , '-29' ) ; test( macro , '29' , 3 , '24389' ) ; @@ -250,6 +283,8 @@ test( macro , '29' , 1234 , '397309918804952724322064713918779718075426736279577 test( macro , '-29' , 1234 , '39730991880495272432206471391877971807542673627957704904437675569298014672895070646102535214916047201597057604326381566232240717146352905189648219707403914660579022999012335291748319902460223265040313524900417222861808879210656981706108411235266301032093577572784389639719581120084786412413811442838338528471340965314240553665532845900842671741344271394471188943084404951380820901385463995110598814337441546368977234557474886215832235597884716646333931698424620615636355660537976497375196427830792301269566792792820200233670131878651690073642956396203530193828971438659013332283684624052196883142348635262157010483447752926525087705971032741588045925402251432696384942322183761498083408303101185212952621515583790502916056759732756688326445700770330618736098784570958650303610518453345373695638406312777059006873348441083653408306117070042611172352888144271588938812215283718988243964723451182501170569555882799635882695185231569905013697274942621016347442475467611094595589653640159813052986283489436916917813443702411392363491760078918071760360736064794346216924583036877713278321020682861527277057026346194702327617123158348328127954077761730411509703210527413729724018291740451232173623681566068132712321584183435235162559116277847790802991789615957113420980884848226115467550693444248836097094675037594634337127844160706154634179432597281415179294940602829040686835658254209377758530578171235783275715264069690583402743872874027236142735859680441203304209066670057316622505879861269271750030338720992453155828397426773289742123912597304182933866285890213055204261259697174309425441282464103760493735120470209861686631467978789655753554085703565573238818516254588594497513866508088253727621898347478665593386957598553232780662697618992458924510409036459946339696264729231292522628108751878543189439881' ) ; test( macro , '29' , 5678 , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; test( macro , '-29' , 5678 , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; +test( macro , '1234' , 0 , '1' ) ; +test( macro , '-1234' , 0 , '1' ) ; test( macro , '1234' , 1 , '1234' ) ; test( macro , '-1234' , 1 , '-1234' ) ; test( macro , '1234' , 3 , '1879080904' ) ; @@ -274,6 +309,8 @@ test( macro , '1234' , 1234 , '4818446778138254370166718603946840666105977023759 test( macro , '-1234' , 1234 , '48184467781382543701667186039468406661059770237590274727670474872867568934066212120125133953550629961484891523453397766904292741725027019645437267985042784717562212455213265145073576158446772320656790521515384533153285495122560467130551068937365382642309092956110550380937116582823950116105467284919886128590021120491211422848352480419801389040432671756358444906225483817656922238136306002774235317628882806945193646888148396110892049431698226720231373322565553173892155104287328274243305595665720786784052656812367125148945799485499060066329553808509237311004983159894774937428752149540862686417306258598574741354798734543908917749037010338607293558391168741173229347205324015819180886782731783732875096308025479318621477536729557178851277749719374746640105570680704597488214460168162719035143192317718562628271959732323123847141889566569180545843169342410738692059982444746465750802950208574020617939255322870389259522352007286309084437654560750826135123276437360339867137662914521505757477954199067061537563338324827971696801982963501680500285473348151566773437596060788388816834765832275133438433921225741018069257650081651893412763515411183995641907421720698187041665296617342826301233824768831086783439617690340317902242011073693697825044232174730876417203502412742085342749470261962000902738749779130464597185957223365845266728739264096596554562810900489160285087089151363421121896616575007056439552166409310603897415780357105218172824045265515881762471530724320743935876223471758489130857861949736325801719247163392163145092104862730777665632878101469684676983177748845758819134783307275384116307332565581471205450219638137864387568253396048525319846029722597087368081615296780675739066314774724547006391416740049175425483980982557830287877118477623151223431159832554386188341940675670910313367805899112248803570997473057794418174867654496284922646065073429519234590181376956226715629044946363751414558194273837719521633486883608951520130473135848525228767697904589545099613408858934772678955107374792767376297292404355699412788887158297703071562694349633862471115563026643188726923335031942038276485070702440112289573556176109970627523424440589934713944485023114357294128614721641112627517540349238220184422744440362721622786094864017694819354467741507712876404983391152695521440373975295468154208059821687654408426427370963930322531227395895396783921477437273314199002421808939747302217153865116186806351980760710239964563379901328372415061933640351961853616394184876278706277214297206989695471340253866298118966493903627998818702216683968716037963198654625001668768390791943686432733286824675468274040171973201059002888713965690564527215419345100503188258777506372065686193271207542007415422109631813074486204833751677472525228744950194297089998305021078379670692156515896561318156670094486647187285361909788624195866103332184213842805429511053631902833667630273693526699848894312061513323511126288640008264849029913769883352116160378319937025276742846457501369721989078408607355941517261584972558483819760496804231338012065441081939772196754109683768808242484290927174759258520839532703010720373548957783991479615682174614219692539567777715560109326389875468292301222743028820913581258063284673412787274389056140124677069653486630962880192937633527058165237839406307326482619493415666561288774929091975803346338652727476500670928651812154306332363280019281880148780695662032811060669099701522746512853264775139655489705043573689252437465482977809592752059272522878781208311791893662451561020284928906469358115442883064671084339186725298116883304622860824362268174217031187839248915211550033719913619980315078125050194505282396757349145204835262063407488072671571413182055277457862261818131387963934879102237121895980689553963436483304289698371277085427432858554859126640569432899045006806292448711540736' ) ; test( macro , '1234' , 5678 , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; test( macro , '-1234' , 5678 , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; +test( macro , '5678' , 0 , '1' ) ; +test( macro , '-5678' , 0 , '1' ) ; test( macro , '5678' , 1 , '5678' ) ; test( macro , '-5678' , 1 , '-5678' ) ; test( macro , '5678' , 3 , '183056925752' ) ; @@ -298,3 +335,133 @@ test( macro , '5678' , 1234 , '4754545701433992331733575256099410533228458670475 test( macro , '-5678' , 1234 , '4754545701433992331733575256099410533228458670475892396381228147140277468895263961376711046431196278059194371543633511738104729515132046647921588948673317858795453334016910038267103044330714716949310557017200499682459199588937173529096934288020024176158267550101701080481254770583881162470132740630857097654899879616282728381172344973405997803534651364288959497452319805334849653833958710102843349430647090705281620494871877782238874887814289734228053896202806354761750369269951229593313010945689761891211258688068066696055485242378613245933537337160634515912577045202472450817451849184207035648874665441200090642213657945355196460821766460825032224534602658525599188179237649065062512691280473121441573617950552334838912754947407978233727886935344811884839323223019614920728343603125258018137019905454492748785128237691020015003872956540230098415206613398448533046207656300960598259213003433022409251838940742693047445967307981951797528065313733200257272599665561813580891071207079215211460876715623293069910550166302272098118272527916433819800298828239405657658438060618142659814207004518209034153803725735869682967280748736992669014651682583009724296577174387664968207473327117061022862388179179805519732871243762549484990925427400006876201981312808033770504367669331073626566876134508721159965417268468228608040850320762590581251984432320891961775899262667965048729940448530756142869126858563901357526390190162408750825956708618281237598759925725241049426257439561800035105159165326290183277107179838103459135561724394264803171431808241820795445711863608586766345039254614846933931024903619561176580056139441625967323631797367126958482941668050957659192162167276197457147030284596116968435975482030070191450200681573163807130339270972064786812978664842441338738386157257657806440916739246453417871760401803525801345778950479694386503103948471086023573572269171237514322085437996393254976781298685048789580780175371793986673922336623057771141110132765327451487041405878107213683772036140143582620048289665134817805568670112167960808287343393646995734701543886022122701209620784296421140764622633595229564449908877625079263109689514631383456799358203288875405982309838110130925886572530681702118654886611249141922200019882428708452245424153239056842500484262106739374720265689912446227419480220842375352629558959175152376134258348738676918576054510702773097564166661175972907344227049028399511499148144890097723715043579731339916022734957419253364608790001408119360562088903660541256901511777417919298919881207626846049705641631114520861910821360106286185700362951871430037373045323853881352479438655780016733428623128344067196426832063335414492412985195862227411532910672295727557475523062269393814283457830004423808768415796967148960731363753261748078031957490406872476713147808646830842062710450030612153443209478241811514340917541321810139916689385477670593954065087892241850261558516392240563145569557862995904133784803099322335109965684092492599160998743520079066871458347318820041040608736708265400811003296782209446700589963177364290058854636845629046307738816633516835431430230362482024920978970474394893679522412954011767859444487351352199067658529260874277691008237384360434306282016514094096768013798147480740509779810560544648455485790268334288880803641971210749525943040368705400269755514646235977621926612279423197054873015209023113609804623745158430744774035859946298137588499302254901538876084525827492824031763727264344218393017853529749735850655796213422695465000659399958563228524294668421953057407346976847682240743601105444694630169017375480155130799595124045461115669497563631224904361329523188370665305938674437690787549882389569867694166936751165216920602732743849889023149711513126398908342104741198863408830097845137505662663458382001009103659839197477448289276824608807661040318889081157573844237090631229284090854577084517143322570965548490565414070261786860900921959546383612702905328456128108405235351119788158687215861758441073018835708344133679077552976919500888460205455433542878586438605353256917018782886441646030034030257088489389720348078103255876838236261154196475758170227577027093408115125958792540599677335099871170489525421378579051844293126380522395565389230525206095904182031294100225265853213565367785174160416143450757600749410617414444540260518189203196008117912073471241250825794798475803391996546423777135418649913067759391180278825562475480988246874450672101428462254341590331425352560400400946802179861512954182324631693500044001899557332925974569520166679673993884049720918350709799494693984974735913494505510527664100089926593875304828031765284659403018738108240944539887468544' ) ; test( macro , '5678' , 5678 , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; test( macro , '-5678' , 5678 , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; +test( macro , '94906265' , 0 , '1' ) ; +test( macro , '-94906265' , 0 , '1' ) ; +test( macro , '94906265' , 1 , '94906265' ) ; +test( macro , '-94906265' , 1 , '-94906265' ) ; +test( macro , '94906265' , 3 , '854839628132734960159625' ) ; +test( macro , '-94906265' , 3 , '-854839628132734960159625' ) ; +test( macro , '94906265' , 7 , '69352828108196345571302714548224840368303639678393515625' ) ; +test( macro , '-94906265' , 7 , '-69352828108196345571302714548224840368303639678393515625' ) ; +test( macro , '94906265' , 9 , '624674733432656449761568667443804634246952025778040170044028517447265625' ) ; +test( macro , '-94906265' , 9 , '-624674733432656449761568667443804634246952025778040170044028517447265625' ) ; +test( macro , '94906265' , 11 , '5626569719411962723650415167546096949953068311825856718044176845859638898840742041015625' ) ; +test( macro , '-94906265' , 11 , '-5626569719411962723650415167546096949953068311825856718044176845859638898840742041015625' ) ; +test( macro , '94906265' , 17 , '4111620266471980471028580099675545097434173613002314680540141671482471036233068045322249236629608058990135835756014486176615142822265625' ) ; +test( macro , '-94906265' , 17 , '-4111620266471980471028580099675545097434173613002314680540141671482471036233068045322249236629608058990135835756014486176615142822265625' ) ; +test( macro , '94906265' , 22 , '31658286807403612933666095532663829606917007814138968876951811776281483501242674522295256018683450991389450689602591230724763634593416216499485344394982531093618869781494140625' ) ; +test( macro , '-94906265' , 22 , '31658286807403612933666095532663829606917007814138968876951811776281483501242674522295256018683450991389450689602591230724763634593416216499485344394982531093618869781494140625' ) ; +test( macro , '94906265' , 24 , '285152493586807715635778250040629704568534899170608577332704172832192470586911307092645490980725710064416470215223489215551076054022142237008690911252732817102771522852071313917636871337890625' ) ; +test( macro , '-94906265' , 24 , '285152493586807715635778250040629704568534899170608577332704172832192470586911307092645490980725710064416470215223489215551076054022142237008690911252732817102771522852071313917636871337890625' ) ; +test( macro , '94906265' , 27 , '243759651578868798217281108206623463735490359085472358472465213305940907210363261308064405033766654095672155830024986524275053959211648897667524575409210697695532573441399310923762601838833141075350344181060791015625' ) ; +test( macro , '-94906265' , 27 , '-243759651578868798217281108206623463735490359085472358472465213305940907210363261308064405033766654095672155830024986524275053959211648897667524575409210697695532573441399310923762601838833141075350344181060791015625' ) ; +test( macro , '94906265' , 29 , '2195591723153842833976375183141740537336638451104209452487233269978099251091719201006853085913307473345723364352547986672429911300801268569150014616303465779606927933392093058172884011727748376587183753730532924272119998931884765625' ) ; +test( macro , '-94906265' , 29 , '-2195591723153842833976375183141740537336638451104209452487233269978099251091719201006853085913307473345723364352547986672429911300801268569150014616303465779606927933392093058172884011727748376587183753730532924272119998931884765625' ) ; +test( macro , '94906265' , 1234 , '9591459179410241572856537719704118795351000902900562305249195472196195265555833412754864166507031793587379195925582803572210371959180740848015702606653712794907807842820287303844298057315437721729780551771436713566743567210455419724786856660298500086372804403816338340320302120440930931829619194880300084268951845577897562834735753784665609019198203233048867661024100257335806608791247129540791927592412584156372409767363191327851323280497596039938628887351085641878361348960836551885434816719856675096140100735098153982014533453294086408481103402371073765234498437942986299185804946033932203517281211025355740639164406513819178508651837986562373156333090579411143890235647767492144926855911961561170349672014614629827840596629153866370535524382716502377298033129875940828099612289849768956366119182226196623644421289199029543705885301848203842046242909504136594099983847607871992398930583777526005880060061677287301121641838813359760623338793918913138129119762743481238358717117820874141719166872107856435512751028932079558518104984922747527693664219154086216948208341876460165162264778277923815846538502672245752434229656583577521062954818225701253649577703058999328419908839977797748333637247291496547242568819156256380939652968563081087936133413669763802314091980457139588435626848957026334101428382680905361934063504702859864753961075493938097121116859339830550708349481985667854659071598612299339127950437953067708898374986402646559951120320721708316727933224792697639478435468027888366917714894730680032991635257046230944591272236530617356025218569172482915774764506872033088367335012521246964352262715392596661114331434581419942425209861303052103159737141838118887593079659533118979010073029109419153504531772178157803880524448253232397504700393645418278010150165092760716226444484244727105637368962191673677518823763517102430372508776552119355215943188635023271972752127662635880598372673204814450697064559754199549908021939030958872733672399702043041508144639801430320943357267841707000400404222832758589098605032942287405982133506381460750004675066342262085479385836480909763864598878090750329455982787911478900279885781537417672577623574196534254896533751763619748632866305445903742663767222380368598056346743790273546285474116657619344057407744566063285106302957424998222958334563469530826042006900334894940507739429822757677948670771646446401475234418995859933358243130008180759536136782698587200342015804405083654362794667043715432498830242795494530307701824122299526072682392416883591382466507093702351999216857924284228844163937090047387165802061654658731296376218866164135568360515357769852411309461140876077518669664598359667926801346716090206666283623307095613238020208838579994957805916629319170228853022067994759954669755848747912031498150020489023940497893018969218903299457329957933615236619153547835202992956280530580346188048475327939781542919126773872016959398231243998998083738131590171425213432398708470769525054179511894591276471224027298513771970571872065972609539084087063890507232242147976054307202299424358550001984668194552970122408292816135793651096260341402739670890290539634652749733051936121647220510837557946150318744548419221954103573224004509428899118772854490532692636349984796523606799588426404592878065079890048662999499258496147403823670334749053718615662500854192465254630734735470592657444348319716921656900540143255754066981370219643196580126846207577613002079274870394367728741824995134268682147619610980271981665849912854000586266885293690909808590352073959622797877167704956570701109840686451917212334062294475098780452199147749227206592489248155417621634742859122288908494376684326737988496746942171234696512068034353612026733019551888985186714851252843134718646972681183302261929938130968961934184204726044095752598480264969769942628031493505879722845317398404404766136527772383991566308125162547193990579656303403990650778044081542434937085597660623254423002156634083383451136994840415138061841621305110130354721521708626026722411562666098237182221903896143296122843453808861853136066713710878415727201422848026825971083548440323207872629926360833682353471434194454802487028406023157541739114399209811757523364508775327465775193793901522174053677751397308082689295814009742424096663245256371127275554813138918104588578788434671001200499772731239526998926007344889536787546023840884563161206866436260069860416345332711835403868298476116559997395850081711369707151087016769352210205207119306587204232943367376612943973885522556573557976798795448483847878609300730594170921845018856616294672752170650749875613401771999207041914676357273072487369912122604321957851850328366064475250473555501861497817846228892630981428024352453509525341771499168825703052936994035249193004718133969293658358477955548441418729299358481051187146133695328375103255617003032549133648324739613350912817202951672035960629467437857895034783268578652695648468049772851048371268571371710174944747089771007951326599571977185536818992501092538130016192595691688560212821744518752775149044137729808714578718821728891394252836114476272385593027217713947689935751224213096850232388887355044336182239209673510124360918794427492709842501901193642964413018899346419597569212619882459708253025895167986898921776318809624757908047351541616537635979411987192357052180741057545474523286703219489442558181392097429272725321723344296968214353129336168551540947872360172324488054726452312277329954745258701008482980205872562874886601633986054729698061958995727041136491083854134975456698587824863774357915870320563386104439619169757774004947293513137570115484537992524054976775958147916672384240363706932507971190885901149565024226836664882553925400415432577255921802822503960734813348624446723667186940497582623354541377084135798028997689173921671637556307023496802420683015459505952557023291016881953450025241190194039097347605093809834451182579729476067653116147891893076896501563815659745545701931892765370873530751133774088803218658236918753605920897832799802629346000755537711655733935247075071309299891485974004737759699085619503402054651496887954393777157718744353085477058515846914858988677376890749563402243352948882704897037289535812374920703566055234002365908807572825594074935358170453507404950430786601077339828001741772715701388696819944246064281597875135795560927360428844682508435674499423211270261087659836015113712490214244874535278179921239117786846524745214093518055485811573243729006472733809020482957747407185981860374708684286717665404920163892211997886941891508113407401561122378383848947830545283520019375170240362580261476918548352375204827546060332812320537368384369528982640547689242779683051606032122941971305898624339279930653319150270488626943146630086882906036938913305489203172190549402764186077691788746463406547058650845093618234570304408010293714213219535645841856212002220491279122623456707919822267373205778074418458267976061672627895374645491069976169809979589349440103658324875263502040561446885715685084316663246874940845565163621245764201813071916375863674116631380809138742411055687043053580097915072331808364438230302858541704366985190788328281686095477247372106110289131615169926634773044198632401845844609052201843461377057755829111540009963815904567488874475681740338761441160651590356825801263089126426348110434911655130477948801617551850940401735494663309897855071592787594192797472071274201046444611408640440198255469724942753747645197415207441629405487586039283351014842032997658344919969847875361248802719615209204137908572720005625473028253292534507900617109339302886404737678812367649587493463409620386788766525441243443799986362150864341695101086395523314350910622578929210926494667836577247786854052224561095458041243543570729768588208531982249642560145100850197699673538324491374450242541091046027877347664044916635890341954130056571906109165828535910311660771647040322593424704180434383930722874810909784652987805377576186746140110566133453382033674431223623092747739626762801126711107898439074620801128156500389898936996902615531151609058915444466355837620116136849729671236565382836790985391828355289305589043017696181139493265426855262772003107393380496127707409944678929356424852897833059161296871451390447310222755068231356889186366469835372570926617460311594138251684705497261398939078673207680734548345027894574941971300910638001809666450203958374908000409224916792685389473093574017125721717855356592625547252288452987636361999067948204782699004847095167966877114318996122727724865218771091724949902821421297230591814912641664070615519836632113388811666884300494853790570587470323050363662041264565613231275086236122271260746561199518073931788593225451290704917920481617412178007269106795348325460845539920221204370405830516943074642362921654055465455434800928688359132339475448945798039732615360945805966700833166246956944923319302325595161448667877444353826406797662051236873687719391027503115161380602709771074129428752412878936468150571495391787113477904397126993393779245665340705023574594518096866873547398021846631398029079316126818030712951745225590953502758227266035049083842517044023925565469150691931514472336278473983933149135274596021969827799475964078993259558154187436736832028197629659375815060480641327952346293832946391116546119290464690718192565154980905423079687235355361273794723342189390564486895833368653165830116560978445940636491307093493704382996066787778813694371282496364727933852217652979786611217060627813202623645589310972893162822106395194215667804608020963575035872246400412133950584855358933001394534546590988260881555615516326633872233229193801821674081770373019020873454877625370262143702522777839078500945310035409751056192714470577586167708182037483154162989501269631312341365910403419220972928202706029721636727127333412883747829822332644925037811467375511290618736599996846385043905631496985453310344382771290838718414306640625' ) ; +test( macro , '-94906265' , 1234 , '9591459179410241572856537719704118795351000902900562305249195472196195265555833412754864166507031793587379195925582803572210371959180740848015702606653712794907807842820287303844298057315437721729780551771436713566743567210455419724786856660298500086372804403816338340320302120440930931829619194880300084268951845577897562834735753784665609019198203233048867661024100257335806608791247129540791927592412584156372409767363191327851323280497596039938628887351085641878361348960836551885434816719856675096140100735098153982014533453294086408481103402371073765234498437942986299185804946033932203517281211025355740639164406513819178508651837986562373156333090579411143890235647767492144926855911961561170349672014614629827840596629153866370535524382716502377298033129875940828099612289849768956366119182226196623644421289199029543705885301848203842046242909504136594099983847607871992398930583777526005880060061677287301121641838813359760623338793918913138129119762743481238358717117820874141719166872107856435512751028932079558518104984922747527693664219154086216948208341876460165162264778277923815846538502672245752434229656583577521062954818225701253649577703058999328419908839977797748333637247291496547242568819156256380939652968563081087936133413669763802314091980457139588435626848957026334101428382680905361934063504702859864753961075493938097121116859339830550708349481985667854659071598612299339127950437953067708898374986402646559951120320721708316727933224792697639478435468027888366917714894730680032991635257046230944591272236530617356025218569172482915774764506872033088367335012521246964352262715392596661114331434581419942425209861303052103159737141838118887593079659533118979010073029109419153504531772178157803880524448253232397504700393645418278010150165092760716226444484244727105637368962191673677518823763517102430372508776552119355215943188635023271972752127662635880598372673204814450697064559754199549908021939030958872733672399702043041508144639801430320943357267841707000400404222832758589098605032942287405982133506381460750004675066342262085479385836480909763864598878090750329455982787911478900279885781537417672577623574196534254896533751763619748632866305445903742663767222380368598056346743790273546285474116657619344057407744566063285106302957424998222958334563469530826042006900334894940507739429822757677948670771646446401475234418995859933358243130008180759536136782698587200342015804405083654362794667043715432498830242795494530307701824122299526072682392416883591382466507093702351999216857924284228844163937090047387165802061654658731296376218866164135568360515357769852411309461140876077518669664598359667926801346716090206666283623307095613238020208838579994957805916629319170228853022067994759954669755848747912031498150020489023940497893018969218903299457329957933615236619153547835202992956280530580346188048475327939781542919126773872016959398231243998998083738131590171425213432398708470769525054179511894591276471224027298513771970571872065972609539084087063890507232242147976054307202299424358550001984668194552970122408292816135793651096260341402739670890290539634652749733051936121647220510837557946150318744548419221954103573224004509428899118772854490532692636349984796523606799588426404592878065079890048662999499258496147403823670334749053718615662500854192465254630734735470592657444348319716921656900540143255754066981370219643196580126846207577613002079274870394367728741824995134268682147619610980271981665849912854000586266885293690909808590352073959622797877167704956570701109840686451917212334062294475098780452199147749227206592489248155417621634742859122288908494376684326737988496746942171234696512068034353612026733019551888985186714851252843134718646972681183302261929938130968961934184204726044095752598480264969769942628031493505879722845317398404404766136527772383991566308125162547193990579656303403990650778044081542434937085597660623254423002156634083383451136994840415138061841621305110130354721521708626026722411562666098237182221903896143296122843453808861853136066713710878415727201422848026825971083548440323207872629926360833682353471434194454802487028406023157541739114399209811757523364508775327465775193793901522174053677751397308082689295814009742424096663245256371127275554813138918104588578788434671001200499772731239526998926007344889536787546023840884563161206866436260069860416345332711835403868298476116559997395850081711369707151087016769352210205207119306587204232943367376612943973885522556573557976798795448483847878609300730594170921845018856616294672752170650749875613401771999207041914676357273072487369912122604321957851850328366064475250473555501861497817846228892630981428024352453509525341771499168825703052936994035249193004718133969293658358477955548441418729299358481051187146133695328375103255617003032549133648324739613350912817202951672035960629467437857895034783268578652695648468049772851048371268571371710174944747089771007951326599571977185536818992501092538130016192595691688560212821744518752775149044137729808714578718821728891394252836114476272385593027217713947689935751224213096850232388887355044336182239209673510124360918794427492709842501901193642964413018899346419597569212619882459708253025895167986898921776318809624757908047351541616537635979411987192357052180741057545474523286703219489442558181392097429272725321723344296968214353129336168551540947872360172324488054726452312277329954745258701008482980205872562874886601633986054729698061958995727041136491083854134975456698587824863774357915870320563386104439619169757774004947293513137570115484537992524054976775958147916672384240363706932507971190885901149565024226836664882553925400415432577255921802822503960734813348624446723667186940497582623354541377084135798028997689173921671637556307023496802420683015459505952557023291016881953450025241190194039097347605093809834451182579729476067653116147891893076896501563815659745545701931892765370873530751133774088803218658236918753605920897832799802629346000755537711655733935247075071309299891485974004737759699085619503402054651496887954393777157718744353085477058515846914858988677376890749563402243352948882704897037289535812374920703566055234002365908807572825594074935358170453507404950430786601077339828001741772715701388696819944246064281597875135795560927360428844682508435674499423211270261087659836015113712490214244874535278179921239117786846524745214093518055485811573243729006472733809020482957747407185981860374708684286717665404920163892211997886941891508113407401561122378383848947830545283520019375170240362580261476918548352375204827546060332812320537368384369528982640547689242779683051606032122941971305898624339279930653319150270488626943146630086882906036938913305489203172190549402764186077691788746463406547058650845093618234570304408010293714213219535645841856212002220491279122623456707919822267373205778074418458267976061672627895374645491069976169809979589349440103658324875263502040561446885715685084316663246874940845565163621245764201813071916375863674116631380809138742411055687043053580097915072331808364438230302858541704366985190788328281686095477247372106110289131615169926634773044198632401845844609052201843461377057755829111540009963815904567488874475681740338761441160651590356825801263089126426348110434911655130477948801617551850940401735494663309897855071592787594192797472071274201046444611408640440198255469724942753747645197415207441629405487586039283351014842032997658344919969847875361248802719615209204137908572720005625473028253292534507900617109339302886404737678812367649587493463409620386788766525441243443799986362150864341695101086395523314350910622578929210926494667836577247786854052224561095458041243543570729768588208531982249642560145100850197699673538324491374450242541091046027877347664044916635890341954130056571906109165828535910311660771647040322593424704180434383930722874810909784652987805377576186746140110566133453382033674431223623092747739626762801126711107898439074620801128156500389898936996902615531151609058915444466355837620116136849729671236565382836790985391828355289305589043017696181139493265426855262772003107393380496127707409944678929356424852897833059161296871451390447310222755068231356889186366469835372570926617460311594138251684705497261398939078673207680734548345027894574941971300910638001809666450203958374908000409224916792685389473093574017125721717855356592625547252288452987636361999067948204782699004847095167966877114318996122727724865218771091724949902821421297230591814912641664070615519836632113388811666884300494853790570587470323050363662041264565613231275086236122271260746561199518073931788593225451290704917920481617412178007269106795348325460845539920221204370405830516943074642362921654055465455434800928688359132339475448945798039732615360945805966700833166246956944923319302325595161448667877444353826406797662051236873687719391027503115161380602709771074129428752412878936468150571495391787113477904397126993393779245665340705023574594518096866873547398021846631398029079316126818030712951745225590953502758227266035049083842517044023925565469150691931514472336278473983933149135274596021969827799475964078993259558154187436736832028197629659375815060480641327952346293832946391116546119290464690718192565154980905423079687235355361273794723342189390564486895833368653165830116560978445940636491307093493704382996066787778813694371282496364727933852217652979786611217060627813202623645589310972893162822106395194215667804608020963575035872246400412133950584855358933001394534546590988260881555615516326633872233229193801821674081770373019020873454877625370262143702522777839078500945310035409751056192714470577586167708182037483154162989501269631312341365910403419220972928202706029721636727127333412883747829822332644925037811467375511290618736599996846385043905631496985453310344382771290838718414306640625' ) ; +test( macro , '94906265' , 5678 , '12032097777224921443610910803648284170512319198440026582654592944907996997711020183354851559738136209876116410482775406152550319519617501575389742141362538671375575270130368782344375460094542930957208982333657039900983512378934606414708547255120509688221248878365002162079958544994081468523927315675060726868126226367119441190130650764598697841259026377226201673036205220245238076301842775410518683141308488299366012792925609747073886802877596666532246689317196865573110094049146280756613633385237048709371024252858686340623252312452593430321228085552943679754605680459379364986804128577790131289118408139954294866373981926459619424848669839958145224015329056251464187884540803724925854941893314508739139448540059027532063346594260009340289063635135268446417517177773306225826478834782126901952841733199463653563757819068049198556549112038207670677005457584687670138285992773936407404706326519609992105860062869525897101616064153489988499260854115519937665672793315389915719723184695407552227493961904033933034506875702096849362495327673029771455889030501830242732676146364350412302869011748293967864940422889128153590781271839942018607109535085227963257602139998078826097049418704998656236212402366601095688523413673512998518901468183798514551196413118699461621524416262734189234150826938615238369409717915433788697444341087319545108423271713647606132458422133503476646278312763913773672381574955638642484777319177742615693192492030931928334799325795983171516582124249978689831869160939605527534908432774284025724078112334305143452973560047389979442428241832752514170684582991619064835042076127845136974614077376818874608487426791468373615242293672741372298898215088365221162041567250511944704729950839359617629579145185451647138688599424451528822613292149181525578785717464355469269950910358964367355548167095991226459148148416836033320461350750016925333661337306860380813570244138594176200254338594713997700943753269483275676699592254818599648860765855658967021173586910470760937291362350281087625944947663940083612371308499706464739236243824369828191050651890831355140821021009799707142643546563126154302728058269983835130462112445179485724829519948644797857100978445782729948146775639685486727347085571030457542493031359599157910012477405633462126888771916787753215333242607039830155744016882502462503818969602202111471162936075917294595421685134910453228619713406894527040532782467138493248067630974131210865224589283318665338359787682806475430520542164582197378961886474218909120025123091615456874986351962126541772414045818060094363742441442667036502961807091952360039303360580900852680604055434020409419268918051690557813552959236488040160958755768871367230392867382735702108578451240872919059355437258914588914059658578625910689412928981898994374868014765744048731178533977420205065542882559318334473630109661521143300821787590642741661630560532599207482636782848372575108230527673435955097474563225203600719908173095140979638933646119901238452049016502626977563080111918315881318986264803301054759949431314581482431408037019249299434256675011740150791380650719740873599060034519923061234283942527829654746500679243122868491752528092330799766780299772695603288900967560796775174207884494845966890228277702276659444815563795433225980503597587408498869891219703208161074827864088098815419234882655313426926283791847398673264577617151571464296912550417563804886979853576821080050211194779490844153380677685847777313137638651644748358202947322079765399238487437874318841114773978903668929164955398911903679705111008999142589544437065672589266355348348971511169575378316208327903577552525930641088538955350354489078111990562226354820551745938135022897672457837517586016736813649699772486263689086502957138019177196070312090344215367177632397930739405411088757771866673597796220471619637645139435250941374184393351858539017096692099099345257001920271362387534252371917508119267325168864330673891152067448719178429752412191066355929358566249659077077560550302293786857736765866388524626228805050725063109877803065961191644600499168820792325163292525536974162404755526606943846795314338495539699560103980570000575730832399241743616051296198894674663823826249501962992317559847798100096759179383956869860153118427566631515292600888345422893802197242997389457528273662177569851158066854725418877583679801690209473560655905719642363040982739123254770408905429249758124187443434793269173022194566001870880813212255626734666407333284872705324976206677741658696075649608364892807470963909485110281558432545948579534204538696827102504407100425376019173981304010256984425288381928914573699655169020850451341503052441205769215186509836760430481696523650279090720163816251521349287308560407457609483984181328774565719714613388489095110023571061353122279353104129328013968956403235071785261847838169630745374996406189906650415573552174116649660276541371408913476854939747876731425608814138059458169543823165972801614100937621904382981944188903180205906327482865751979701901540575440519486923023420935041930682172192953852334672415568738221940582193314983240970450000477463045431237229063460109818726294597730994303217381825651493935869034862652936559019431947352777726119926158367810617503147922958376143964979603245915631333786351234314954623412494887023938633377421208202061177648550247361016141144451615061150414512561947705053352442969412639758719469809823355676287459924284669684459858991524522914802929760964195910108664304507593383032621305399692953057899447189106733091012594841503936991785388985322660311685783354745007380474195833316048135155967714601451196311606046191001166178941116722830537202351353675803239601270737264305300314769429948779160815303098446558150519469320909471850141905795161388126098051093418801571231958217059570635407936987518675272606139316846781769414872368547904423404977322742616034539497477291204678516696339549373290014129953927115273383862176648175885100832898131993707682449845814289537783195056908822732162500604957529260337740262458814285530991622691309191620743536827546586516016261289544348330822509040619411107336690611176859744962777081961711988981244490119102057017123472693131597991997040909096393811129374410032160780720267920557429521283544362429347063129854641992658572996108093014481102752542992814642875292835964120599399273647779564854999067324549593959628020136971251523507807754590744694873740047390084491259174712701241947149566007259569113369875274948363558659130833317516389511341744440804095510223434955552652210614743910169826529392899468656662706962138458679700014949089569408033941330187462290588839847072683578505493439388126630655399425769894783841874574481277512426591408213810373551314332889400820073202400253692361444659207630759168415095760789533492551330583140574981012731074049549919118053417150217808638350432013305694321389747006470410615077305764765120127628910927114025496289209479659319746699938956841225054827585736797719039052465086433182830701745898467197621237268086386733129150280583409523728139312677689819712362202660229834226632997964115903142152545104059172086002463963414350578947905947216633376664142189791562053019113774134585010114509991806040543148515641482014416718677876276580431730562587541020555292496453826361453188845475398099905277525052773545411713921648813979140016300112385588170999474985918656553076765214200080620922916851475745553785133089372514034029601819219527045772849932738904614873836099307092123571006738447715320002736785859704861742282537734067792187177608073549859135742645615364728840961736910729008697313304738536298720611573424123582407824500642154138363464791319257510414579292323013964798548950290960997144513319241370751263381191179501838180558724038708020579905145157293231789686223459443044018289699299028761818401590134930047434655260646434988879638156693278024323812521554624956388982330136290167049424094118582772096018451809597401164846924711716262902829627380939680535156293471439360777268668365604921618839689307971611636791474486517596411076810461187507596434260046979222951771970881882637300844957670414379573068900594030059669462435172746064402491699639256585470646371028345111692685583568972301562562922256758180181085480072911408202795425250027969499463641174613001079713276428421215191667447359883645715478755796737199406110184987838747951054762875131236948669154666701738693610353768722184367702584486223362096024384484603104446694719810676365358898796150078397378880308527506601302713337537470154717940902510142689198467640659012705019749229659196945434251394512811731664749976526521575163913656404283679160697284832403491752877439284481271499113105959231314317691378767826586965558827309006336474296703042302766970494721137069514776117071812137188441976088074396467632977148030639633204112209971813503021630520258087179296520213138286076436343573116739144719310772751735156402034501606390456169140121695688607125183103173251813914671347610021351582630598950972263101156473693547645926791369585126525848123770842541512577658666859445930626122772214914414428878443618845511938720224570647898061530301191130932770667765716795587750061205748309356694807519519675049350933068580375053894078242210199468520630330003161545121375796842051755736417199147757963284334866394276249640731433231049313954526161951624809572619652276996303120934045809848958441871638077879356764855185283339151315501229746330405881302263457753882789573262935098772141915955008754732738429440981828735729272802882701434622480077709131642461504208927055033641377102447767720176633847373823944955329314383832782143590012811927685177026789234911929577093962457115800486427160323294733691288587100842884523422947373759687195747031917611825381748929965338560830322621555697476051991779833983757024224308964473525520615691348057039080995096707558993173247103410555911126189269896588730810492029064501420933855518163570985872578414596537490581577386809453787410688705142748561393081836124251051324584698861388478139283569598076892767321443716553246412277259380509438802329441648705346383613734547877712888220362688053129344779935227318331396329401655637306388721745349393876059195313192731747216875912473534083064724394534423226971274516443125664390773514132844684527673669092932331255685956744208760893026251638308006285281531125557486527757107669977234989257848144696133615593927212707645061711788280447683309281341206400131653863420785992756287508115967050826182726890127091142835164557166691300678394990747493429085386293564966123136506231068567056989317384966475475729360339009395818317246772969137113875763412531168727939516546447462848160915288609593976373135718583011204195966912413852164206268427095555948610761307815791560355585910426147327321102341134387395444132445427019438961472388259276810758042673037214059651545259592406090068506838010231567454628094637254355973489738412673187077409391969169545123360596500128359039361514821593508030148522205228449973734972174002553108195263247639174438853119252163722614381071194775578403064409455019374052283926424489955638366392986417357495741112108742236903909428659619606212619900649574073585165166583918297998340673134762427650800452972036533098907970092878703482852833490281729498858731156264911226877099786698157523214591321994816532369903053664184550576973511700913443461257437675437472098084407017674888009625137498476466436818879720524380130001916537522732804698998210196055682123318139008022653778279715652658727340997456249218032227963658719808122825441145385176983894549215846317551213773007016356738334267963377888011544300061222386574258747191915588698617637837212717814756142051324008302080298650994166585880612515919258375738246207644772437177730335392539644865639849308897774064728887770437363216880581815066468852825832858170229658070845319130874032026316629150366399827042959910139581792401984719737440786491444999030986092724355755641888514009652129027999591099530921894279904701093752999885648973445224343373762636465568559928662660225367743242647517117639887521310379396989258168883666755250191993348321142152864927369234668649063028652063843003316973499048911633219208658516326528768740257621395512872408369502229664467552427061041482906643131699241509502631730714053932028098939427452444970068248194791910834306048571684029297039763506306003677920029786132935369270257069918171451215129218456327859444234926254208150987962386182798994154872735035689186439260489113584084457851762452138367055101379588122088844841306204874692945577566193189114109700874804492781437652540985226374341144719703543609354328682925954034266359991157018716516446223344660092640717378693207071014181491854379467954573981289282127187230877577110472130570576015105977305257910229508244095738723967730842098391729083715169089672956523592451123266861612656114937473953741130882127624277059388150081629717639957137442000516378123556553332349275408205751508548209994904127879234614825403357223962515911129518982040378620086754855361296612014949915205044289352069213501405997863521354165348782511867122622716426639791821261702368775506733831743186020155130943146663966007407244597917005719991265853620211871215693990090865326620251912533146988791177682866417571901522812420520954626741756852429297080414669100168753560040054760117697607946028484195290870973497362267381612404260749108299672450420697873731172732775674054385367218094949835013674973757423265370251319346466334678075474375906897432558238767579231146265140826352088422254545690686302743333477665277149035167938674924154842983621768748297426546172809743534122395481353193555875026625899972752500022321576082052828487883396792123138094495203111492864041134795761256726095663499686254762052539889279642048007404275482585612511343844033096850528226343612783861307535354140366802884442274775822100977205037665851810599890007341178775130240696632601594694061697231625625860004620538862779963203630814410243245714819549757828073441407122131050844039240224163642095196215306864657309686247074858678000635402415836405930550459058799511632845758556493533762990549187485016639012256731683580040073341731704082434264243561194791703596206015014846543656970640029940075455836423615054869940691591288967540111562931377745992026685841553681405592390900507543705586848434089001303884903488059141717942395691356277350339460187131843419289217935265295704356916529054605633813938893737767409366779159372882254232836716324580262988115146013874569597106960026911351914668502679283163961953086528727793944040518851106607715147835491925402383222147418855338357535739845538867786357060338435261036202368258020761466669889670691822601560184917436779215254347489960930087319530836518444337988344598187203191595434829132950413104197804486083026745302512606864460474736420264409880729091060010368627194325379608471121667642965001108323387523924855835054547593985702842329940726838791815501738849577938132081507924442944174718597397264098866829822238109143654804816673202408821440775080110551433710513005759571403757096182158076893681914376156120366821040079723970732533775297717113208811739667056486197044324270922989003211680035846379754027311741122863788335461268176688251174205660568758427931660106752538935307255339039355388757057375250425837093302168454705863145996845095042151313295262463259661279787231685169235050323016586688299833499115629856113737828434665438782484735547300584910063985708776012855041724554864958256185127598519785482694466456563490174364083687348114832431925384869094951858531131186801480404938023454443571034693096579794784282688250620550447004592047288521549204059159028509660096017875307950532319742036173203952041761503785819360687983493313089577551873561446412395575710594370027055187478904534143877344909963663735297933632031693194441131986356078620539658905801102236737444661108267332204176723242428802368200731035237320543765666828751910067807455585241166705139054718355894926417783921107593070742530185305927934025258466866218767376534792597033669822057078961298957496217109258353525748391156704355202862658731864850654926248935721796777991022299873209352867958121188810265931762818554937603100731645526362256769968645627563740131303913187747664074382451124596816950157537126085105444310397381169417181279755364952019062060800318321532221104576465370046063753472086774044100444414676557036622159972786835290325849755928597463426695781953163866965969052547199558811862459755929880206105062693162596966564969090523328485578382332426358809045831759393541573654498007053609291367872036111445231279494806931031841205524707641695256162632063010224942774570614275679640385413454072868377460757627086865145342680411059337436108163325287906190993195903620201661214403352143421814822960031390185721117950110818389291340253326486009897862116192130278391424657241044004963932456332370837203044676250871218583290978562214724386902489542748628396358186325956900204476723680860137151218998668021260767109942583224787827906233417831491624545860788315526165511635197037561922517899904690761031753872124042336536173826882605457634858121101471892751287742889625763093890478605491801544520792057578574375773201143929421480324074646141024278246772158921139478563054405229834847395540267665801516476465649906633858677249697918200443907759577085140538201853478765762117960994914145101764724959407470640463811314680073362866017160216055901670762363844476940433763519832222385027792750981080965530232813715566803117769888159323419674153708883977329384943689553768541789213946129813719122880362388613061590039120847635432704222352763497996891937276538781966653887199495265671013361386797466770701748928272976698049303363099194915667274909798041151694131302731875286034428026186929184304362229619692102502128326871687296959400302085212456821262169947535776150082836000223031048009020371350036539197512764290221947644788009144903781547616778821484803103102745494206849074992779830389209747508799417151536020207175883478394172905960788120783232579015657004053498129914455441618389610549539868266323811924818208880604509127630703993255747870363319837810567597787888248562918900718803552796004261069194657586185596777323973185892714770276436504734272537002948160990428552665125608477771575963058090305035115286941440877623389294911460277602637191173693793231079024899815378902648788493885795214168271309254640593363869703425269994239287771226535309826739493886296423210090644214129966601915093662511467744154185692679773644695709701672608468044373005103438648018171096398607426443413194281519283533259981445906676653664312034448007510997631193422830884833006737772887744686368777653538919592111949951373489944710830951650076413715452663964540719349734000663229824949598114271366375624217568372270930581796391817021771734034804435202600593398262992169912934443430494160632096045871344133239156139910775140126053555363620216919941247411877562901224722321989970134286623258958498605964077449818088184783496838986907729353462388738014823594316384752835667377359432034427008829688816033072344951707746090028382556104976370057205866084666487901937011251702362871920843956238611037186048336332441746362113871081603050950760137657339038936536596933851722041992305843336304901453452571715630307405640050171237176240125222557358332930710738041186084749584740450846611590610786726669986270473854160586469256252168384869883596851589288004569216909578136486049118663430702671507574735910444281915534186018197115110593685299825714958042538520471370923783862810373944427764167480823665142849781516572576659578160735209456505359366276175015044857079506949581097412535399513752605101582122333384186945231604776461746644687207899376798357792653596666581824693709787573041587757626825069517113369429081460885782112243077774167939979145984687560083045973141222583991194116736510260934423567193666909628226271067954142670416399861275578343838128155755377702692215310376282921807545085658277051619371602033888713006177339575658405744622442355225853961935039933219714558173292667708157166916833886949301548495619142336871670282820976529735014754467417983365683174117809170080328865238203402509223643245295215135732316886815093541440338066497831425192534469707791058531207292816542931530093442001376701232809955022738734490848042941077563991314157582176472360317911138496886256725677367798535879492979280051355429572780533908274951671490815885229571886451377910940010012673321183872398403321907312091527491690998932778856646700965310668633894463320063118790564548548680468929222591042338228420943806756554406415931090291538143528789629740994863591079711320495984207677768776056308656173482219428268311986921414524482951641166995052008686213317172019535225407298322183791610925122947801778616107589077345869377990653281139028741071735597803862826823503904687705298499157856081719712796392689492483355489380957823523151647371561894369978535447318492691386953116508279327857453984504066238005909847859372464174431153967057270158951933229971026010966691002647873844722520078261307977064543610448466409873414879293871473093770897730342188974916791516079659719631290440856802730239894028254762897599982086201797037774350455318445666421091272654386376102853322186923651805632319156209526417184248540024807358600433160247811092932618503532768368430167126161193398063991915395134237015963224689432846551459273641605647876407353197376326052974132020864262566344092487103313843164740701039613572905063871725731123431656363638983017301386812075627738970033704925617216698715754404765227506689591570815979652750336513064156973513088297698696477005797931273090405805324066030602361512119840369813400472419573729403873434074573160162870936318068249575178675647763166913751293933551646401329625534493843177325624465230372869642679078724392280172358972274796335813356986697385312329187363931167837979111403879151351225430729247112426650129104919284568825235232455725351552224363906641354967564821570365975247995194169878249598512813403591842113734352236034910030599591245451967209058347539059536190947433656585914973072966125316763518711707788780035041883398613275851057398845335005672095171230325334135754312046899114278318582949758025840627034073495122556098906615537245941205241050630832317495323472933706045476448135324622130249061967088040634256046633681463998139104615271598326353633335243659421316638748257095222430616324419633409773550120132726761874278343852462953247386966597193056825342009690607297567265709899931944826256174731047305094081727770841080440016328196894856028563604702780682709363667848710891858610272205043503944199299286748350079640312927864906304355154798671043210363438224540663084637003896566824195029371811104076856777325671062014465716574261539700730333018675634121018453203461781631294981764229198232448947654253783388204297001920517253136683270888989223979423417588630101697507592396076446071605672776440131159545850932553540460963555258875042206253533925856199633623872569538946264824099914287390183680108014685374620969458668067114850551017647802720372476318759518097294889667098388787511578895623400536394696909686982089754739465395458755824025627145860540874654096413723593095786861445483207390022439985873830588574664429664328016256793764664176593210650680088966473569586028063185778696846067901539484777171526008932126642124726149000234264622535507932061596730778639639322994194566230181315095849815600439054976860942354245780811250583700351160679186551987899007553450837968473873566770319473147476749953987063615776202643846558316122703715582310812032981020745887175302830579849877162396208954934582206235358053066687144876586531305671914153856979556448429896161954702428046020131267519937687942784998876608574424998618033186526320893410380410615897192637383212667814571224040666584728535219469735065470507466917541842491727590582415179332124764074275007615003561577219703985592626963898540408123901920954693863945334300894449076898006775718907497203849104045111950488579240549422430862215686448461635287540273933678378844195074450255145986318612166430395304017670650737974685138684856887920372725287537626880802277074988514877737086561392592097851272353742818024979368746610359299993821608029744496422263548547379227059308330732006560207940874965636535953389748254985558222428424330864460444917636632197361629108476540664208138353154832367022269303011778867713003519669926347227092605460218997631456886988546452742315709205780440409392361149984816382171251958377059474144369328217951856030362908523108523320063836177218545129144151675726728971709295080995491115727738994384523099426017049570788092605348295244510790430809310252002021162900702972004743370313805442485273713185126694838015211112954180162169003605131100343992572258878781008043930175009769360708537294998309182845117912092938413455780854377238800073118887421690605050678371370274063825715320860910620948562818451293617405229491236178678754278932510338478945063584831864172120232848867941761893175916936978589066485863729545344061035238414543782144041420795359232419130120814019590644487393845413057769719569362935783498618412118335138847775489214231071866809710199171908881608454495198717226829803613782208248938966092151102736556383497239013516522084118430594971074187519260946766667423607181318562263393260060663288717977893874080349690289502370587468658530985736835159292642558195601284611160860487456916132188445668274130918453531643472494048279511660213922482152284451162576937159479526872950903047337162660821805029600708501290793495192214286757581386114297917781127145691164585515718567911708522043336429297534300930577150477197470794166974719236537212770910044441149771285775283181049923538686195299106209763353070616873255072368061193988813137514561690385137083968163734396360347928328336563595006220960934830733065521338335841965986235454589498682179372157178621143188814181528148836823240009313917239615618819685916460559824760451892578522401207920356914008125649666362232615846019270768411703026907820785686893329687936007326486259085396965025670221843906365927274024874373060432645146595290306316201392153119798490572148328091329727540219633346941261473165756079426541378711351627269272757052944951094355168530350261245111562524094741072397641389854917843735109228705666266863564318304340300463039112532153772402056001825404569674075795960482695655750098767071905821033260887679978762025881061325337213163524622779581816972175555663637210876981896507755878807206231301747997616278339215979267473884231317543544712452852114555647618822488813490625396727766305946129050714786088423305048954173700588940427019522843104010086905515156909811517470970474323555351456229248573825599238197370105299573364893745750391351067788061060527046812509973058875643642096985994846004078611902478115985749938866763374390207356150215198771166488048581440471218124332859752158358015616660187047654002371295814353685889164385419937001586245963586686123227189249339843703303467679680488282425879611225214199203660669304537817806007418484543257294498646404096533225791315505537497715207372656046521498454410484618808462877318221533855177115026118801994635309492636704866960405453702180044263190730170186585393782170839546858732775601817761449580514710578003629573446698223526303276734226490467503004836350690787693180419256606367206975754427565647193757103622172723445912571921412299915576801160624014585320520435926902108223783097157413714400856842549485204781754909051139596113033072378955171738006815746107126582544226522618574999884662865437801703547910979352686377121384449362061338382596983291230994834971550479538621580428614474707245992895951108596353356806792208588625391355419712148342585326639448556448414437163323753111363340625419447936908942309059384977968558654468049438582343818038934475031358918368904553362235318960285027300982643072000467590624020979094167872273398935195854660177797067882015023199367866518380157778613872943331744050423399154264127572590316747837829937185838805929919930426357165171535205844319577554107598132285773629025750828527147869294916738495703358765482635112741426231530287972819515170191843245039795145568805407271280931405842189126545621691903281208244330021380936941534090926737001841378878232358824105952882091391122376983197385863111377095821200758977598655636124137542127167825095347247242493240787156813316762909697688864136617808861689815132468231141188094757116163402600963896457848764885057333264284354504937279338775019887183472529765242120841857211466394385600886129299536196104160966949461244421470876475635289658360673044133988472412908346503168644044604661248748712465204802503052422913247662994388842262879693084905772957000634196203224713014001316324485989167462563998596759472917793384738934828062167583801086989253946454905163667273365009826486005589759567623881215672865627059042146648672881327891063995694457750315379828488812880269962995872715826927673202525599988948924553574496455072613992039779209442466653855719582532255207207153068979266405561447716075597208003386115629512060258961979286373743813337931101772517953360698302031325001844985453129783938956301615754527286888929780663765211591009120443813269934515079913668898214910192754399304618341831453870034267125170721505066917586198732535221716916597559836503614379370118425547846931569036557590812044714028782560536961879256523449737057538949699208081652250218260123107062251099566298529927581162698576168546631586946049600127140987141317674460410902993224596022062324828491276267223741714140055313279819368014780323282408383224067009467800172584303162404423355760504326823431706740776861818994506012773534445613456631600402675225760377368762722021968052635826828120651984513278838416227839164392949867613026178865022522692004106553797610247860158988661216559547229327484286711157186964559739720520556436315158359781162799170405180320792416230576841207330921642427914971360147358390054635718803605053812837473635557695381145693736966197784412835427730682455377495472116907945998421668486206685639652442308850167256008495070585127947385980542764963491704371533238862062927529061728993687103715584617381449133650067934551429741997596233806357685350458313224546984096007149813473419575258362349731564468684291660239721484472043256211659727453894937763642732739820546069887466309796309447539968295322423746786761899588378272444571292371367413474447197434276820309108466176334054973272331173340111659361442337130792855312977415847609894557657244236135360575415882254468739766648258409923847596862145560111671406474246039147740994441351609557249626167418534932138685355488646277447161488690787234126802880936621565723899904615884548341472638437772090419017559362342062609301959534466652230774497315103874040974426330140216732414915907495369817982025864413682320190304402284550455106186758899229547597245258424329265319033989076324859178607488037746916527718266949417024120162124868059437809624404252426704159384001199136240834740094617360560669898139739645400311944527017550131601104533280441817207649685008412565052535179862086175827433761623348775986952355976268937519226183084278136545349291670649785347842730455081487877293986813649230888836033911523597766312541091611558308804656825040751880201229000742627616764846092999606733478252567564690692669504889322114105282631889525319858323705525911497612288157996632667685670674150846432327565528609123127086077539690737908771138085892200113245294049889922704737554162844306763132343665963132039823822365456559043777707552305193196770793605848172893387453594424454474013959098664586068848120392276052089591591308873830873345317112789906683626082510250289631190568481346881428473945619394593511266715086704096809000035241384030443602237087033327542922826698398494829325813183260408718893212433059617843940587229933901382943262992336198408409788514398330434599960440396485182583066248982823883042200111255085981898391448344844015751684471609252769042652840411485899734910885714254073490007645062005967803838338350515620582705664016191350475064132715818275524670604480386741711701135361668073237815153729800159901327889495086187129604447582390156419305608703427826439346018905984357281977986898496611416847526529975227719636005017771483921982957544197799709954130121091633016282666472057665994141283170246327843904936295814914169455433298130711317392343344536477614717883848576748172715876667106217813834587606343570080150703180822107697621328830605698506305609033356175547929890746964404950767451267747106159270327510593755358827880906472517244109777980040119286343261893970180775124057054774158177970221802579963540456256569061867723885060688202164035260408533918104432069412762092767961756595762676589021880178838196631141734156532209197898820016385683655803586282227835323540770476387548613240989563105953577728703740467085125879358539676422989918253524305042736487362952197862376130430552678640237349729018968430033265542780883750558736743752261945449029876696946612108224851115124942879425375009248761228804637428658896795153370852897642290653016040206069997053451309942591115365763315347798585143808043185383293137605133990375187081546565293976821820681678976667143825155588879797300722377840466564345393925544396615896674799718417150813477090500003898193451616746130407776930778672242012416461426697352259907686766455115834355953750908750468801886412209297018951915865714966322975970231743912119114106738120788423635459798468818392838721078133776550259766032933645790131678864392198922153478445210797007411829472852520896641724546528677899228076406095090087054355112053831012039363483887827931984497205305580640089884147850679614566821898948479674022244113913369887487652583123461801329225543373875617324208320681859309093341218594477765154347005165214923914454731564386152568222327274320958552990828960284112884233856381741112323189817039205176818285148223632011326114683897977754234839539859773555387479931478369465852786548627650813853724070487089026934104735632316188699054916850121902617757361251685208213541489423125264663780298582285404482769756412105522055863664088568917771323306300523891885066913901475208601262155693104850152972747067125562727745608865730314711297367302397805250438620696620826528991710532990343302838492054402628712678922427512444061374297112648006020563822297430010181285771385041656979587178970340526369080649857004814587864116807509544571472638333034374444934753562266027341209926917981677891921750897515727238195821470408569780330165534206129720507627843830335242167825939925171230104851587860224644439220292020253252521515829520218725721656441148152957244204914499245531265109309283531415930597420172103218491273772895034798650668137487351895169131869380823743909292549280691725771478618398588851733810124489829934377473370053370068252656647212635214606968547927504809038433155753162266329616429449015410862283066225309223030055256064379392216273751092054318524673355685810347451754467300668773538268859656515445954574923648729683873935557286856820970937068655945793715092808131171747403868732588043215625794798713241960194139927877235454587568468762746272019100094498768878435303678674043109734750924359994293734355746752800574597686230559451123952878914382180299790800323290843096781932073569058248305026863533285657386011004060766594502913168774569065159241049643726694858160418911013311490706738036543681700409684130695301318926665944626256463817919659855204483526903636334206401621354856147973558569067520506511253677092000344997303422716188357301982404683865947269583956684546963367459758762687671678204149310431797725100520798570137927948407559741374061481883367972415208467850517662863773339874292705113236025748070303373436449698506471836270575534367072477137900735911028494106738086952233620846769094804738713039865343227698048631407498839757989365214479653306186066720098433994778082034252601056288009952122283076954922176813820889628483465616421754123937579558193754200095019239139515555511223697405926455097278440331386885178334434554052038015454864241788988257555470096002158416471742411410132996885100140752406174456919083750028326577637466209951318990330737079201943113542966688636484421817970036239203330453206764934536684736355707322326827785876446310370573555594566522654459815454790470955048621062330510444683333038786245129101219361371510125280334401845995354716355081414363331143924307309675133524204853828824109943599655989890178320729881597902725812942771540675060969003063075143063594335159290803487756279512698080233303983448523903763359578020680403822826869215712204567152735947916516836123801571638451477512947633273928861312235512576987086278058220742708761872709578297417052880180662367826500231390634119435668470543727684869857682890608140863953707420877680764412659167163724061796739633033065005264111522515204885857558654834258914573545195512032180353594911695051378068719810556006895666360047309899697571949998411847437091347874733077520204574436565617262186793285390157914385444947163193179238783098002974102908514885479387830864484899289781518304707739376905740671105223300022583960963928395194012317124630264096534995267171526593770055565730102494501137676561913334587750246583294305250495353130891578871532092316372373133107902309220102841925745042896381868642367418745319420730865142002648204585089869986704818966935411839771621427485830775501646076259582071540977268704166605867826554568530493151242347823449624187048865683437944276656029782106486814685177512298790716326796679143241180948696299889708040355541198052387600659238816546438629657921933326303838039366429868607257229153586409564863587715116286506248407497620036497639682708720641591753907274496783732165772299744820271810956549362372807148941506408038206953482379076431012118157117732910126914164048218394564547100247423760878689918169039921521753045153136140852307023421248049548015885572583792382485175500534204824970481492908940320310430809050323007986533558215703588782544545718278427626486375885747827314014521764649075125614840753558736191501676141412501389041086207604364613946110943290698832808350946105405659106878177534966935163165977743784854970520032448041881269436554799191892238890741452952579974686319705933896006655839221952956620159751151666300129475309250350785976428156893784305478622359782685533113861735520731866174351824115841845075091997649633694047866430158123243404433057388021248152371142388316099631832447205081549938790835458611253943435564824171299287489119366707640567857774181325253233507979780771975461697394241257405396956542526065849971304547348847901021479486605612704247767646084737041513530671846138948561060030258907065141688239455904675293200356117950112887673328192319125625450112001441334554826262046043961154178777018566846299911001936816697919963389400196333444219082726126561961439286151423991499109774369393437975616583894807974648514443152564762608988320176773626728380768044611965217042661464062080139705149376171806476488738827250154569276638342192678366431133871111025133072862691969096467500425521305379670524615424717077214067299329167718710591789934002289122069747920433953864968281665817890773234078288875249889546074590578021210045020175846649075388442769801561868206680361142266963414252212701874669272948450859264833052568909056061160609027359184255550131690394077096720368166451553160609833896170781715866268750533758548369182807948608780968625107433984390434235219689740367237885674707704507030700597244015754049856015155058928190915694812731538478889554953381956036083413176999479211030070256296238738351346477023693051810382793957412886791553484931648794808844286324406999962815018551120571300130535112365975815392599766465092145349546061127412046819415225926986188716476056849908748119793304841105307635909081982031362197358414422316767268043098239315181137479061734502360873745508395271506258881998152137286301123636845012754834291165393438286951173209240049799587871290266306404165115829161019204881466233120224197635902895287152465704419993236013589982120474846271345840260611228369146254161192044127219280174741005492699430065610779347520954299270720650387651378861176589218001361087617775409717699262796015976536682841105021059664122075404910323076215802321801490368864524554178452977152697573396110449811096336643650973261681886798344414251669250224998533937199407689970648423521941761037033886551068960149333137371722361296472034150664556620292222683537040127141078291436736093570890846188142373958232245787503986561211010450137490946828402032613144801907279288018920751978234534610262408946310152037618441950323372778709960576820747366052518528388812006417666180087401861373515895458278191176440767682077611697073274163810947190349871592916000621071323440142391532644306688082924938683364588261228996162358510568247905595841766424855277606907075534470052532713604689867684196360667936729004058748210752703690582852587524292351670119901397237694282959815729865739583855822949365306356393915948828577313698981442774794707665584106781286664956274007171084307394120846271084144220384654297665542790977252203936545409559594221915876466565983276517927312109637452041938454476903708734290815286507123649654266467749616718795331528641404301235882753816634993816753568289004479992478192683752604759132474627756612961000581745982917363087175573302426078515416609069164426643196313914584560126544290921166479054390986891864459370224685320335100411031886752698293827320896578394742343752392404174187327761664303245103880308371741165000643275630023932633142124856864613839455387524460883835247056445230671943050578332861499695214574918673021229404253734683027773313743176432192583951191913236970762565695716840327124880325930914779807518816007401993774234221794461913879164577142778140583620285187482254501254780617476909707221619667136778860802714594724530597985286751745300483760149830490374318122069442090705009423973432872916069092401278307983254836657225071642951238528724138838574504391218505180992122754344306417613772561319645961095192874830637228486233492444491904268558980004614112652158744705099772253265288419466337449702012118823493884966713120693120582224051534971354793790579910847464242156789336422637453846505595136532644728156836277997378127893681071581923934505832928373516022575817127739736575756865378797460471263725175192803271851926819917519383686188517784400435220379006466153404705216541111363986878921739723739896607992639335605097808466640645060973299641467192720137922397898565627219164711374815726090587366358047829903172491757500331384309027495081387152401636448384580814486186637697087649689231216276249532384975371921757162088038760829349873080877249706384919119527981958190516873110807572517264983816623232205603988358157912992461349984204628724405823867426023186896007333398519510459422904668181847357590156918607616331138009353807527538592211061653529680787460840337585919547522274221559932006125164812648451392909851693330515235916955355721591013597659403166816081731576169618811781971177795842089107519036325768932298882133054753656397633873210525368153651341260914098941072219830872711334487119709246568789747359480982755252152430402157014447380207090760786408265205545137559732000800203136750199256298419497315924197202893994081817702434459238430923245234575791683932861682945847124118958937423672717813748011917449413425060927640713687024598045661303952113384013415037432914883493033636158000130588759332472546201048166403710080511673970680927719260588960348045228317232803681187031272506450618629138861001275954148566415095600081015308217088430975829661490651423859763132193660525117633388134158638217519049714767119063945723171578151019595179218912729338551682001453030819043454878245408263437500120254435442376334044602833812761305154890870916870343146715245652773283431041407392860250480796803485192806596809855333297772986668103799435700742354867077311314589712272131788641879710793233868427693207194387420730083062528118643285570520825547326752348837863723225294085957046976403282869202911899456522208121620826458236485403829445741128331629382084816009173825727982745362705478457038425615653445181021898078023754297882055318390558568805474809499629743584484479518248026939110990875290364212204536332706626128176468053408407649243109388979549094928082647431373786179467142988191638288941225785348943868854632528599402913545489154484053068978162863823000366160237819716753451310493666848144862930450839567184713588568720601921059768004898348890777169855867038685678689630104228620027696190848737373593115559489316471614742241241080915717759369507297908390256697208628722732076075083433157804018595982216321305273881207658074452046050754827966442452381402017094824435270368061319011125926752655181876954087858148018718169579570729272694811666295639408633390466351259744410532863779156045567748268573798664900319980347698852661715714418485150351971611338457054814071731561010311297700803013892035659824806376504489316277200564467982215399291293815609566984236664361860965342421210479582059584960463891055303905596666930735260688627851937917438369125360883055927544388560027145080571797004532153325269863702949511264830010485917986200317248423836494080716911582330878681178100817517430784215819553290074107638543118831542337780918612111718398640817469867853658537784796684100354795672647383581298428564496194855634992668338556800017467144246309114053233502145105635100954667476387259109043659409570451628107003693334435646437801867855817503020706261095751735198245598952555068326031742238547524726553387803327296382780133921837788043654626876383362945442953469045674139219118842149941525260493144551517231835450076117034756695289843264617957174777984619140625' ) ; +test( macro , '-94906265' , 5678 , '12032097777224921443610910803648284170512319198440026582654592944907996997711020183354851559738136209876116410482775406152550319519617501575389742141362538671375575270130368782344375460094542930957208982333657039900983512378934606414708547255120509688221248878365002162079958544994081468523927315675060726868126226367119441190130650764598697841259026377226201673036205220245238076301842775410518683141308488299366012792925609747073886802877596666532246689317196865573110094049146280756613633385237048709371024252858686340623252312452593430321228085552943679754605680459379364986804128577790131289118408139954294866373981926459619424848669839958145224015329056251464187884540803724925854941893314508739139448540059027532063346594260009340289063635135268446417517177773306225826478834782126901952841733199463653563757819068049198556549112038207670677005457584687670138285992773936407404706326519609992105860062869525897101616064153489988499260854115519937665672793315389915719723184695407552227493961904033933034506875702096849362495327673029771455889030501830242732676146364350412302869011748293967864940422889128153590781271839942018607109535085227963257602139998078826097049418704998656236212402366601095688523413673512998518901468183798514551196413118699461621524416262734189234150826938615238369409717915433788697444341087319545108423271713647606132458422133503476646278312763913773672381574955638642484777319177742615693192492030931928334799325795983171516582124249978689831869160939605527534908432774284025724078112334305143452973560047389979442428241832752514170684582991619064835042076127845136974614077376818874608487426791468373615242293672741372298898215088365221162041567250511944704729950839359617629579145185451647138688599424451528822613292149181525578785717464355469269950910358964367355548167095991226459148148416836033320461350750016925333661337306860380813570244138594176200254338594713997700943753269483275676699592254818599648860765855658967021173586910470760937291362350281087625944947663940083612371308499706464739236243824369828191050651890831355140821021009799707142643546563126154302728058269983835130462112445179485724829519948644797857100978445782729948146775639685486727347085571030457542493031359599157910012477405633462126888771916787753215333242607039830155744016882502462503818969602202111471162936075917294595421685134910453228619713406894527040532782467138493248067630974131210865224589283318665338359787682806475430520542164582197378961886474218909120025123091615456874986351962126541772414045818060094363742441442667036502961807091952360039303360580900852680604055434020409419268918051690557813552959236488040160958755768871367230392867382735702108578451240872919059355437258914588914059658578625910689412928981898994374868014765744048731178533977420205065542882559318334473630109661521143300821787590642741661630560532599207482636782848372575108230527673435955097474563225203600719908173095140979638933646119901238452049016502626977563080111918315881318986264803301054759949431314581482431408037019249299434256675011740150791380650719740873599060034519923061234283942527829654746500679243122868491752528092330799766780299772695603288900967560796775174207884494845966890228277702276659444815563795433225980503597587408498869891219703208161074827864088098815419234882655313426926283791847398673264577617151571464296912550417563804886979853576821080050211194779490844153380677685847777313137638651644748358202947322079765399238487437874318841114773978903668929164955398911903679705111008999142589544437065672589266355348348971511169575378316208327903577552525930641088538955350354489078111990562226354820551745938135022897672457837517586016736813649699772486263689086502957138019177196070312090344215367177632397930739405411088757771866673597796220471619637645139435250941374184393351858539017096692099099345257001920271362387534252371917508119267325168864330673891152067448719178429752412191066355929358566249659077077560550302293786857736765866388524626228805050725063109877803065961191644600499168820792325163292525536974162404755526606943846795314338495539699560103980570000575730832399241743616051296198894674663823826249501962992317559847798100096759179383956869860153118427566631515292600888345422893802197242997389457528273662177569851158066854725418877583679801690209473560655905719642363040982739123254770408905429249758124187443434793269173022194566001870880813212255626734666407333284872705324976206677741658696075649608364892807470963909485110281558432545948579534204538696827102504407100425376019173981304010256984425288381928914573699655169020850451341503052441205769215186509836760430481696523650279090720163816251521349287308560407457609483984181328774565719714613388489095110023571061353122279353104129328013968956403235071785261847838169630745374996406189906650415573552174116649660276541371408913476854939747876731425608814138059458169543823165972801614100937621904382981944188903180205906327482865751979701901540575440519486923023420935041930682172192953852334672415568738221940582193314983240970450000477463045431237229063460109818726294597730994303217381825651493935869034862652936559019431947352777726119926158367810617503147922958376143964979603245915631333786351234314954623412494887023938633377421208202061177648550247361016141144451615061150414512561947705053352442969412639758719469809823355676287459924284669684459858991524522914802929760964195910108664304507593383032621305399692953057899447189106733091012594841503936991785388985322660311685783354745007380474195833316048135155967714601451196311606046191001166178941116722830537202351353675803239601270737264305300314769429948779160815303098446558150519469320909471850141905795161388126098051093418801571231958217059570635407936987518675272606139316846781769414872368547904423404977322742616034539497477291204678516696339549373290014129953927115273383862176648175885100832898131993707682449845814289537783195056908822732162500604957529260337740262458814285530991622691309191620743536827546586516016261289544348330822509040619411107336690611176859744962777081961711988981244490119102057017123472693131597991997040909096393811129374410032160780720267920557429521283544362429347063129854641992658572996108093014481102752542992814642875292835964120599399273647779564854999067324549593959628020136971251523507807754590744694873740047390084491259174712701241947149566007259569113369875274948363558659130833317516389511341744440804095510223434955552652210614743910169826529392899468656662706962138458679700014949089569408033941330187462290588839847072683578505493439388126630655399425769894783841874574481277512426591408213810373551314332889400820073202400253692361444659207630759168415095760789533492551330583140574981012731074049549919118053417150217808638350432013305694321389747006470410615077305764765120127628910927114025496289209479659319746699938956841225054827585736797719039052465086433182830701745898467197621237268086386733129150280583409523728139312677689819712362202660229834226632997964115903142152545104059172086002463963414350578947905947216633376664142189791562053019113774134585010114509991806040543148515641482014416718677876276580431730562587541020555292496453826361453188845475398099905277525052773545411713921648813979140016300112385588170999474985918656553076765214200080620922916851475745553785133089372514034029601819219527045772849932738904614873836099307092123571006738447715320002736785859704861742282537734067792187177608073549859135742645615364728840961736910729008697313304738536298720611573424123582407824500642154138363464791319257510414579292323013964798548950290960997144513319241370751263381191179501838180558724038708020579905145157293231789686223459443044018289699299028761818401590134930047434655260646434988879638156693278024323812521554624956388982330136290167049424094118582772096018451809597401164846924711716262902829627380939680535156293471439360777268668365604921618839689307971611636791474486517596411076810461187507596434260046979222951771970881882637300844957670414379573068900594030059669462435172746064402491699639256585470646371028345111692685583568972301562562922256758180181085480072911408202795425250027969499463641174613001079713276428421215191667447359883645715478755796737199406110184987838747951054762875131236948669154666701738693610353768722184367702584486223362096024384484603104446694719810676365358898796150078397378880308527506601302713337537470154717940902510142689198467640659012705019749229659196945434251394512811731664749976526521575163913656404283679160697284832403491752877439284481271499113105959231314317691378767826586965558827309006336474296703042302766970494721137069514776117071812137188441976088074396467632977148030639633204112209971813503021630520258087179296520213138286076436343573116739144719310772751735156402034501606390456169140121695688607125183103173251813914671347610021351582630598950972263101156473693547645926791369585126525848123770842541512577658666859445930626122772214914414428878443618845511938720224570647898061530301191130932770667765716795587750061205748309356694807519519675049350933068580375053894078242210199468520630330003161545121375796842051755736417199147757963284334866394276249640731433231049313954526161951624809572619652276996303120934045809848958441871638077879356764855185283339151315501229746330405881302263457753882789573262935098772141915955008754732738429440981828735729272802882701434622480077709131642461504208927055033641377102447767720176633847373823944955329314383832782143590012811927685177026789234911929577093962457115800486427160323294733691288587100842884523422947373759687195747031917611825381748929965338560830322621555697476051991779833983757024224308964473525520615691348057039080995096707558993173247103410555911126189269896588730810492029064501420933855518163570985872578414596537490581577386809453787410688705142748561393081836124251051324584698861388478139283569598076892767321443716553246412277259380509438802329441648705346383613734547877712888220362688053129344779935227318331396329401655637306388721745349393876059195313192731747216875912473534083064724394534423226971274516443125664390773514132844684527673669092932331255685956744208760893026251638308006285281531125557486527757107669977234989257848144696133615593927212707645061711788280447683309281341206400131653863420785992756287508115967050826182726890127091142835164557166691300678394990747493429085386293564966123136506231068567056989317384966475475729360339009395818317246772969137113875763412531168727939516546447462848160915288609593976373135718583011204195966912413852164206268427095555948610761307815791560355585910426147327321102341134387395444132445427019438961472388259276810758042673037214059651545259592406090068506838010231567454628094637254355973489738412673187077409391969169545123360596500128359039361514821593508030148522205228449973734972174002553108195263247639174438853119252163722614381071194775578403064409455019374052283926424489955638366392986417357495741112108742236903909428659619606212619900649574073585165166583918297998340673134762427650800452972036533098907970092878703482852833490281729498858731156264911226877099786698157523214591321994816532369903053664184550576973511700913443461257437675437472098084407017674888009625137498476466436818879720524380130001916537522732804698998210196055682123318139008022653778279715652658727340997456249218032227963658719808122825441145385176983894549215846317551213773007016356738334267963377888011544300061222386574258747191915588698617637837212717814756142051324008302080298650994166585880612515919258375738246207644772437177730335392539644865639849308897774064728887770437363216880581815066468852825832858170229658070845319130874032026316629150366399827042959910139581792401984719737440786491444999030986092724355755641888514009652129027999591099530921894279904701093752999885648973445224343373762636465568559928662660225367743242647517117639887521310379396989258168883666755250191993348321142152864927369234668649063028652063843003316973499048911633219208658516326528768740257621395512872408369502229664467552427061041482906643131699241509502631730714053932028098939427452444970068248194791910834306048571684029297039763506306003677920029786132935369270257069918171451215129218456327859444234926254208150987962386182798994154872735035689186439260489113584084457851762452138367055101379588122088844841306204874692945577566193189114109700874804492781437652540985226374341144719703543609354328682925954034266359991157018716516446223344660092640717378693207071014181491854379467954573981289282127187230877577110472130570576015105977305257910229508244095738723967730842098391729083715169089672956523592451123266861612656114937473953741130882127624277059388150081629717639957137442000516378123556553332349275408205751508548209994904127879234614825403357223962515911129518982040378620086754855361296612014949915205044289352069213501405997863521354165348782511867122622716426639791821261702368775506733831743186020155130943146663966007407244597917005719991265853620211871215693990090865326620251912533146988791177682866417571901522812420520954626741756852429297080414669100168753560040054760117697607946028484195290870973497362267381612404260749108299672450420697873731172732775674054385367218094949835013674973757423265370251319346466334678075474375906897432558238767579231146265140826352088422254545690686302743333477665277149035167938674924154842983621768748297426546172809743534122395481353193555875026625899972752500022321576082052828487883396792123138094495203111492864041134795761256726095663499686254762052539889279642048007404275482585612511343844033096850528226343612783861307535354140366802884442274775822100977205037665851810599890007341178775130240696632601594694061697231625625860004620538862779963203630814410243245714819549757828073441407122131050844039240224163642095196215306864657309686247074858678000635402415836405930550459058799511632845758556493533762990549187485016639012256731683580040073341731704082434264243561194791703596206015014846543656970640029940075455836423615054869940691591288967540111562931377745992026685841553681405592390900507543705586848434089001303884903488059141717942395691356277350339460187131843419289217935265295704356916529054605633813938893737767409366779159372882254232836716324580262988115146013874569597106960026911351914668502679283163961953086528727793944040518851106607715147835491925402383222147418855338357535739845538867786357060338435261036202368258020761466669889670691822601560184917436779215254347489960930087319530836518444337988344598187203191595434829132950413104197804486083026745302512606864460474736420264409880729091060010368627194325379608471121667642965001108323387523924855835054547593985702842329940726838791815501738849577938132081507924442944174718597397264098866829822238109143654804816673202408821440775080110551433710513005759571403757096182158076893681914376156120366821040079723970732533775297717113208811739667056486197044324270922989003211680035846379754027311741122863788335461268176688251174205660568758427931660106752538935307255339039355388757057375250425837093302168454705863145996845095042151313295262463259661279787231685169235050323016586688299833499115629856113737828434665438782484735547300584910063985708776012855041724554864958256185127598519785482694466456563490174364083687348114832431925384869094951858531131186801480404938023454443571034693096579794784282688250620550447004592047288521549204059159028509660096017875307950532319742036173203952041761503785819360687983493313089577551873561446412395575710594370027055187478904534143877344909963663735297933632031693194441131986356078620539658905801102236737444661108267332204176723242428802368200731035237320543765666828751910067807455585241166705139054718355894926417783921107593070742530185305927934025258466866218767376534792597033669822057078961298957496217109258353525748391156704355202862658731864850654926248935721796777991022299873209352867958121188810265931762818554937603100731645526362256769968645627563740131303913187747664074382451124596816950157537126085105444310397381169417181279755364952019062060800318321532221104576465370046063753472086774044100444414676557036622159972786835290325849755928597463426695781953163866965969052547199558811862459755929880206105062693162596966564969090523328485578382332426358809045831759393541573654498007053609291367872036111445231279494806931031841205524707641695256162632063010224942774570614275679640385413454072868377460757627086865145342680411059337436108163325287906190993195903620201661214403352143421814822960031390185721117950110818389291340253326486009897862116192130278391424657241044004963932456332370837203044676250871218583290978562214724386902489542748628396358186325956900204476723680860137151218998668021260767109942583224787827906233417831491624545860788315526165511635197037561922517899904690761031753872124042336536173826882605457634858121101471892751287742889625763093890478605491801544520792057578574375773201143929421480324074646141024278246772158921139478563054405229834847395540267665801516476465649906633858677249697918200443907759577085140538201853478765762117960994914145101764724959407470640463811314680073362866017160216055901670762363844476940433763519832222385027792750981080965530232813715566803117769888159323419674153708883977329384943689553768541789213946129813719122880362388613061590039120847635432704222352763497996891937276538781966653887199495265671013361386797466770701748928272976698049303363099194915667274909798041151694131302731875286034428026186929184304362229619692102502128326871687296959400302085212456821262169947535776150082836000223031048009020371350036539197512764290221947644788009144903781547616778821484803103102745494206849074992779830389209747508799417151536020207175883478394172905960788120783232579015657004053498129914455441618389610549539868266323811924818208880604509127630703993255747870363319837810567597787888248562918900718803552796004261069194657586185596777323973185892714770276436504734272537002948160990428552665125608477771575963058090305035115286941440877623389294911460277602637191173693793231079024899815378902648788493885795214168271309254640593363869703425269994239287771226535309826739493886296423210090644214129966601915093662511467744154185692679773644695709701672608468044373005103438648018171096398607426443413194281519283533259981445906676653664312034448007510997631193422830884833006737772887744686368777653538919592111949951373489944710830951650076413715452663964540719349734000663229824949598114271366375624217568372270930581796391817021771734034804435202600593398262992169912934443430494160632096045871344133239156139910775140126053555363620216919941247411877562901224722321989970134286623258958498605964077449818088184783496838986907729353462388738014823594316384752835667377359432034427008829688816033072344951707746090028382556104976370057205866084666487901937011251702362871920843956238611037186048336332441746362113871081603050950760137657339038936536596933851722041992305843336304901453452571715630307405640050171237176240125222557358332930710738041186084749584740450846611590610786726669986270473854160586469256252168384869883596851589288004569216909578136486049118663430702671507574735910444281915534186018197115110593685299825714958042538520471370923783862810373944427764167480823665142849781516572576659578160735209456505359366276175015044857079506949581097412535399513752605101582122333384186945231604776461746644687207899376798357792653596666581824693709787573041587757626825069517113369429081460885782112243077774167939979145984687560083045973141222583991194116736510260934423567193666909628226271067954142670416399861275578343838128155755377702692215310376282921807545085658277051619371602033888713006177339575658405744622442355225853961935039933219714558173292667708157166916833886949301548495619142336871670282820976529735014754467417983365683174117809170080328865238203402509223643245295215135732316886815093541440338066497831425192534469707791058531207292816542931530093442001376701232809955022738734490848042941077563991314157582176472360317911138496886256725677367798535879492979280051355429572780533908274951671490815885229571886451377910940010012673321183872398403321907312091527491690998932778856646700965310668633894463320063118790564548548680468929222591042338228420943806756554406415931090291538143528789629740994863591079711320495984207677768776056308656173482219428268311986921414524482951641166995052008686213317172019535225407298322183791610925122947801778616107589077345869377990653281139028741071735597803862826823503904687705298499157856081719712796392689492483355489380957823523151647371561894369978535447318492691386953116508279327857453984504066238005909847859372464174431153967057270158951933229971026010966691002647873844722520078261307977064543610448466409873414879293871473093770897730342188974916791516079659719631290440856802730239894028254762897599982086201797037774350455318445666421091272654386376102853322186923651805632319156209526417184248540024807358600433160247811092932618503532768368430167126161193398063991915395134237015963224689432846551459273641605647876407353197376326052974132020864262566344092487103313843164740701039613572905063871725731123431656363638983017301386812075627738970033704925617216698715754404765227506689591570815979652750336513064156973513088297698696477005797931273090405805324066030602361512119840369813400472419573729403873434074573160162870936318068249575178675647763166913751293933551646401329625534493843177325624465230372869642679078724392280172358972274796335813356986697385312329187363931167837979111403879151351225430729247112426650129104919284568825235232455725351552224363906641354967564821570365975247995194169878249598512813403591842113734352236034910030599591245451967209058347539059536190947433656585914973072966125316763518711707788780035041883398613275851057398845335005672095171230325334135754312046899114278318582949758025840627034073495122556098906615537245941205241050630832317495323472933706045476448135324622130249061967088040634256046633681463998139104615271598326353633335243659421316638748257095222430616324419633409773550120132726761874278343852462953247386966597193056825342009690607297567265709899931944826256174731047305094081727770841080440016328196894856028563604702780682709363667848710891858610272205043503944199299286748350079640312927864906304355154798671043210363438224540663084637003896566824195029371811104076856777325671062014465716574261539700730333018675634121018453203461781631294981764229198232448947654253783388204297001920517253136683270888989223979423417588630101697507592396076446071605672776440131159545850932553540460963555258875042206253533925856199633623872569538946264824099914287390183680108014685374620969458668067114850551017647802720372476318759518097294889667098388787511578895623400536394696909686982089754739465395458755824025627145860540874654096413723593095786861445483207390022439985873830588574664429664328016256793764664176593210650680088966473569586028063185778696846067901539484777171526008932126642124726149000234264622535507932061596730778639639322994194566230181315095849815600439054976860942354245780811250583700351160679186551987899007553450837968473873566770319473147476749953987063615776202643846558316122703715582310812032981020745887175302830579849877162396208954934582206235358053066687144876586531305671914153856979556448429896161954702428046020131267519937687942784998876608574424998618033186526320893410380410615897192637383212667814571224040666584728535219469735065470507466917541842491727590582415179332124764074275007615003561577219703985592626963898540408123901920954693863945334300894449076898006775718907497203849104045111950488579240549422430862215686448461635287540273933678378844195074450255145986318612166430395304017670650737974685138684856887920372725287537626880802277074988514877737086561392592097851272353742818024979368746610359299993821608029744496422263548547379227059308330732006560207940874965636535953389748254985558222428424330864460444917636632197361629108476540664208138353154832367022269303011778867713003519669926347227092605460218997631456886988546452742315709205780440409392361149984816382171251958377059474144369328217951856030362908523108523320063836177218545129144151675726728971709295080995491115727738994384523099426017049570788092605348295244510790430809310252002021162900702972004743370313805442485273713185126694838015211112954180162169003605131100343992572258878781008043930175009769360708537294998309182845117912092938413455780854377238800073118887421690605050678371370274063825715320860910620948562818451293617405229491236178678754278932510338478945063584831864172120232848867941761893175916936978589066485863729545344061035238414543782144041420795359232419130120814019590644487393845413057769719569362935783498618412118335138847775489214231071866809710199171908881608454495198717226829803613782208248938966092151102736556383497239013516522084118430594971074187519260946766667423607181318562263393260060663288717977893874080349690289502370587468658530985736835159292642558195601284611160860487456916132188445668274130918453531643472494048279511660213922482152284451162576937159479526872950903047337162660821805029600708501290793495192214286757581386114297917781127145691164585515718567911708522043336429297534300930577150477197470794166974719236537212770910044441149771285775283181049923538686195299106209763353070616873255072368061193988813137514561690385137083968163734396360347928328336563595006220960934830733065521338335841965986235454589498682179372157178621143188814181528148836823240009313917239615618819685916460559824760451892578522401207920356914008125649666362232615846019270768411703026907820785686893329687936007326486259085396965025670221843906365927274024874373060432645146595290306316201392153119798490572148328091329727540219633346941261473165756079426541378711351627269272757052944951094355168530350261245111562524094741072397641389854917843735109228705666266863564318304340300463039112532153772402056001825404569674075795960482695655750098767071905821033260887679978762025881061325337213163524622779581816972175555663637210876981896507755878807206231301747997616278339215979267473884231317543544712452852114555647618822488813490625396727766305946129050714786088423305048954173700588940427019522843104010086905515156909811517470970474323555351456229248573825599238197370105299573364893745750391351067788061060527046812509973058875643642096985994846004078611902478115985749938866763374390207356150215198771166488048581440471218124332859752158358015616660187047654002371295814353685889164385419937001586245963586686123227189249339843703303467679680488282425879611225214199203660669304537817806007418484543257294498646404096533225791315505537497715207372656046521498454410484618808462877318221533855177115026118801994635309492636704866960405453702180044263190730170186585393782170839546858732775601817761449580514710578003629573446698223526303276734226490467503004836350690787693180419256606367206975754427565647193757103622172723445912571921412299915576801160624014585320520435926902108223783097157413714400856842549485204781754909051139596113033072378955171738006815746107126582544226522618574999884662865437801703547910979352686377121384449362061338382596983291230994834971550479538621580428614474707245992895951108596353356806792208588625391355419712148342585326639448556448414437163323753111363340625419447936908942309059384977968558654468049438582343818038934475031358918368904553362235318960285027300982643072000467590624020979094167872273398935195854660177797067882015023199367866518380157778613872943331744050423399154264127572590316747837829937185838805929919930426357165171535205844319577554107598132285773629025750828527147869294916738495703358765482635112741426231530287972819515170191843245039795145568805407271280931405842189126545621691903281208244330021380936941534090926737001841378878232358824105952882091391122376983197385863111377095821200758977598655636124137542127167825095347247242493240787156813316762909697688864136617808861689815132468231141188094757116163402600963896457848764885057333264284354504937279338775019887183472529765242120841857211466394385600886129299536196104160966949461244421470876475635289658360673044133988472412908346503168644044604661248748712465204802503052422913247662994388842262879693084905772957000634196203224713014001316324485989167462563998596759472917793384738934828062167583801086989253946454905163667273365009826486005589759567623881215672865627059042146648672881327891063995694457750315379828488812880269962995872715826927673202525599988948924553574496455072613992039779209442466653855719582532255207207153068979266405561447716075597208003386115629512060258961979286373743813337931101772517953360698302031325001844985453129783938956301615754527286888929780663765211591009120443813269934515079913668898214910192754399304618341831453870034267125170721505066917586198732535221716916597559836503614379370118425547846931569036557590812044714028782560536961879256523449737057538949699208081652250218260123107062251099566298529927581162698576168546631586946049600127140987141317674460410902993224596022062324828491276267223741714140055313279819368014780323282408383224067009467800172584303162404423355760504326823431706740776861818994506012773534445613456631600402675225760377368762722021968052635826828120651984513278838416227839164392949867613026178865022522692004106553797610247860158988661216559547229327484286711157186964559739720520556436315158359781162799170405180320792416230576841207330921642427914971360147358390054635718803605053812837473635557695381145693736966197784412835427730682455377495472116907945998421668486206685639652442308850167256008495070585127947385980542764963491704371533238862062927529061728993687103715584617381449133650067934551429741997596233806357685350458313224546984096007149813473419575258362349731564468684291660239721484472043256211659727453894937763642732739820546069887466309796309447539968295322423746786761899588378272444571292371367413474447197434276820309108466176334054973272331173340111659361442337130792855312977415847609894557657244236135360575415882254468739766648258409923847596862145560111671406474246039147740994441351609557249626167418534932138685355488646277447161488690787234126802880936621565723899904615884548341472638437772090419017559362342062609301959534466652230774497315103874040974426330140216732414915907495369817982025864413682320190304402284550455106186758899229547597245258424329265319033989076324859178607488037746916527718266949417024120162124868059437809624404252426704159384001199136240834740094617360560669898139739645400311944527017550131601104533280441817207649685008412565052535179862086175827433761623348775986952355976268937519226183084278136545349291670649785347842730455081487877293986813649230888836033911523597766312541091611558308804656825040751880201229000742627616764846092999606733478252567564690692669504889322114105282631889525319858323705525911497612288157996632667685670674150846432327565528609123127086077539690737908771138085892200113245294049889922704737554162844306763132343665963132039823822365456559043777707552305193196770793605848172893387453594424454474013959098664586068848120392276052089591591308873830873345317112789906683626082510250289631190568481346881428473945619394593511266715086704096809000035241384030443602237087033327542922826698398494829325813183260408718893212433059617843940587229933901382943262992336198408409788514398330434599960440396485182583066248982823883042200111255085981898391448344844015751684471609252769042652840411485899734910885714254073490007645062005967803838338350515620582705664016191350475064132715818275524670604480386741711701135361668073237815153729800159901327889495086187129604447582390156419305608703427826439346018905984357281977986898496611416847526529975227719636005017771483921982957544197799709954130121091633016282666472057665994141283170246327843904936295814914169455433298130711317392343344536477614717883848576748172715876667106217813834587606343570080150703180822107697621328830605698506305609033356175547929890746964404950767451267747106159270327510593755358827880906472517244109777980040119286343261893970180775124057054774158177970221802579963540456256569061867723885060688202164035260408533918104432069412762092767961756595762676589021880178838196631141734156532209197898820016385683655803586282227835323540770476387548613240989563105953577728703740467085125879358539676422989918253524305042736487362952197862376130430552678640237349729018968430033265542780883750558736743752261945449029876696946612108224851115124942879425375009248761228804637428658896795153370852897642290653016040206069997053451309942591115365763315347798585143808043185383293137605133990375187081546565293976821820681678976667143825155588879797300722377840466564345393925544396615896674799718417150813477090500003898193451616746130407776930778672242012416461426697352259907686766455115834355953750908750468801886412209297018951915865714966322975970231743912119114106738120788423635459798468818392838721078133776550259766032933645790131678864392198922153478445210797007411829472852520896641724546528677899228076406095090087054355112053831012039363483887827931984497205305580640089884147850679614566821898948479674022244113913369887487652583123461801329225543373875617324208320681859309093341218594477765154347005165214923914454731564386152568222327274320958552990828960284112884233856381741112323189817039205176818285148223632011326114683897977754234839539859773555387479931478369465852786548627650813853724070487089026934104735632316188699054916850121902617757361251685208213541489423125264663780298582285404482769756412105522055863664088568917771323306300523891885066913901475208601262155693104850152972747067125562727745608865730314711297367302397805250438620696620826528991710532990343302838492054402628712678922427512444061374297112648006020563822297430010181285771385041656979587178970340526369080649857004814587864116807509544571472638333034374444934753562266027341209926917981677891921750897515727238195821470408569780330165534206129720507627843830335242167825939925171230104851587860224644439220292020253252521515829520218725721656441148152957244204914499245531265109309283531415930597420172103218491273772895034798650668137487351895169131869380823743909292549280691725771478618398588851733810124489829934377473370053370068252656647212635214606968547927504809038433155753162266329616429449015410862283066225309223030055256064379392216273751092054318524673355685810347451754467300668773538268859656515445954574923648729683873935557286856820970937068655945793715092808131171747403868732588043215625794798713241960194139927877235454587568468762746272019100094498768878435303678674043109734750924359994293734355746752800574597686230559451123952878914382180299790800323290843096781932073569058248305026863533285657386011004060766594502913168774569065159241049643726694858160418911013311490706738036543681700409684130695301318926665944626256463817919659855204483526903636334206401621354856147973558569067520506511253677092000344997303422716188357301982404683865947269583956684546963367459758762687671678204149310431797725100520798570137927948407559741374061481883367972415208467850517662863773339874292705113236025748070303373436449698506471836270575534367072477137900735911028494106738086952233620846769094804738713039865343227698048631407498839757989365214479653306186066720098433994778082034252601056288009952122283076954922176813820889628483465616421754123937579558193754200095019239139515555511223697405926455097278440331386885178334434554052038015454864241788988257555470096002158416471742411410132996885100140752406174456919083750028326577637466209951318990330737079201943113542966688636484421817970036239203330453206764934536684736355707322326827785876446310370573555594566522654459815454790470955048621062330510444683333038786245129101219361371510125280334401845995354716355081414363331143924307309675133524204853828824109943599655989890178320729881597902725812942771540675060969003063075143063594335159290803487756279512698080233303983448523903763359578020680403822826869215712204567152735947916516836123801571638451477512947633273928861312235512576987086278058220742708761872709578297417052880180662367826500231390634119435668470543727684869857682890608140863953707420877680764412659167163724061796739633033065005264111522515204885857558654834258914573545195512032180353594911695051378068719810556006895666360047309899697571949998411847437091347874733077520204574436565617262186793285390157914385444947163193179238783098002974102908514885479387830864484899289781518304707739376905740671105223300022583960963928395194012317124630264096534995267171526593770055565730102494501137676561913334587750246583294305250495353130891578871532092316372373133107902309220102841925745042896381868642367418745319420730865142002648204585089869986704818966935411839771621427485830775501646076259582071540977268704166605867826554568530493151242347823449624187048865683437944276656029782106486814685177512298790716326796679143241180948696299889708040355541198052387600659238816546438629657921933326303838039366429868607257229153586409564863587715116286506248407497620036497639682708720641591753907274496783732165772299744820271810956549362372807148941506408038206953482379076431012118157117732910126914164048218394564547100247423760878689918169039921521753045153136140852307023421248049548015885572583792382485175500534204824970481492908940320310430809050323007986533558215703588782544545718278427626486375885747827314014521764649075125614840753558736191501676141412501389041086207604364613946110943290698832808350946105405659106878177534966935163165977743784854970520032448041881269436554799191892238890741452952579974686319705933896006655839221952956620159751151666300129475309250350785976428156893784305478622359782685533113861735520731866174351824115841845075091997649633694047866430158123243404433057388021248152371142388316099631832447205081549938790835458611253943435564824171299287489119366707640567857774181325253233507979780771975461697394241257405396956542526065849971304547348847901021479486605612704247767646084737041513530671846138948561060030258907065141688239455904675293200356117950112887673328192319125625450112001441334554826262046043961154178777018566846299911001936816697919963389400196333444219082726126561961439286151423991499109774369393437975616583894807974648514443152564762608988320176773626728380768044611965217042661464062080139705149376171806476488738827250154569276638342192678366431133871111025133072862691969096467500425521305379670524615424717077214067299329167718710591789934002289122069747920433953864968281665817890773234078288875249889546074590578021210045020175846649075388442769801561868206680361142266963414252212701874669272948450859264833052568909056061160609027359184255550131690394077096720368166451553160609833896170781715866268750533758548369182807948608780968625107433984390434235219689740367237885674707704507030700597244015754049856015155058928190915694812731538478889554953381956036083413176999479211030070256296238738351346477023693051810382793957412886791553484931648794808844286324406999962815018551120571300130535112365975815392599766465092145349546061127412046819415225926986188716476056849908748119793304841105307635909081982031362197358414422316767268043098239315181137479061734502360873745508395271506258881998152137286301123636845012754834291165393438286951173209240049799587871290266306404165115829161019204881466233120224197635902895287152465704419993236013589982120474846271345840260611228369146254161192044127219280174741005492699430065610779347520954299270720650387651378861176589218001361087617775409717699262796015976536682841105021059664122075404910323076215802321801490368864524554178452977152697573396110449811096336643650973261681886798344414251669250224998533937199407689970648423521941761037033886551068960149333137371722361296472034150664556620292222683537040127141078291436736093570890846188142373958232245787503986561211010450137490946828402032613144801907279288018920751978234534610262408946310152037618441950323372778709960576820747366052518528388812006417666180087401861373515895458278191176440767682077611697073274163810947190349871592916000621071323440142391532644306688082924938683364588261228996162358510568247905595841766424855277606907075534470052532713604689867684196360667936729004058748210752703690582852587524292351670119901397237694282959815729865739583855822949365306356393915948828577313698981442774794707665584106781286664956274007171084307394120846271084144220384654297665542790977252203936545409559594221915876466565983276517927312109637452041938454476903708734290815286507123649654266467749616718795331528641404301235882753816634993816753568289004479992478192683752604759132474627756612961000581745982917363087175573302426078515416609069164426643196313914584560126544290921166479054390986891864459370224685320335100411031886752698293827320896578394742343752392404174187327761664303245103880308371741165000643275630023932633142124856864613839455387524460883835247056445230671943050578332861499695214574918673021229404253734683027773313743176432192583951191913236970762565695716840327124880325930914779807518816007401993774234221794461913879164577142778140583620285187482254501254780617476909707221619667136778860802714594724530597985286751745300483760149830490374318122069442090705009423973432872916069092401278307983254836657225071642951238528724138838574504391218505180992122754344306417613772561319645961095192874830637228486233492444491904268558980004614112652158744705099772253265288419466337449702012118823493884966713120693120582224051534971354793790579910847464242156789336422637453846505595136532644728156836277997378127893681071581923934505832928373516022575817127739736575756865378797460471263725175192803271851926819917519383686188517784400435220379006466153404705216541111363986878921739723739896607992639335605097808466640645060973299641467192720137922397898565627219164711374815726090587366358047829903172491757500331384309027495081387152401636448384580814486186637697087649689231216276249532384975371921757162088038760829349873080877249706384919119527981958190516873110807572517264983816623232205603988358157912992461349984204628724405823867426023186896007333398519510459422904668181847357590156918607616331138009353807527538592211061653529680787460840337585919547522274221559932006125164812648451392909851693330515235916955355721591013597659403166816081731576169618811781971177795842089107519036325768932298882133054753656397633873210525368153651341260914098941072219830872711334487119709246568789747359480982755252152430402157014447380207090760786408265205545137559732000800203136750199256298419497315924197202893994081817702434459238430923245234575791683932861682945847124118958937423672717813748011917449413425060927640713687024598045661303952113384013415037432914883493033636158000130588759332472546201048166403710080511673970680927719260588960348045228317232803681187031272506450618629138861001275954148566415095600081015308217088430975829661490651423859763132193660525117633388134158638217519049714767119063945723171578151019595179218912729338551682001453030819043454878245408263437500120254435442376334044602833812761305154890870916870343146715245652773283431041407392860250480796803485192806596809855333297772986668103799435700742354867077311314589712272131788641879710793233868427693207194387420730083062528118643285570520825547326752348837863723225294085957046976403282869202911899456522208121620826458236485403829445741128331629382084816009173825727982745362705478457038425615653445181021898078023754297882055318390558568805474809499629743584484479518248026939110990875290364212204536332706626128176468053408407649243109388979549094928082647431373786179467142988191638288941225785348943868854632528599402913545489154484053068978162863823000366160237819716753451310493666848144862930450839567184713588568720601921059768004898348890777169855867038685678689630104228620027696190848737373593115559489316471614742241241080915717759369507297908390256697208628722732076075083433157804018595982216321305273881207658074452046050754827966442452381402017094824435270368061319011125926752655181876954087858148018718169579570729272694811666295639408633390466351259744410532863779156045567748268573798664900319980347698852661715714418485150351971611338457054814071731561010311297700803013892035659824806376504489316277200564467982215399291293815609566984236664361860965342421210479582059584960463891055303905596666930735260688627851937917438369125360883055927544388560027145080571797004532153325269863702949511264830010485917986200317248423836494080716911582330878681178100817517430784215819553290074107638543118831542337780918612111718398640817469867853658537784796684100354795672647383581298428564496194855634992668338556800017467144246309114053233502145105635100954667476387259109043659409570451628107003693334435646437801867855817503020706261095751735198245598952555068326031742238547524726553387803327296382780133921837788043654626876383362945442953469045674139219118842149941525260493144551517231835450076117034756695289843264617957174777984619140625' ) ; +test( macro , '94906266' , 0 , '1' ) ; +test( macro , '-94906266' , 0 , '1' ) ; +test( macro , '94906266' , 1 , '94906266' ) ; +test( macro , '-94906266' , 1 , '-94906266' ) ; +test( macro , '94906266' , 3 , '854839655154332653629096' ) ; +test( macro , '-94906266' , 3 , '-854839655154332653629096' ) ; +test( macro , '94906266' , 7 , '69352833223452036048019660867447049048422594495110435456' ) ; +test( macro , '-94906266' , 7 , '-69352833223452036048019660867447049048422594495110435456' ) ; +test( macro , '94906266' , 9 , '624674792670819892886821348974247157367038441509612832874984853143476736' ) ; +test( macro , '-94906266' , 9 , '-624674792670819892886821348974247157367038441509612832874984853143476736' ) ; +test( macro , '94906266' , 11 , '5626570371553000770366419421961255147770032439589200995227891474434035187239751962044416' ) ; +test( macro , '-94906266' , 11 , '-5626570371553000770366419421961255147770032439589200995227891474434035187239751962044416' ) ; +test( macro , '94906266' , 17 , '4111621002962352544426035475002050767022502971311441626541763763792261198666994629509192961845858718231919984114833985236172441304825856' ) ; +test( macro , '-94906266' , 17 , '-4111621002962352544426035475002050767022502971311441626541763763792261198666994629509192961845858718231919984114833985236172441304825856' ) ; +test( macro , '94906266' , 22 , '31658294146038073140673550517958143193937503699159895257943887308245045293131342388364082990134400198608168678756490519887562990165044958599474575834979005035731090290356781056' ) ; +test( macro , '-94906266' , 22 , '31658294146038073140673550517958143193937503699159895257943887308245045293131342388364082990134400198608168678756490519887562990165044958599474575834979005035731090290356781056' ) ; +test( macro , '94906266' , 24 , '285152565696490625870442272729395647608950351839474257315727256295452252799048325652363949074270810510446637480253626162460689279863201482867682864836827407863087624820569082929394398407950336' ) ; +test( macro , '-94906266' , 24 , '285152565696490625870442272729395647608950351839474257315727256295452252799048325652363949074270810510446637480253626162460689279863201482867682864836827407863087624820569082929394398407950336' ) ; +test( macro , '94906266' , 27 , '243759720926361233482907476667027740766805627065699088178027236643247725320494107064742082561094618490109236612895062687353584665860859991879415575955849317191261917932396860642093944856375991467562330107969332576256' ) ; +test( macro , '-94906266' , 27 , '-243759720926361233482907476667027740766805627065699088178027236643247725320494107064742082561094618490109236612895062687353584665860859991879415575955849317191261917932396860642093944856375991467562330107969332576256' ) ; +test( macro , '94906266' , 29 , '2195592394049166382906227581924066334663790360178733838688076505880403691220571309390729652591082755619543107564008226799137799080033434887927401578673812379447379840039807149661750004725486244752615902332029221197778610238611521536' ) ; +test( macro , '-94906266' , 29 , '-2195592394049166382906227581924066334663790360178733838688076505880403691220571309390729652591082755619543107564008226799137799080033434887927401578673812379447379840039807149661750004725486244752615902332029221197778610238611521536' ) ; +test( macro , '94906266' , 1234 , '9591583891277388505525115654797253189447136886605641096683226693736396854292872290512151998759360923701943145747583511134137237540129219701865806527338039412393513087835762990942813556773080107716234535870561191650361302039829302403412946075446106825412751297892836531217239269776359674130746921131965972537264150037423340241624478540689955102073116137675285513450572840589026258095131250791322081023453951176768841489407000043160535726118339631576838850502482585592200779524367753458287644483993004333076374919449019351020134267799153173432760508245927226301565370359856673809842061641312175092790578128981482583891661097755340718832041897219562172618233303238094263205645877970358113993768074445674320377240792952208045529432335140630061808861188401135379799521387052163956136888910117971768073860253216476475927368994288414942490447092525755875965929318466574353873454174423568978107060092961912237658617656324665296966703692085594297491801246417796157302870670019421897078307859164701722985884435622838840530890375919184262292483249645237441871417071068806838100941596745962353204182500699553236401634245625283851805217533262792073996012743903038338818229229536055186386872511025680807437338096861815569495459484486460365583028341745944192156249359977394771788868182593957987578355313292235026581979280145300928658410955632509870162005244044559296175541745959995285799355003323443377883778100846086239675150873016131996875930350018015992219350113946152537456877585388442767668614805636644492157477034654015002200777424371801710940679802301822648705115099704427481311918749176783544920736529548586139472683949148040458809863320043994900963476851393707718685357960075583333452093866553065546077049928960672319740544152092427005399888194730320253239832076741315219908647683627978170933321554476794379260071113837209591838667536304118212015385101618506499462338145076365933116172453086230618448544984434420121504363011969733490863691026519845481227162596252154043336808666820679272401041855392723131101974634161808347994859566559136073803551874710780721574809835031749728330936601228289711332942475487049804198344632033302735878413333870324928721703861529246383352099214222474224938703923296131257451581782344657338446171822905587284519270798848617615383853637901599987735072168595913644523892204610491256735570544171294439722701186324784813173174483048007173966323269225972341862131385921920832169574095034230665694523080098106542220271445953212355824376796872664899930405078699681023392941095533624834406183151593571978375085934954718772261954055173766598828049519860162686382244143267595319712518638744666104806572606245449198069667116209595882863289884166226287944224244325912368780394022898051057039098547506174697498113971272667929236765997561816214125329832660683430329906332085061140646573555743366393621599195976267935743727788827183517095321230820637742126067889019665213164390290062070086490541490087922889187502866643165223474222152292371630635439138794711457873999619661458114893978180017319683380126983120641424939879059628457874620836535554946801030253436946381021247115406263632484804383695320385114124544559909521290483278475119817164333705567704791958463532021771160857295222557768598737275557446539702002377398605084666447155176033668026697232370808420470009321148824428418389705572556366704189822047227135423662015737971723144128915366318163252037686350939438961105050312976676967329177197952756021289597791397338470443572707715044081895964751092291481135333163500784426335086969222350790452151470682249035744789451673722795644580346446427237748663833724773055738574222477446871501122860335729438705137534047869725490906711494592485106885753816974753130866230360407926506022819960149735054814022037339465954340178612152040319878077106430592659196961703359784146025873205470608826469128543078279531426173587139642452817225181534576963768759115834369507960533557518872119645633087366816494975254571143679899649491717075104399517306160274939826782873377728147095270888144396760865832963585642969396605820937742695276189538284034362525529116594250112268646631014509298531366336740362116463524994112518288361022718725186733909161021464483147766958810416653193317981915259425065001767448497554577639274204071071705244125471084327932064913256116544625655097111357879218899746235180031762344942760169055331365226140925327502639728177654134067427560672144839015071652189807317452445009056094721496371835728117777604974208279421394708930008595905196768223073852631733496851110527349046730941946132098007584486429686144893021869768040494264750853862282987486806138208661684993068425524750265051353734028906190482450851078570663574840036302550770980899456380758967689998731148592509807498959236086788270504035504990430792437032016856376680319178405811261802074955061597795727228291245608975661248511105127641151300865259290562972594488780807006164810445138616615841618866683247778933343790417183231981709585853401070402352247880227834733605154654208405827367703397973124817867577312294892836600548995170550964519017755920491134728378033326750515727791786492541954821643732033152252733475994603308334780140629373474610355068194857748405815128125330220343480629589196619680550886899725922137105216388200442015479933602992398666447348073001184279416147051990832666558273496164807310852154387305610527877711252422415258565032409894506552122659357455434448999509546516876567873333914554650709822738555250110914569231361810681278643896615945548615899639843813666952141996624167611621492507842243902766221696245619381375774605289899874210671753440701163534059875806083218591213612602297792283259653398593217024941897584586879309412954558704641934429167525386399311944692329646781017786882955521326213679515731031183203986702444464679264883058444930210295590055606165224085189224526495039065334701181368385574370869084681514830806912736541133960881470315237742308529215400374398116689039427221492261470641437661432564644402005790004197437786314907560361356740707196128715870019180872806279505931484886218059480821987893092959069213150697966414731390314378598567994448063764696914845544937095976949556292692796483284851190274166372600687071534820393215816026820899675947738834985468497728922675033232726987359807157258554534363387708729838351923974285515021519390503787211158967755318117395341875443593494088249677470509256804069203968911906532856935833859629624953249282547694462129874921376210457781519780672138068580237523242109758156352510154248725657237885230051785607446612712455877439910598727422322236228918026459822218149591970911650199903977933286839068419271139224493809573534424910810569507347636018232048772842840705740610444557659804248321191219347571463409422539969701913590898411004567236097895765842127957787359469025195874392074029652861324112210670977858242810226625126442091294631154867160280576157087207127738748079837969738346736272907326954078228907240806250022030103243471070942620769424250383227664179624295113595650922927103176569104163069362275506704125229083883227741648535784720713916998425594827704884440884048570231868405014498867352517286315804797924811180126154783110497902148043082659366781977209563715381227919869341778767396699280870862522931948944127530770998030252387371682413803951145767257140559728875692368709218878174221849437349204586631919443118989273373652595227172082496817103834248085354242741398581443429002334727240172368808661300231451115291328199507370065934925021969833175256299351306328641830228271353568846058387616229810955704081192557684947405779884509699286099118817298430699433547211009079482595408740285359093432367204533672009970779486719368138866188648840163573708869681067182080546042978337057745453023016747935779322389017812077413454635572131138070447390064042098690495563990815384766717508180920795876792077075958862404761890064984999921424416035664890724207484476976948663181789371914701106962448405463092701988465606503300165084244328789019795067098840871060483436479149382772059422903723115301669510704882112896208019251794996975248024340609600192493149267102552688418448337310468569703642800278151785183841360284358832347643596421881526596665057964053827050804071884062288727904628572069704994983452228398970557246268968220658737939309295962851885135390864007109076454907858176227575944339250250806424963701992166486681083315296440885760692193722152386434371762373410590481977858473872297435270131851901627945492845960665561756900237380050320337739114937222692715636345829089022971742750975497841816680681521790589482652539674743477542852811800520246939928822189145763731846324657221289024648931687399148099267044885671733352094184536756797510551247165871717923549062099764463998166198147288178913216151413981763321707683229249020148234875195737760846468403561985525050842464738232714775172951842741929209903518935372911660933298610653450385567441423081564273457132625038138122267839275539394488317379385537074050425412207154034127084217300615381424425706034294800775550428346687417563346954606915929811701307971860847947436154534973614176016275979962289620596506204146325423963174288918311054000291798070696992896378237251211848896156990492511653866861708727175129743629232669035317239800711664336916352757273273019680964663040723297535426909582937904934585625428123881208162294614263698939436684681006337738069910841585236458607359914206604759267241756962489475530594581950179263984531751086934103867126900494224276800810684669857022045988157595957258035294079410835500711458127756501041160821464860452114868285466846677033681168740753966890869829905162812697068968738906495545558280538657098494992456740410755232449109163731371774089491724693292280219243313432709883187604627083249554581032445654578001281629105731324709943235755260023344512209169158809774752301507192585314852433760106795543790072985084166023044553539415733291732895468679601579454025049341590670709620736' ) ; +test( macro , '-94906266' , 1234 , '9591583891277388505525115654797253189447136886605641096683226693736396854292872290512151998759360923701943145747583511134137237540129219701865806527338039412393513087835762990942813556773080107716234535870561191650361302039829302403412946075446106825412751297892836531217239269776359674130746921131965972537264150037423340241624478540689955102073116137675285513450572840589026258095131250791322081023453951176768841489407000043160535726118339631576838850502482585592200779524367753458287644483993004333076374919449019351020134267799153173432760508245927226301565370359856673809842061641312175092790578128981482583891661097755340718832041897219562172618233303238094263205645877970358113993768074445674320377240792952208045529432335140630061808861188401135379799521387052163956136888910117971768073860253216476475927368994288414942490447092525755875965929318466574353873454174423568978107060092961912237658617656324665296966703692085594297491801246417796157302870670019421897078307859164701722985884435622838840530890375919184262292483249645237441871417071068806838100941596745962353204182500699553236401634245625283851805217533262792073996012743903038338818229229536055186386872511025680807437338096861815569495459484486460365583028341745944192156249359977394771788868182593957987578355313292235026581979280145300928658410955632509870162005244044559296175541745959995285799355003323443377883778100846086239675150873016131996875930350018015992219350113946152537456877585388442767668614805636644492157477034654015002200777424371801710940679802301822648705115099704427481311918749176783544920736529548586139472683949148040458809863320043994900963476851393707718685357960075583333452093866553065546077049928960672319740544152092427005399888194730320253239832076741315219908647683627978170933321554476794379260071113837209591838667536304118212015385101618506499462338145076365933116172453086230618448544984434420121504363011969733490863691026519845481227162596252154043336808666820679272401041855392723131101974634161808347994859566559136073803551874710780721574809835031749728330936601228289711332942475487049804198344632033302735878413333870324928721703861529246383352099214222474224938703923296131257451581782344657338446171822905587284519270798848617615383853637901599987735072168595913644523892204610491256735570544171294439722701186324784813173174483048007173966323269225972341862131385921920832169574095034230665694523080098106542220271445953212355824376796872664899930405078699681023392941095533624834406183151593571978375085934954718772261954055173766598828049519860162686382244143267595319712518638744666104806572606245449198069667116209595882863289884166226287944224244325912368780394022898051057039098547506174697498113971272667929236765997561816214125329832660683430329906332085061140646573555743366393621599195976267935743727788827183517095321230820637742126067889019665213164390290062070086490541490087922889187502866643165223474222152292371630635439138794711457873999619661458114893978180017319683380126983120641424939879059628457874620836535554946801030253436946381021247115406263632484804383695320385114124544559909521290483278475119817164333705567704791958463532021771160857295222557768598737275557446539702002377398605084666447155176033668026697232370808420470009321148824428418389705572556366704189822047227135423662015737971723144128915366318163252037686350939438961105050312976676967329177197952756021289597791397338470443572707715044081895964751092291481135333163500784426335086969222350790452151470682249035744789451673722795644580346446427237748663833724773055738574222477446871501122860335729438705137534047869725490906711494592485106885753816974753130866230360407926506022819960149735054814022037339465954340178612152040319878077106430592659196961703359784146025873205470608826469128543078279531426173587139642452817225181534576963768759115834369507960533557518872119645633087366816494975254571143679899649491717075104399517306160274939826782873377728147095270888144396760865832963585642969396605820937742695276189538284034362525529116594250112268646631014509298531366336740362116463524994112518288361022718725186733909161021464483147766958810416653193317981915259425065001767448497554577639274204071071705244125471084327932064913256116544625655097111357879218899746235180031762344942760169055331365226140925327502639728177654134067427560672144839015071652189807317452445009056094721496371835728117777604974208279421394708930008595905196768223073852631733496851110527349046730941946132098007584486429686144893021869768040494264750853862282987486806138208661684993068425524750265051353734028906190482450851078570663574840036302550770980899456380758967689998731148592509807498959236086788270504035504990430792437032016856376680319178405811261802074955061597795727228291245608975661248511105127641151300865259290562972594488780807006164810445138616615841618866683247778933343790417183231981709585853401070402352247880227834733605154654208405827367703397973124817867577312294892836600548995170550964519017755920491134728378033326750515727791786492541954821643732033152252733475994603308334780140629373474610355068194857748405815128125330220343480629589196619680550886899725922137105216388200442015479933602992398666447348073001184279416147051990832666558273496164807310852154387305610527877711252422415258565032409894506552122659357455434448999509546516876567873333914554650709822738555250110914569231361810681278643896615945548615899639843813666952141996624167611621492507842243902766221696245619381375774605289899874210671753440701163534059875806083218591213612602297792283259653398593217024941897584586879309412954558704641934429167525386399311944692329646781017786882955521326213679515731031183203986702444464679264883058444930210295590055606165224085189224526495039065334701181368385574370869084681514830806912736541133960881470315237742308529215400374398116689039427221492261470641437661432564644402005790004197437786314907560361356740707196128715870019180872806279505931484886218059480821987893092959069213150697966414731390314378598567994448063764696914845544937095976949556292692796483284851190274166372600687071534820393215816026820899675947738834985468497728922675033232726987359807157258554534363387708729838351923974285515021519390503787211158967755318117395341875443593494088249677470509256804069203968911906532856935833859629624953249282547694462129874921376210457781519780672138068580237523242109758156352510154248725657237885230051785607446612712455877439910598727422322236228918026459822218149591970911650199903977933286839068419271139224493809573534424910810569507347636018232048772842840705740610444557659804248321191219347571463409422539969701913590898411004567236097895765842127957787359469025195874392074029652861324112210670977858242810226625126442091294631154867160280576157087207127738748079837969738346736272907326954078228907240806250022030103243471070942620769424250383227664179624295113595650922927103176569104163069362275506704125229083883227741648535784720713916998425594827704884440884048570231868405014498867352517286315804797924811180126154783110497902148043082659366781977209563715381227919869341778767396699280870862522931948944127530770998030252387371682413803951145767257140559728875692368709218878174221849437349204586631919443118989273373652595227172082496817103834248085354242741398581443429002334727240172368808661300231451115291328199507370065934925021969833175256299351306328641830228271353568846058387616229810955704081192557684947405779884509699286099118817298430699433547211009079482595408740285359093432367204533672009970779486719368138866188648840163573708869681067182080546042978337057745453023016747935779322389017812077413454635572131138070447390064042098690495563990815384766717508180920795876792077075958862404761890064984999921424416035664890724207484476976948663181789371914701106962448405463092701988465606503300165084244328789019795067098840871060483436479149382772059422903723115301669510704882112896208019251794996975248024340609600192493149267102552688418448337310468569703642800278151785183841360284358832347643596421881526596665057964053827050804071884062288727904628572069704994983452228398970557246268968220658737939309295962851885135390864007109076454907858176227575944339250250806424963701992166486681083315296440885760692193722152386434371762373410590481977858473872297435270131851901627945492845960665561756900237380050320337739114937222692715636345829089022971742750975497841816680681521790589482652539674743477542852811800520246939928822189145763731846324657221289024648931687399148099267044885671733352094184536756797510551247165871717923549062099764463998166198147288178913216151413981763321707683229249020148234875195737760846468403561985525050842464738232714775172951842741929209903518935372911660933298610653450385567441423081564273457132625038138122267839275539394488317379385537074050425412207154034127084217300615381424425706034294800775550428346687417563346954606915929811701307971860847947436154534973614176016275979962289620596506204146325423963174288918311054000291798070696992896378237251211848896156990492511653866861708727175129743629232669035317239800711664336916352757273273019680964663040723297535426909582937904934585625428123881208162294614263698939436684681006337738069910841585236458607359914206604759267241756962489475530594581950179263984531751086934103867126900494224276800810684669857022045988157595957258035294079410835500711458127756501041160821464860452114868285466846677033681168740753966890869829905162812697068968738906495545558280538657098494992456740410755232449109163731371774089491724693292280219243313432709883187604627083249554581032445654578001281629105731324709943235755260023344512209169158809774752301507192585314852433760106795543790072985084166023044553539415733291732895468679601579454025049341590670709620736' ) ; +test( macro , '94906266' , 5678 , '12032817648505424732206470115984402822087851800458754279636201919240648069545320866560153680915753098175361305527571944284392752569770663535206811189003646879509578656245380134150984700793677615365069140988087774074093292666569225253766058544069550347050527174441848464033769865947958339935711577356378541412264423970226396093645375936214905159261610350242858917417274825574404844112579056015150088968297195170716956710849024033030314901530321313136125969347224049980779583582657176881341711446052030096202772974538698445525008118596374161589518848084436336526803665941965555491104046737440894040963947109593967956480178145670129677453883803551841426177253469183865084475725595826142523985262137749463269279257798034486481726137836527313367452357290671314328438612857618515953366030368261430360540763695870271485039165724885752553866509861096959097856524796407276935782076995718449804132659747765788304047343356811406221119007276554404855974610764195529043031625022180466201811329438874115924370207854394962989072466937684755950839558855381231468598531110161791599549283779948049180898253978038930131391965203934491358832834904237088198978460478436435260346993291323788040533668759476466237387161215852475434944660862309069972151382884427559495414208822804115701913705271785723745174681820409251541457004542480297333724163305849231905385022165131472866706690289906743159860846280981424473469229829927326830076613963484251270728729574503814307791762786013555601416538606549575141032711025523511415888723638864251522238403514209615257991112949184147400897053839753457149809381976922528684839893079020417567683858076689900826568207181631852815210327645775199600779525983840187855012090137702437886138818889991865427565806357553975294746020041388619646758784835829444515981357443648673117967946792507459637166782407266051469231502300232276219189698940875042523547644156383005262958119279161427467899540186226164668917413440447866544343462167108862890696625841719457545138663417647004060269444482339780740345497612893664834632640370620127200676855405941531569747479245411572674091251818894475403815473239183886002466157193530057684670655605573446847521994094849382549641374712884009164471656571372198449910168561787316766669347248358805643837182081303781837240736436136105361562692457596834668246060064085754181237451898863990804515605190388337710712867999191679779786712129894970664010407413944105206949638872966539657011251994137558113271215952893544638320085154429394938826746648785358611940674926917169614084840845838330085461611673093497785528104711054917591387941532664903919365872012413967652428893771254783514729383993987904033719641464047625904368835612214247748109590039950324488045520862407963337473558506985216736383673379753911040520601562793518299011996503309262568208883619152964120357680502143243237914460301562979082299253093538389428819917042632652200784610277098397358002737455993489830854317722387980601693621640290144850488960430945867613445370736462277356198969776749170074469142959139228103077704779948067569593268552335250360809034517777505978089487420438155196173015195413707500749188879413696451279508390758428449841376760780035529721795084992757493136169128293321086137318909063123039058397266188325938039949845723539644433753473294540228295834513955127390193735537175144046212555694020714759166871608060391688382739009845903946202459806666413942788393631458788321174919289511304789355666166018710631603596670860213317167734166889129692249373293565808930204157031991011885528221419033566927244666672894213270515941662085431325595906230594776340409294990273749504264542573465334640502232608314606771517369952134843645398223542989247175132652279714716937433111501880963356885109815217790196450752957228567594353774344623557404477791808889243706743536894781675724627289947304719225770725660654839527433954061516841146022327990899330817724998757824990111295998009049097615922407581255190739491092231346117657541300062685972295196237757295575969914209258890395384934110805224837375196790993957760232726873726409663790983348867817606845992238136671232375378383442128153562558993510087405303974930371982970935436148399729480315961683220510601978266384119209049691241779665749455934311999233053059017638411476295376290561801091208176239186699145687486729178616233651626665713543619439901912710580944645778155158797462852234495229231406539206472287577297378192253982740258520802032184319738335496087808027150192808403729360390814153726899607792522414861087778808864723924610633595805110618744865362177310122714818412795648247881041310195803062313215902474261741174952685814591966714305480767184438698736320248721848847642234552533028696642298731293921638337742568224929679203340715151738759154672955264904729487192815222409704216298143439170015879950939045057249309073969228984931579994969781518397426907617306970452320824844550818387028299796381307177696815835155244322539561008715495766453539759717077193466845576102664991398263517768253493037683951482880594999592487164043876965317780003505760527667863680438637377024026769527929551980088550989890140816338761108689882533404008958689956441208348099517790655163832888672441196339023333523558262873440940381150551323449813051211874782355328615332116487157592812281631495362815861059878771091573384226171301604486063550985885547526084873950124641753676687247950243102682512625690242813329639053488889144642576604385864315139668920318181435129690631047099936094981891064896430786909547908075022480142180945007023530760518540471631799916726591085967028615767603414815858484391191419226449103172750734862583321173181611826808717155895467441107144481818474820145538915123191086233889850661674240080442220814781759930155904531817862470486365345886110364369758405347228549431644962312521692584793216958186300617894642831369657323204177058526995631057099851113254417633669886363824556236862260831309128178167803213227296932516696703169947834651505156750711821678584827987720266958112228898408860533624224495113943886752312598411859670081240718595741432294942764857421091909115884148224555916194806655809926642996956901825501253612530105826618755517164012710830281242388235631527379824843157390117320858596018324726028114634513731910537333745080425512204214923714850269287802358237211241477533384595700504349352943037853153152826576013563379638817785556868194091209215931133480115980056464675106593427706835334947158188177836411830984886508981465689899139213351717298512840062197481925426346012965958263308687858310254839246643736356288094423514700890181531946170936255870492888090106543963957053638462537602324269379083493214926494662001476819723144975153483394390016211234911521305578087159665053195506910683427552629512701423004114557334590767201287380253575889880716924180835742565545587297372230588277744954790269429956487792324583964844408254629753937326834163368789921452639360922619001644423905992054827955523551707437217080870067136099865977482032198335037959434533270675522876697240093272437334734369226923188059535469846991641709332683658104575190444624146274210567461025953960170291512193215781838523322046313242892959796365884825784776849648185822682474064256026698235271594627736075157465861135739641700807125348820678293047370189781363932882694927128285410177891393529704049003357809736578523395638279194743744900566551317265479571829718951144370147604490513174682721505873577926782362538993812368812010097486662549501136198241341798084746545706437440426878375892211248824662555732459007737499801554781654267879320262704068105933519284285796739713621966126525083860893611057628869197088116263187425689411609090653720984344418988835030010895382016374020344833711823116640310985731777663607552620413465337138339866989132413420055538428253299998808303388845963185188581487436300195905101117842154869015140378602684126069213877902049366627282585389279538334206573795995374258165195704570108297045710018639586996443344402990380550529595121860257242747783754028054652596757584727739810928998066179549536463070344995795834380103032675101592624345721957432323326573571256893898028138781425679040966486628547984753574864434930008117523845237304478890899718331660641419486842158394473459007167484277217322766481893195761391938895623708651566392702159311537448090535583956495076752757058074862172390454533499093851240951296540985779357629233421157703016528130291156343737642593244088633852787614747817627060006991669568592280723672383298225466281340956636710431940328427911743530915134552931031391690006021236672575108176444082447291342833803642309708607039528118937917030486917866538554824932145847913873347906410715580065154707297637925304057208331186121542705437629918199561558440077780020149125928636524680160377906904253706618745984744483286494859496634897033537125257750234158366566522768726012073504864415325607039305152748943100533772051166644314150037384337861942612593701611683871218292642963890517076695142661403572711320388033047007398654918216722136161411678662937623850123091604556006551841441589614125921909593939770390437476075298171895573919863135651088828848336011726492799841320111649935389358931258373693459145057553136475922751342605359538155293383583876955561910069358749936951011082089615693841896629336961254394974036986721026940350856347077152772939451280308399363104652576626172429793776211333913295809413213919318285255196490381055544205313396583888277769550637211217647203529389040683316967313521879297011278503165986866646581137787534538214235999303080897442666172258679022325039014548620740672684311806497429047056530576223713193356973396804439208879107248745042555605441287111013049709202762299259851107012441701468738419926890133556245430056477998293002461917643271629591853938120614647619772495115562085600504853146424640985096824494050598829781714618733157799877227971474455616632639023850925729720213591779252776369176312110497936405970870772189359848240927140061006848080799072830556306659756678997694657936924990345096410314626570672149731543628000558026533834459167842889970614149005288838811229513837405392153251553605330473659867312295620005340633564023904208178972115034037935254190823029327420408002622341072381223538257497215682930180996569122652703053739471871654162569414951520531206458862671624276235522538318964461432849995356820683233465138675410827490596964352422796420736525862662409202276892082905745273014755041772993819374747043291676296825571338645605019288235828607460219104472171905393978286058711994994075946946904501719626129891297785262794903831823520324741271326470009925340248044413698893160087471101115598827156017322849926448246890250940872800969912833939106037661646340854638183562189382226457787900923987531877913431946108694947652717492923066187775746930063437977519195800521298729848366280723108648799156318978065768015360592367479405252285966318000015191998608772683676758058031311468294723167697582272502760859874036909801930740974001192058591430098287098021570441654592505727247768282011756726844525801256651444301950079120380718219338329468008534442846077685713544194007524327955071955226200530986913459845314710510719058167265959825133876149104200332459364223361260375456263610906578083438476313348490161343553564484692187424842603773823747426008609267536178919597384345623591288999415207111940819590820240164261067200326676758012794725260339664703418163303398007586421287243859016657962176274532712513078145376826038329107151236318002243613099209970831731135481008172826345298961517973963163916705165676097591487481466079223465813873607872273761995059993093591322303896613664321628779241192911035846341115545622374501606127977756985292882117778296500478276339993749813331078686903702537331445966445686036256887898585809843950252338373839157713280364698259134024338989451358780140559424371687870519586950515334379886144076554360694721608275939343734737390935610438901882220547279311828445041103639111103188607674601360722196695674871077543938123944828376247570522481733445127428507577252676752726828669296273888040688955392452214259080886549295627930544496374040482414174429554699068859457610531632589984450033487991393950194379605142460240622750964605904319347162317103632880464489765441781176775360255307983114046972917021261575999747919513175356289269738252254493902081778863456041493700800804759871388208118144666431845192191907729537903174959385672176640184810677326710369561461912187493932368918706337698762794615949381684820435117964874003383886204354335841513328726838198927086809536254198720567097588143419818644573075112705490751622292191492544793418111741658483532767411666600528233897824313428372479855025933866719301492980684042893544902172403475761202059963960896638007212043160771550410552889811065116740233744236032304871579001993160935959555347073311004243774883544443676731406104831265297661674183379974269379741288515676564618943733469021389351199332674318818115012130962124777380484159115171369334822744164229342075923978372260068788894241149239047819830879098322853736363606047921128478685310683095184709943048770806054769494926160412480736093641419077309213991679052703634396648375610853612922041643781461899880570131047760466065993555093987696077930050904841973329976985820417577209060155514571722895551726144444596204596782453047002156424345570004197583274416101355362390738881463523630967387072211376360805282936674787380880650737793203297867993622101141663905879536696169691639238866186158654641243673999077254707876292273024963076334728546666159776798341058364962760500123648903436613222992540337677988477671022338118694216304682423334130149852860681684099263517683335157344038308938179479603858917811593200169277994326389000742115999246806304045702432487140508819529399245059884575934708946209516322574789907597746226957553035886293114377154459544505608389208459380956440963140789343305699658278203986551812398932069405456026560759534279324948812804513062587167345623977971097453549344764469259507711376402428457076157055436430677764738886674081844106383742912023140510418552281742188746389236111863491148474361612517064934024896521322519834851151242772104556306598929440002152036519490819251376805450957184749544824693635603569605225972053841581004501584100912328333976003102107491085953159226069012834587327259971112025925123819947881840747175767809667062611411996051112013271091350150777864798314871955256044949338844757948457477116889094191094382540558054779516264683712607043026838398910328428087833751980730006443119069122334166099941402646601365567136347123203738359088947443981087204456279328714404539183793412240994826870342095392017313400572110318532747843060607288706258394994682842520556381575601014199010490404397191138445152855809707016425452959778664359588040560748735412597512323836013768239677434435239189168997928071347187463000837985697466045497488955639372562589230908251673255473804486520327695043897071532175037437036938183448706068445520270184271860267785443607757449987645862550853844492488331774133732177529596230056374085739368318799336491781716721031643253122590074871792724944404133795117394685504903169776472613579323786988436816555044871147023821295375315968422237070919604915553260798754019817204005435917338028778866898767783201988249690480208167510788846166868446591501548151404396048081597044050075742974387127512894683131544017091983972922897201447567071326201918658162425054687848305577141613831948331736546313547366384763806330342036329442085133559102820443474867650075586800703988545083847887658720938137520387462853564941611748541059186958982227681935894334481608643024722381659381938989731023292291485815605912701175709672139292877678190348729760666157907954715630362098750256936461038759071141133514628511273752727853532279858408268908582987443368819679334383388270166337798654040644855690261540077459818835228437887729301076041005381936867843411337332815350029407543350462675437781165812720616995958519407473614668214152449569347793047763581660230557418465248972034336442550080954052153006780131714480535397523095413274750723701383225842109411649460720870423187520888470553057940395347526767669497718524603967849112705432812547718499111843247323011841160686418751692868907882025078560674843768816179401584803887200747810776387544791913903025938435744852431951915576190055048231754367790804864233775987695188801541755557892125771674773775596365864929152862381755401283073853655055425091448611697016439954534260814030388938640509188143381711317813476900790628429257746511202468312957230036100116864480097621669013542313504580498125607583068356957065062879843861421422680449125994612477774818757161945326684776971564527300842862017927612360118968033138171953084120164381524148059624459163118084096733232992442581634862069037490046169948238393108530288105627559374357574375901411757444196980563141505220137571144388964279304678461638650126063683382309278978344376529180243251205221507357892280444330744741037298325319700933898637890602101615296398869580920345296280236271953557041411865760773333961802153204654733800918538855539998075391359632003872695291240543210415227135533202642183404859216781849310678370931836038236340074191979283348256435037626347573331738056630737544630627819667754832890022502410501605907042038148659166291897056811128443400490554763520515617080334010077029504407741614050704547796928760915765587321003086708428633478958994497231881728742148146582878333513294577932133195398397292515911616512890368305984393578729868207205694140862127741104528308067361504231110165275192585475375358000676577709244330704876174208560189889742189118009170492691256513264181013828227165086680711420434651576133518693155463307951273683890278139573807332751907304778544307753690835516724244324828301915566152584064392368154012296367388561296655115159377964858217285140994654349136595083503371058992673764518566714682145847493882822893394347204092233214651141128348419317600574953305420152824611858556704207679618775670228729011916634895546083736101005758230326310636673429185051800939052184453293132762586281584909086427718838454160054742974280328396661361347295963302563629881389597757395692922460506227719569272480843843963982294218088153904303273847479651330200041676283719440322315419856051041525940239722748989045813626337663435654703148317669134876847555469792411025033420364193061667681444556983341506990373187827551963387220108573965968914968862001608003924039023517819236072227063268657970009813282109838740945014605897718935027854417422516891716032864362714644753952562246051636958846719430334197522545309124095753712501839140881772202359462149006967535743381987382494199903798783450128864108137711379338678990406261945617986484478017729513417966059143295468448727905734551655932034516014732958476725736677666360745474765405553207731525120976743153206626090160055202221435671053558239271799027644260676893678561236876461169942483963790905593236778663204622182700607533615177816293194243328323059827764195754067310463910960166786833097658112569805863287752396504825639025116157475645847961748673868648985763576921316360028625597643145982378614155913337308072899028630354506317000731973048320498440559655009741229059616821075679153626408071146949434874870710442443607598092254881233946034011674932649197951588391079113646195367873645750872572676353074784800670128148448926212428049339412055475920927927064266795956572600200498190491828386978461485683642086665791764122916337004769909968407222832293743026188332895081447303907350456907104380292438133354568556580913923940135089837451503139566900151184776483065461722434703576835856162451903500950263460660059609102492532142956330352718793762144273337958725209863219465403332730360337994136681320539676141959170028609571573318264331511603324410628374361114137620410932826988141316635961417071437490827691742173260234374302730791524687955576187003866752766949337018264318503626167264228405496153334243531140332510516296899883807675047755079172377866058979779109219361302539854229267521185113459426964212674944243036359083834041693510700598946606285775592307909800370642066904336886030146957671455743670251078744477019985475848795376334708946576839355982663342271782974876971670099428998708971102417217050194310201496909274080129838572650933663158961486164318754012103629249337765151672364719569977796470263610483643241743081238512099346318125509126340730907301902331865609410500322101548902016145028474991172896518663299753954359738145858524256241079822888388025974877315851174825234099588922307983039849059328140405070220292462966857742931975247086268060742036088901447914159791901545682768198127862624633726084182944519076169341611788879344467332624457235181005489161468437468286277927595231710889035229963620976542808014437720825245958218422545401854965717001947936025069441351490369482405131546123008735270958799806732505582384557603513044063735545265173441077422655347016647100822557881227410017918031724818941284851218632476074548990913121757687254853114905647152161232816453294063938585231011698346476850219902049515565302989770984364797494877746871059691242951446947928616748412677311316689309276924328166978373287156127637754250091827262880001580912029087294416597708081303921574616792751138598416609282955474549781919323050366795607116559122995449444513824012921931191554790229338378408917767888764757481247942357523387981462036482918774775255481502617812032424350337757705134963581392988233010269239543026399000590407670292541798141931143957825519431024943808265104606375893000801021372156629170649936482063505577146268662962099488092098200661611049654157290575516049458547343584333829118330105341165469101287828518455011376471874002702126745604311883893741228949110274354393717306210252780458508823091743222111041747254441747473986354767554852139796930960587571954051842952106734815850369832317500044882713313649500485928442503705962330735475241650188479077738536979346401179945139932535355966728284296269303465382689387382904506131090629101374506641285879526447951961592499074899803465202603048622508966269246410248303951769201230670090880245754249900954768059240928580835677018471478117764727507460788000454066509256352049419001433619066501137325877958902450951248012775946853069206507022910965027828695344876662390444745223071764327986092164128821369419529923449745342622529520337107152499452702345241141322434371161845076945400253720116974932841155231559246404477495415318558856170762805541331599037682445748096007207307457259420504514213233031560297159337458934773052943897370160719593071005636639052337398910516328917458761997763791052147675868492052732846056244343846856562859110918170514850638431897116103962577287557650861624128410941073015672545799355272188821573142146157647220592136501403389440498405045979220449287529240951068425759059315541517416653195735778257997109940532355650068087437125593263015404801959966170854247359416368888999714143993665160871834991848566207054598521044690133585142761653289736942697455812090483602711809497731994035628689666322904923368824343322943897077533662696509093532125560433883239720615037830617553062569400982442551469212711958432874003095252511501251544368163946986793533762477996739664587856894977815882349958159300266076187992625866248371863178211081986479246265805496439281433789465210502472287353963749371542009248496304898171325225431490404443696275192260731587223678231773234700501786989060062073372663103468326762818735022839079304658268264383403675611385203208802610883443153396372155598085767531581987651375303196560138048749012301078065330371665264754684135929975327450958445710569685713002470385735812499009271125281912305498904570924803427650562790575789311044993863517834700777416970146268592915939173835339588498234255520467622101245918125290891960721252962341466913538814589814214723753781664749478425706364352461070224233708179564135246880492730639677674623872309076224196922090720446752424962016499908060928640446088590198190025780328393379622363600793252241003767266825105789787022775751765687273282872681784817235974474959304500106923652827770175776376057866784637584218919587715646859185759124581929407837290204615476399831255232642772149604749965883742550558896424909600890318701200878005426405783690223803023797534308676408970377177829432708888482899871770661919987560426133634342816194791652942901002649991930864509397547495136799464971411961885951448364705084776854218557154068032421447791593957493800552595011736497560627402048363722641737191562791467192752850831819871126942696603819688457632571061264341307436496659871052442884327358088521230434779757325515620881755317489614893979565115465466459134952019342787508889329177160466567164607203135727175727007576133217386625201585733132524102256267135974095667268967387808616588507490403645684015340306735062054190431238197422650374750608082120129477961774411707229963815811485877200700501734026677170462507781454324736384494629139100648590234634063450890873793218123159652262636940460561659812567660405111805037271771919133677053378340571763804818663579984080144826950600742568620996921074204543790255158895558727569627833033922369940173618424508834111810651656048535574444567986963711635689671493979686086392051590735412326987468072321026945906095052728783747681972245983868013037928884763904299129826301670561248217272709934758302637217436483609049259979017913572017677999917451517664593806401100830094206113930664869181230286977905241453163705128560161844356057897016629444587321825339889932073812247330853655199279654850681643123911145550445824784071197446536929226480929787125781620877835455757799725872429412183788180777229189273296533362017032457858813870135280647619436731981832381160911893129851064121020987511004669726225726728447523886592540185823062928562680797115677436491664945960425463840352618701257065715147975721913145513121975941816861627415802916250662475683313221460810083733560259082176304656979800876036280685013224264755601477814078188584904150365677219720532288211268983178369847544314641858955739505549156547927819249161988086454580912459896288180831839198694747159727783540431533139780840118503526092188395999937083438859471424422484895173339353662013418404633914278270531257635152842306416202901968927515006838776193126399890861893238570955140721902636602451481280533397113331997181668368168114113211417441091536660280740752073688197951869383500740801485250371189839664555255637862300294894725338807388545090253060968823072953675487974449697590292547112002691372243223615249165249747041660867764509155511159477802075808850762651193636610867311554992969899613510446151689019965900866044828778159525923906714414752885574464308524982926278589922516043567064422228451889411464404645562403027336145425521604775172340420217961207569279554941274837915390099345785110541869546066004279176509714969623554456015482986407451412652305793262123648552417609567710229212341687156454311883528279150390985919008321641915631234630542109381453293097771127251164835846456017032621220535159510911806712579812990017904201396748639648986580416830392353504059649048195263808560060144490097812861709892171321718078141652344634889987253449435365479232110959791057112787715767591956424199236727218939549730947807636035618617124214592974632640888278642920646150269913678711900700105591753932021927544248495416598915245127805617973028286807341594473386206410511414428389049099794186454102765796914905933255458663787331998410234134210186357410895835541247415216366309533445597853759036910747535179357644751896549954802762133472758890605527381638477541022802894735646799360073180253868675653146890507692412609328780793399715860489456638327779713788516054313521050756108383748787190630773384260645245277015038626404267544599526329137987727604904731562738505220497843816310101861170621100872755427778464809073169584368881349788891479628643600529445515580370114613383736664314978973619136220173478287784163951945648158666739841536848953175419910538486514713806203315648665785618237610350582300314779025897090284284080969250933457877228872443367222249154142248644276474288044127432827952859178595732895202190015471726020796066245204963376906354394976290239211712022794927835141158864526574570946923047666699485949903120984263356978168759479817623935013795014196775910220111958690782426346191285770042525098984695899814199136259926824361465285823048578317155487790775485313929046655222874042698387928987865423117119839944817973165334672655644240394784576751152259628370824434663024024418575011518490382064521827913667162089667112747753535124207783675418967511974700275667309012046788487060329223754816307592779170924531501164340119876000139327544408024106973184674625473383812276564724893335841539005571654820183265759775079589751747626589104877587523415006319142401438844584683685256184472651725051979384269512266601971450685653366718533020065953355981712508860345534161752796241189385496331101145400268056092980486470369444513019881534614061799341395392897417347975110433595794498856720510672308772750213294104276272132667497463492787282710357371813082428478468377819129538727211815622333666816660354583565438907819881292081303387043386670876926764469958036489231885191131050114302131977936474847279924851923137714263077854243985023606988127523596289821331500111059950584764623037107983656960989438380956968393260575271072778863957365450795572899629582643385628639710611546711708409238271955614736601631291370395060012833231421354443797341554577170376506036564132217557077652411894117329603768900109332749511859736210742285027560130448468034446432758727729638990040491574996250063104797738677059556962784396811723371443252662772605997510646452758982125426031044458649357552995121303204693338942472794723310009789920455359278131277695870668310315876389946031424494549763773146136063430889417701887448847015328003015451499112860909942403248329916941358489871131665319203260702546158995642204910162911659670018116940727018797217171686323023556118323193198342370803796953278053782977187454671829418430921721985095232819212480102940486000736338657164939674716847410850866338919788038362565117722358348690989096737227059283378387520150072310475969531030512284930329368248541131113766926569221020923296593566377299675247629189109056398144800021591742635347744703956072123890797151089046108298526010507197557242777201909634714422471270603537857950184437259093361956113283048564569574122170292703201825073022983566835511332308338851334507372273081202885655714787807833951944184851958437229989794757451452736941245634812065844048175235449024407397606058411010621436622691612507865446029785762584964939590202876090478392978007566584355372687291804000734909051848660440791202433127588453190203200783903284912792280548420676834695155901857566765932088926634171356382407121102180333281700812579308596278561884268236429082157465746397088329202574170766452511505505609003041124950089258440827042552762430618486885201276510552341532342351164734524285396714462005001978788690975960312082731929333386050252112006807345880064713266643891024391700346350471880262858040712474770262634884317585612572195523131314179386278947285577465324615711086122333531902738278585784646020600313701514942125391959071309667102965885213697839889156290939743771636780743647494786980566347580750783699119643179162204062000548787439490012304199473697303589997900840621652874808426421326071990248127528436949608115779005494179734937511431781806145857785045035166485825750634750296960306410410179563289780730826789234509202931820390586826950654104129396809093876099264731036820798174964438055115624044199738101662825807851197445426685021856220844261848759266200674656511060029362486031624820819678918152181355926111923461166345822665086176145950743789341584980812952752231860843257985965288802261190266665922655937859396637134691957840093532444525473306658768602008060074798781369928554199058085681741549030727173827517234927484381244144270371887360574934364399214113609316363985218988683805111173090608023338304021000410004993333783004263450282560060958459050745590194592895933947062092079507573081523402757767724788144449830636192589330164576778830549052766661774876685632674136307814153444590770266999239828355457576813955421195065159397418434372715876860476997930972151568408519046320497117726447903332629934498123201460718775034315147902361476205883702162559670339483592737874161365824447049081019047867077729938161516575462820068029800463721563526770860295002450363435919771658499908957051051713169210155056685711478948292601652283703664279729412723327993385676972068945177529247890734902739568992396004082005895239640239584914895675194441732990455908284962508388272481664809644013695108530643590237328537639688567194704667459259852194847009346130261141412179411299994375826249494565666674099752312940749960678432841327379608811354294970105991967067932527833097758928415762643944723789054971807292766811411062804902336531718448905647640615296706335520835436041593386648611858094071235308269292644418143791110200993361422914793119640919331990182443330345380585754214640238824260774995215366915341497235208474057031765422776345411042327893101949992571577825558691897895422945443680380208657578495349595586606235401227143323363094432958840171215550050203924175856785197077586124718868813101246599573589030798669834807255201536300814627715056943239448585159116823195136012406495891984611338805585159868346247052637564031114665756371321951326231045738075829116360629934323624216434728253094934162532761445177538547165024471725562255682921126585840210275028026032072889156454737530566706272562834758199753126146886585122828302440171763025247744940890748240827209734322451822354861070551316853275578081420600654807730862579379336164296300651251035620903073641444759072951433003329108395228654468968443998724991943750648399825412774577834064138787246298154005871653201690041161564805619094094950177728315165333892502449398614595846310753261175601850635807705775203998921942871973931019055845469784764447913903988508253744480825540367906677867871057567478493188656741810436755808948879038430592843598118575241573451984420451874438273802788249941071249303464372879792957737080283657705694830680260355087766018017548240826889393233567613079361639516134438559058561470248595710630583243521624876087878849326799727058325744525127686358697175227126042729704763198212221500110961927927031953451726345983879650304506115735253749823992717894744913635383053788207368902228723257035589214660773099731574328578894614609958412257841707173544840654053687963529161718339377820673974804275660397594495763320761934541624154607081082091431381630887662852444276208094195753892541482888964133078632756060019952316521890141964819830541862502886279942861929515434864567266354539499955976735355894393495991004445955069390234829281284926336527704287398385545271066278910515123558177655155124804872688188708038652699563430158718539676417362165324740950301161676147226987091336686975730078772316774484804082212792921345388911884307584665906933970070288913666161767306556816492529686126542330576930427952309859851945687695616787391724886208606078219586577521157997471925755521830252778574776276558662045076936010197431001405073169538271205697390441457933908374685337544753066892359751986805458682161120599250577029450471790531116688637592044725816809350715401468061886209608998308808761053155925047485763330982810135796784437153235684378855933935608225979566539014908874229318867856908106633416008188397781368955225608754496472366002973989622781331076327936906421333836156329940767987829949219414282739937552368742050095369670510834581278968845142676270307586970560344050293627832921967047772968940770231187440894414891611957992234348384361908134992564366682665696510978419367665490400052255968546785818638881481409824051219338973454619317589006191281840488521392932267525779747925510077945960279398495734167739330399574628957203655424637187995438121309889157318399563297897718347938915006476879059728332276590034174776666804805807585137415933903539371546508657211772037063013142093943376911484717585548985036753668986990778732349370860695937442389869679255309585195314500199898018163496806602205369815418049524140539038443752983715573321216713716303309876573223472073494658660387196143966238355254434272031875166654429112534708035265585042313178039140504966786200157779032253018379775395031624177802409362800776274088937204606438009792960229334141357316853027529326270934813060617513040349194939506111829667596679721724554842338458197057324866302813949134291966549465895240393949176765935059682165276533388253260395177273452448414734481084363051946017495590145528378728694589718770632641502417259843086559611204202453814610339462803726715365311373975645333786896813006476033470456391277472796397664318741782445580539265623629643719879907041630801149589490342214249683643075413638713825740975202255710524519005628410890292248754754939152754157107953000785347651731062707781298031248059008088083511571893341447743035315052308357772390705357815401965655229378522974863831081531326498095411458206016343526704502197334552693425313951442693600699979416793419044571047950054591933973470783926474430571876070606494546076496652235432486913277445868254001418092467524424087719936981330245844189018050669626927477561635971967675947936667840573264315222817706208841363096504161459299455789615473844664822043191643886065072888244114235145369904453860898233956764637008735231406874585372559803108174040402975992668970470323458706663340829004120177247777909390407650943557103557176164798280730176947885600023350422406684015217003439639897364954618944020288720946937413542886098604075227026482788702174057857719036625711012261058982176805769679934893705049041439972935657555686872759565537429136163222780629831139827737682328273538007173604361766686339194080863757502388242360541635097206494291599132259373964992477759699130503679859467387685858969458881363954404384016848950761974795313353392698993567078740170008504367063192312102584020548165945222524105239691877251826775214235888083623030633684703867930130650125295968428623742677462191715457239299389032287069336032372302828098382506936703358757555827103340491155787211743066715263418577384309801993728612813203556766993754656540038816495840381520797028440484282254884632112821925210033546824602794396854826423202843726689970480869195071650949154727258460224485143154709172855637969394753939537534842454461823870448127360033316087549390339491932603424096663377705656553981384251344651715053403923964417851970419752086799349480032265992581424000705801737101791445964258963875786190924396690033057790178748531407381054411659092462411237526877645210411022521678216396060020924621034172725054413396654304600511543838181495559908429007654906632941883397253075597857634654462449755501594356663254192887988476758127961551318345779438588059118960711018114915926214069348039421926460721297822408069255012690250178221901583499188663372994201653644081755046119923887957198992066054340294114974546071159657605660183300202102344309467802093991861862965216891368515339833603657760186751215707978850910662690444513903724718434232835066662847876807387275374320546636913075891542321272611108399646743762333862252602882930547232324311990485665318593042026396489306780598510984447945017700408320977028919172057048382181924135570226760960898139417290817645998917756855185172967724992933123052909118247462398492666928951967247431522756106437050491531797002473836449419068540277472068963138393177448233961148030322348372301545504016732072510497336139578845609651207819365400056853303027235062359420018098760449076899084941741369357339039371012080828320780934162749276755522409809098153174862234168142466848375913203535996417859932173938627851656219636450621416451865792169471928789091851626456347026830292184338577370915000158169528450080894744186642838772985819834529563611933373632440708524703027899883434677586606441445529530405836184308602571764765354456106254643446906140012957381572512463660138820345199166078432074790037248546139205726353557158090656959024185745345956546890947422882539337183883406929169297400044137877815260349485959875657881972792337911693367611917919131915027920557706737769810315715359926487713855353321793871564010753738106086321230546595044476485010200470235649943642098272637082343166210803794993910337605136239806876905139720151979070575500255076889855737572108112919425325518445248006933632368025157148533351689787936121880720836116653840743617415571493745387797691042574418704937861768435997110148267844022966899508273305125680545431462825242960113760480968529000760808009707472576440561766071700939806743526995640583592236944120793230124851216017592161718568695361629331621064836815339177400421921220156618102527651553489597482005681543009594232948075392858721451225712296026349598054076571694498983982619415761813379326410749885515537518666751789095081260226732887008501369033072022423311241991556050372244766164397155244356247926874588767338935163683327933554702277547935287703755133035368418595728953591127644725043878325718984441974471692217612825126396314128770579712175562666092567978624210753782825275802681456221191328149519567354816438303073809218496633499815268520022429717046018825658842467015385712669468265707555696525948903227914864246346468870618605734062682911322413808861525616756567945364657325139882917475692209277183304968538734947428728388582797185751925085125363729075173796643775804671009928949220293268670456975658752584332903400349503949011586021175082326448210272758388252815782194585442203117090992668634959462750022443452546012055002758055127454792702255890205631701275211122693794920290417833369691631162589900706279105985583858392017695508708913053733434385675958920310284847781339811291863191093386084475914087239356382800972352347223372355619360570354411451544244307940032823148529609638296958288902010391872278763245256372127500248817419151015466871343223054572424151488837160849087690844793830186151432135847711240614541446439183938044066695316622116741046472939622004638961665608819717101930135624767270181741989733125492003140924411241153224900070754907516184957543551611208022204023968376636880451822691297708293688894074998217185540931850449663735709971989960908519813174658217406440733137654410084264390199313344416298280201059159586221741529060546858446825609039282323617534880583845852642034407748295813317970457691956263225675641685811512670217066518907796204233575773817564814095574905621916350619556603859001230105241016047652273704404479564336649968708539745125105915160022240368627482259079202336430778070946622175011973214230565495684814465576107906033710595350568611341645767396110859401880245617579689883266256409894693280104365291970684730005887925438391662019569596571533373614115187189312356643389006800187024689032302797342271128282171799878713212117329036060371547786892810406560993783700207922558468011335587906261901093629494719347614610784908347727972664981060886160896302867201510015108566161825129634975425024272081557002265941815391290337945136518047397974376034831138219062938133831604578871761305972624279786410979461568839594456833208172319195856872204542603316087926558321489377543723491132201816700479397540948217989075370768230671731249702531673564543406062253586483721876364885815656468440728188332621030006260484399864535626813077449518708844252479808421884652431126530875716970356579193081754594545979226680522690302736699184607929615623142663354132052863597405323796639870431453066308061197943832308479553993128427148101202879692518240366933913835269757022542403389041102563931777385856395150760422381552306943437155154770876052232484595793376372779715779096638669304485249549423986081793893310670696881891161170144901546778001550049111602186286345163199534989815372560517348564641269606632792272652115204168983118001639477232503487517975266466538605885310375386323449185231709798124778365598533541593980958124433491037239259424061787818955206789639301137224039378855362946151869759563140264720906997750013611877360612394880182302599632772460731913224265247765843851870907483675299829361720529022209380906861000458689821676603902075564791012594713699959332168445898305343858211764958004751287406251595999467293204674470870715167851421656776355939143657993736347249925156645471605043233097281630642396809038021750687833536173404097614118680059037340312341605883455235067338752800787033133391707487966849528493075647320868840934380554883195960251773502083727624240339456212211925683490737454112277877641954542607470029658579411795883383494012636284071606370192505278671353911009904407560251382987723241502706898676119014622076654875776162540892477299357715761700750960446391506332058899436675190871956939800022687432780180818392178709073123353331373011315965680280896735755650091675680722007667153708728485188186965653450591919415129897772500704531083484204256009802043625565542287774299566636078316295125113411325583706020566573294986977164698547137703200443022008505653377365378947288543862725055911788727943036314460020086504429170778872386381956215475209306444914466262735267509651875004139279370893320240127688827675054296294093093354920744403327434214120799757340314496705538078219995180518082515428583740839433883842984823268317117814453641785347046845620463915826027190815790559731433923858312882529042132987246860789417898096245935117545754705002593969747758470845487352156660639391962457416095124403612942059946284579486042861317902103275464677157584106545775551518446983441064825708631574744541847215534147110002165755331087323942894411304556036096' ) ; +test( macro , '-94906266' , 5678 , '12032817648505424732206470115984402822087851800458754279636201919240648069545320866560153680915753098175361305527571944284392752569770663535206811189003646879509578656245380134150984700793677615365069140988087774074093292666569225253766058544069550347050527174441848464033769865947958339935711577356378541412264423970226396093645375936214905159261610350242858917417274825574404844112579056015150088968297195170716956710849024033030314901530321313136125969347224049980779583582657176881341711446052030096202772974538698445525008118596374161589518848084436336526803665941965555491104046737440894040963947109593967956480178145670129677453883803551841426177253469183865084475725595826142523985262137749463269279257798034486481726137836527313367452357290671314328438612857618515953366030368261430360540763695870271485039165724885752553866509861096959097856524796407276935782076995718449804132659747765788304047343356811406221119007276554404855974610764195529043031625022180466201811329438874115924370207854394962989072466937684755950839558855381231468598531110161791599549283779948049180898253978038930131391965203934491358832834904237088198978460478436435260346993291323788040533668759476466237387161215852475434944660862309069972151382884427559495414208822804115701913705271785723745174681820409251541457004542480297333724163305849231905385022165131472866706690289906743159860846280981424473469229829927326830076613963484251270728729574503814307791762786013555601416538606549575141032711025523511415888723638864251522238403514209615257991112949184147400897053839753457149809381976922528684839893079020417567683858076689900826568207181631852815210327645775199600779525983840187855012090137702437886138818889991865427565806357553975294746020041388619646758784835829444515981357443648673117967946792507459637166782407266051469231502300232276219189698940875042523547644156383005262958119279161427467899540186226164668917413440447866544343462167108862890696625841719457545138663417647004060269444482339780740345497612893664834632640370620127200676855405941531569747479245411572674091251818894475403815473239183886002466157193530057684670655605573446847521994094849382549641374712884009164471656571372198449910168561787316766669347248358805643837182081303781837240736436136105361562692457596834668246060064085754181237451898863990804515605190388337710712867999191679779786712129894970664010407413944105206949638872966539657011251994137558113271215952893544638320085154429394938826746648785358611940674926917169614084840845838330085461611673093497785528104711054917591387941532664903919365872012413967652428893771254783514729383993987904033719641464047625904368835612214247748109590039950324488045520862407963337473558506985216736383673379753911040520601562793518299011996503309262568208883619152964120357680502143243237914460301562979082299253093538389428819917042632652200784610277098397358002737455993489830854317722387980601693621640290144850488960430945867613445370736462277356198969776749170074469142959139228103077704779948067569593268552335250360809034517777505978089487420438155196173015195413707500749188879413696451279508390758428449841376760780035529721795084992757493136169128293321086137318909063123039058397266188325938039949845723539644433753473294540228295834513955127390193735537175144046212555694020714759166871608060391688382739009845903946202459806666413942788393631458788321174919289511304789355666166018710631603596670860213317167734166889129692249373293565808930204157031991011885528221419033566927244666672894213270515941662085431325595906230594776340409294990273749504264542573465334640502232608314606771517369952134843645398223542989247175132652279714716937433111501880963356885109815217790196450752957228567594353774344623557404477791808889243706743536894781675724627289947304719225770725660654839527433954061516841146022327990899330817724998757824990111295998009049097615922407581255190739491092231346117657541300062685972295196237757295575969914209258890395384934110805224837375196790993957760232726873726409663790983348867817606845992238136671232375378383442128153562558993510087405303974930371982970935436148399729480315961683220510601978266384119209049691241779665749455934311999233053059017638411476295376290561801091208176239186699145687486729178616233651626665713543619439901912710580944645778155158797462852234495229231406539206472287577297378192253982740258520802032184319738335496087808027150192808403729360390814153726899607792522414861087778808864723924610633595805110618744865362177310122714818412795648247881041310195803062313215902474261741174952685814591966714305480767184438698736320248721848847642234552533028696642298731293921638337742568224929679203340715151738759154672955264904729487192815222409704216298143439170015879950939045057249309073969228984931579994969781518397426907617306970452320824844550818387028299796381307177696815835155244322539561008715495766453539759717077193466845576102664991398263517768253493037683951482880594999592487164043876965317780003505760527667863680438637377024026769527929551980088550989890140816338761108689882533404008958689956441208348099517790655163832888672441196339023333523558262873440940381150551323449813051211874782355328615332116487157592812281631495362815861059878771091573384226171301604486063550985885547526084873950124641753676687247950243102682512625690242813329639053488889144642576604385864315139668920318181435129690631047099936094981891064896430786909547908075022480142180945007023530760518540471631799916726591085967028615767603414815858484391191419226449103172750734862583321173181611826808717155895467441107144481818474820145538915123191086233889850661674240080442220814781759930155904531817862470486365345886110364369758405347228549431644962312521692584793216958186300617894642831369657323204177058526995631057099851113254417633669886363824556236862260831309128178167803213227296932516696703169947834651505156750711821678584827987720266958112228898408860533624224495113943886752312598411859670081240718595741432294942764857421091909115884148224555916194806655809926642996956901825501253612530105826618755517164012710830281242388235631527379824843157390117320858596018324726028114634513731910537333745080425512204214923714850269287802358237211241477533384595700504349352943037853153152826576013563379638817785556868194091209215931133480115980056464675106593427706835334947158188177836411830984886508981465689899139213351717298512840062197481925426346012965958263308687858310254839246643736356288094423514700890181531946170936255870492888090106543963957053638462537602324269379083493214926494662001476819723144975153483394390016211234911521305578087159665053195506910683427552629512701423004114557334590767201287380253575889880716924180835742565545587297372230588277744954790269429956487792324583964844408254629753937326834163368789921452639360922619001644423905992054827955523551707437217080870067136099865977482032198335037959434533270675522876697240093272437334734369226923188059535469846991641709332683658104575190444624146274210567461025953960170291512193215781838523322046313242892959796365884825784776849648185822682474064256026698235271594627736075157465861135739641700807125348820678293047370189781363932882694927128285410177891393529704049003357809736578523395638279194743744900566551317265479571829718951144370147604490513174682721505873577926782362538993812368812010097486662549501136198241341798084746545706437440426878375892211248824662555732459007737499801554781654267879320262704068105933519284285796739713621966126525083860893611057628869197088116263187425689411609090653720984344418988835030010895382016374020344833711823116640310985731777663607552620413465337138339866989132413420055538428253299998808303388845963185188581487436300195905101117842154869015140378602684126069213877902049366627282585389279538334206573795995374258165195704570108297045710018639586996443344402990380550529595121860257242747783754028054652596757584727739810928998066179549536463070344995795834380103032675101592624345721957432323326573571256893898028138781425679040966486628547984753574864434930008117523845237304478890899718331660641419486842158394473459007167484277217322766481893195761391938895623708651566392702159311537448090535583956495076752757058074862172390454533499093851240951296540985779357629233421157703016528130291156343737642593244088633852787614747817627060006991669568592280723672383298225466281340956636710431940328427911743530915134552931031391690006021236672575108176444082447291342833803642309708607039528118937917030486917866538554824932145847913873347906410715580065154707297637925304057208331186121542705437629918199561558440077780020149125928636524680160377906904253706618745984744483286494859496634897033537125257750234158366566522768726012073504864415325607039305152748943100533772051166644314150037384337861942612593701611683871218292642963890517076695142661403572711320388033047007398654918216722136161411678662937623850123091604556006551841441589614125921909593939770390437476075298171895573919863135651088828848336011726492799841320111649935389358931258373693459145057553136475922751342605359538155293383583876955561910069358749936951011082089615693841896629336961254394974036986721026940350856347077152772939451280308399363104652576626172429793776211333913295809413213919318285255196490381055544205313396583888277769550637211217647203529389040683316967313521879297011278503165986866646581137787534538214235999303080897442666172258679022325039014548620740672684311806497429047056530576223713193356973396804439208879107248745042555605441287111013049709202762299259851107012441701468738419926890133556245430056477998293002461917643271629591853938120614647619772495115562085600504853146424640985096824494050598829781714618733157799877227971474455616632639023850925729720213591779252776369176312110497936405970870772189359848240927140061006848080799072830556306659756678997694657936924990345096410314626570672149731543628000558026533834459167842889970614149005288838811229513837405392153251553605330473659867312295620005340633564023904208178972115034037935254190823029327420408002622341072381223538257497215682930180996569122652703053739471871654162569414951520531206458862671624276235522538318964461432849995356820683233465138675410827490596964352422796420736525862662409202276892082905745273014755041772993819374747043291676296825571338645605019288235828607460219104472171905393978286058711994994075946946904501719626129891297785262794903831823520324741271326470009925340248044413698893160087471101115598827156017322849926448246890250940872800969912833939106037661646340854638183562189382226457787900923987531877913431946108694947652717492923066187775746930063437977519195800521298729848366280723108648799156318978065768015360592367479405252285966318000015191998608772683676758058031311468294723167697582272502760859874036909801930740974001192058591430098287098021570441654592505727247768282011756726844525801256651444301950079120380718219338329468008534442846077685713544194007524327955071955226200530986913459845314710510719058167265959825133876149104200332459364223361260375456263610906578083438476313348490161343553564484692187424842603773823747426008609267536178919597384345623591288999415207111940819590820240164261067200326676758012794725260339664703418163303398007586421287243859016657962176274532712513078145376826038329107151236318002243613099209970831731135481008172826345298961517973963163916705165676097591487481466079223465813873607872273761995059993093591322303896613664321628779241192911035846341115545622374501606127977756985292882117778296500478276339993749813331078686903702537331445966445686036256887898585809843950252338373839157713280364698259134024338989451358780140559424371687870519586950515334379886144076554360694721608275939343734737390935610438901882220547279311828445041103639111103188607674601360722196695674871077543938123944828376247570522481733445127428507577252676752726828669296273888040688955392452214259080886549295627930544496374040482414174429554699068859457610531632589984450033487991393950194379605142460240622750964605904319347162317103632880464489765441781176775360255307983114046972917021261575999747919513175356289269738252254493902081778863456041493700800804759871388208118144666431845192191907729537903174959385672176640184810677326710369561461912187493932368918706337698762794615949381684820435117964874003383886204354335841513328726838198927086809536254198720567097588143419818644573075112705490751622292191492544793418111741658483532767411666600528233897824313428372479855025933866719301492980684042893544902172403475761202059963960896638007212043160771550410552889811065116740233744236032304871579001993160935959555347073311004243774883544443676731406104831265297661674183379974269379741288515676564618943733469021389351199332674318818115012130962124777380484159115171369334822744164229342075923978372260068788894241149239047819830879098322853736363606047921128478685310683095184709943048770806054769494926160412480736093641419077309213991679052703634396648375610853612922041643781461899880570131047760466065993555093987696077930050904841973329976985820417577209060155514571722895551726144444596204596782453047002156424345570004197583274416101355362390738881463523630967387072211376360805282936674787380880650737793203297867993622101141663905879536696169691639238866186158654641243673999077254707876292273024963076334728546666159776798341058364962760500123648903436613222992540337677988477671022338118694216304682423334130149852860681684099263517683335157344038308938179479603858917811593200169277994326389000742115999246806304045702432487140508819529399245059884575934708946209516322574789907597746226957553035886293114377154459544505608389208459380956440963140789343305699658278203986551812398932069405456026560759534279324948812804513062587167345623977971097453549344764469259507711376402428457076157055436430677764738886674081844106383742912023140510418552281742188746389236111863491148474361612517064934024896521322519834851151242772104556306598929440002152036519490819251376805450957184749544824693635603569605225972053841581004501584100912328333976003102107491085953159226069012834587327259971112025925123819947881840747175767809667062611411996051112013271091350150777864798314871955256044949338844757948457477116889094191094382540558054779516264683712607043026838398910328428087833751980730006443119069122334166099941402646601365567136347123203738359088947443981087204456279328714404539183793412240994826870342095392017313400572110318532747843060607288706258394994682842520556381575601014199010490404397191138445152855809707016425452959778664359588040560748735412597512323836013768239677434435239189168997928071347187463000837985697466045497488955639372562589230908251673255473804486520327695043897071532175037437036938183448706068445520270184271860267785443607757449987645862550853844492488331774133732177529596230056374085739368318799336491781716721031643253122590074871792724944404133795117394685504903169776472613579323786988436816555044871147023821295375315968422237070919604915553260798754019817204005435917338028778866898767783201988249690480208167510788846166868446591501548151404396048081597044050075742974387127512894683131544017091983972922897201447567071326201918658162425054687848305577141613831948331736546313547366384763806330342036329442085133559102820443474867650075586800703988545083847887658720938137520387462853564941611748541059186958982227681935894334481608643024722381659381938989731023292291485815605912701175709672139292877678190348729760666157907954715630362098750256936461038759071141133514628511273752727853532279858408268908582987443368819679334383388270166337798654040644855690261540077459818835228437887729301076041005381936867843411337332815350029407543350462675437781165812720616995958519407473614668214152449569347793047763581660230557418465248972034336442550080954052153006780131714480535397523095413274750723701383225842109411649460720870423187520888470553057940395347526767669497718524603967849112705432812547718499111843247323011841160686418751692868907882025078560674843768816179401584803887200747810776387544791913903025938435744852431951915576190055048231754367790804864233775987695188801541755557892125771674773775596365864929152862381755401283073853655055425091448611697016439954534260814030388938640509188143381711317813476900790628429257746511202468312957230036100116864480097621669013542313504580498125607583068356957065062879843861421422680449125994612477774818757161945326684776971564527300842862017927612360118968033138171953084120164381524148059624459163118084096733232992442581634862069037490046169948238393108530288105627559374357574375901411757444196980563141505220137571144388964279304678461638650126063683382309278978344376529180243251205221507357892280444330744741037298325319700933898637890602101615296398869580920345296280236271953557041411865760773333961802153204654733800918538855539998075391359632003872695291240543210415227135533202642183404859216781849310678370931836038236340074191979283348256435037626347573331738056630737544630627819667754832890022502410501605907042038148659166291897056811128443400490554763520515617080334010077029504407741614050704547796928760915765587321003086708428633478958994497231881728742148146582878333513294577932133195398397292515911616512890368305984393578729868207205694140862127741104528308067361504231110165275192585475375358000676577709244330704876174208560189889742189118009170492691256513264181013828227165086680711420434651576133518693155463307951273683890278139573807332751907304778544307753690835516724244324828301915566152584064392368154012296367388561296655115159377964858217285140994654349136595083503371058992673764518566714682145847493882822893394347204092233214651141128348419317600574953305420152824611858556704207679618775670228729011916634895546083736101005758230326310636673429185051800939052184453293132762586281584909086427718838454160054742974280328396661361347295963302563629881389597757395692922460506227719569272480843843963982294218088153904303273847479651330200041676283719440322315419856051041525940239722748989045813626337663435654703148317669134876847555469792411025033420364193061667681444556983341506990373187827551963387220108573965968914968862001608003924039023517819236072227063268657970009813282109838740945014605897718935027854417422516891716032864362714644753952562246051636958846719430334197522545309124095753712501839140881772202359462149006967535743381987382494199903798783450128864108137711379338678990406261945617986484478017729513417966059143295468448727905734551655932034516014732958476725736677666360745474765405553207731525120976743153206626090160055202221435671053558239271799027644260676893678561236876461169942483963790905593236778663204622182700607533615177816293194243328323059827764195754067310463910960166786833097658112569805863287752396504825639025116157475645847961748673868648985763576921316360028625597643145982378614155913337308072899028630354506317000731973048320498440559655009741229059616821075679153626408071146949434874870710442443607598092254881233946034011674932649197951588391079113646195367873645750872572676353074784800670128148448926212428049339412055475920927927064266795956572600200498190491828386978461485683642086665791764122916337004769909968407222832293743026188332895081447303907350456907104380292438133354568556580913923940135089837451503139566900151184776483065461722434703576835856162451903500950263460660059609102492532142956330352718793762144273337958725209863219465403332730360337994136681320539676141959170028609571573318264331511603324410628374361114137620410932826988141316635961417071437490827691742173260234374302730791524687955576187003866752766949337018264318503626167264228405496153334243531140332510516296899883807675047755079172377866058979779109219361302539854229267521185113459426964212674944243036359083834041693510700598946606285775592307909800370642066904336886030146957671455743670251078744477019985475848795376334708946576839355982663342271782974876971670099428998708971102417217050194310201496909274080129838572650933663158961486164318754012103629249337765151672364719569977796470263610483643241743081238512099346318125509126340730907301902331865609410500322101548902016145028474991172896518663299753954359738145858524256241079822888388025974877315851174825234099588922307983039849059328140405070220292462966857742931975247086268060742036088901447914159791901545682768198127862624633726084182944519076169341611788879344467332624457235181005489161468437468286277927595231710889035229963620976542808014437720825245958218422545401854965717001947936025069441351490369482405131546123008735270958799806732505582384557603513044063735545265173441077422655347016647100822557881227410017918031724818941284851218632476074548990913121757687254853114905647152161232816453294063938585231011698346476850219902049515565302989770984364797494877746871059691242951446947928616748412677311316689309276924328166978373287156127637754250091827262880001580912029087294416597708081303921574616792751138598416609282955474549781919323050366795607116559122995449444513824012921931191554790229338378408917767888764757481247942357523387981462036482918774775255481502617812032424350337757705134963581392988233010269239543026399000590407670292541798141931143957825519431024943808265104606375893000801021372156629170649936482063505577146268662962099488092098200661611049654157290575516049458547343584333829118330105341165469101287828518455011376471874002702126745604311883893741228949110274354393717306210252780458508823091743222111041747254441747473986354767554852139796930960587571954051842952106734815850369832317500044882713313649500485928442503705962330735475241650188479077738536979346401179945139932535355966728284296269303465382689387382904506131090629101374506641285879526447951961592499074899803465202603048622508966269246410248303951769201230670090880245754249900954768059240928580835677018471478117764727507460788000454066509256352049419001433619066501137325877958902450951248012775946853069206507022910965027828695344876662390444745223071764327986092164128821369419529923449745342622529520337107152499452702345241141322434371161845076945400253720116974932841155231559246404477495415318558856170762805541331599037682445748096007207307457259420504514213233031560297159337458934773052943897370160719593071005636639052337398910516328917458761997763791052147675868492052732846056244343846856562859110918170514850638431897116103962577287557650861624128410941073015672545799355272188821573142146157647220592136501403389440498405045979220449287529240951068425759059315541517416653195735778257997109940532355650068087437125593263015404801959966170854247359416368888999714143993665160871834991848566207054598521044690133585142761653289736942697455812090483602711809497731994035628689666322904923368824343322943897077533662696509093532125560433883239720615037830617553062569400982442551469212711958432874003095252511501251544368163946986793533762477996739664587856894977815882349958159300266076187992625866248371863178211081986479246265805496439281433789465210502472287353963749371542009248496304898171325225431490404443696275192260731587223678231773234700501786989060062073372663103468326762818735022839079304658268264383403675611385203208802610883443153396372155598085767531581987651375303196560138048749012301078065330371665264754684135929975327450958445710569685713002470385735812499009271125281912305498904570924803427650562790575789311044993863517834700777416970146268592915939173835339588498234255520467622101245918125290891960721252962341466913538814589814214723753781664749478425706364352461070224233708179564135246880492730639677674623872309076224196922090720446752424962016499908060928640446088590198190025780328393379622363600793252241003767266825105789787022775751765687273282872681784817235974474959304500106923652827770175776376057866784637584218919587715646859185759124581929407837290204615476399831255232642772149604749965883742550558896424909600890318701200878005426405783690223803023797534308676408970377177829432708888482899871770661919987560426133634342816194791652942901002649991930864509397547495136799464971411961885951448364705084776854218557154068032421447791593957493800552595011736497560627402048363722641737191562791467192752850831819871126942696603819688457632571061264341307436496659871052442884327358088521230434779757325515620881755317489614893979565115465466459134952019342787508889329177160466567164607203135727175727007576133217386625201585733132524102256267135974095667268967387808616588507490403645684015340306735062054190431238197422650374750608082120129477961774411707229963815811485877200700501734026677170462507781454324736384494629139100648590234634063450890873793218123159652262636940460561659812567660405111805037271771919133677053378340571763804818663579984080144826950600742568620996921074204543790255158895558727569627833033922369940173618424508834111810651656048535574444567986963711635689671493979686086392051590735412326987468072321026945906095052728783747681972245983868013037928884763904299129826301670561248217272709934758302637217436483609049259979017913572017677999917451517664593806401100830094206113930664869181230286977905241453163705128560161844356057897016629444587321825339889932073812247330853655199279654850681643123911145550445824784071197446536929226480929787125781620877835455757799725872429412183788180777229189273296533362017032457858813870135280647619436731981832381160911893129851064121020987511004669726225726728447523886592540185823062928562680797115677436491664945960425463840352618701257065715147975721913145513121975941816861627415802916250662475683313221460810083733560259082176304656979800876036280685013224264755601477814078188584904150365677219720532288211268983178369847544314641858955739505549156547927819249161988086454580912459896288180831839198694747159727783540431533139780840118503526092188395999937083438859471424422484895173339353662013418404633914278270531257635152842306416202901968927515006838776193126399890861893238570955140721902636602451481280533397113331997181668368168114113211417441091536660280740752073688197951869383500740801485250371189839664555255637862300294894725338807388545090253060968823072953675487974449697590292547112002691372243223615249165249747041660867764509155511159477802075808850762651193636610867311554992969899613510446151689019965900866044828778159525923906714414752885574464308524982926278589922516043567064422228451889411464404645562403027336145425521604775172340420217961207569279554941274837915390099345785110541869546066004279176509714969623554456015482986407451412652305793262123648552417609567710229212341687156454311883528279150390985919008321641915631234630542109381453293097771127251164835846456017032621220535159510911806712579812990017904201396748639648986580416830392353504059649048195263808560060144490097812861709892171321718078141652344634889987253449435365479232110959791057112787715767591956424199236727218939549730947807636035618617124214592974632640888278642920646150269913678711900700105591753932021927544248495416598915245127805617973028286807341594473386206410511414428389049099794186454102765796914905933255458663787331998410234134210186357410895835541247415216366309533445597853759036910747535179357644751896549954802762133472758890605527381638477541022802894735646799360073180253868675653146890507692412609328780793399715860489456638327779713788516054313521050756108383748787190630773384260645245277015038626404267544599526329137987727604904731562738505220497843816310101861170621100872755427778464809073169584368881349788891479628643600529445515580370114613383736664314978973619136220173478287784163951945648158666739841536848953175419910538486514713806203315648665785618237610350582300314779025897090284284080969250933457877228872443367222249154142248644276474288044127432827952859178595732895202190015471726020796066245204963376906354394976290239211712022794927835141158864526574570946923047666699485949903120984263356978168759479817623935013795014196775910220111958690782426346191285770042525098984695899814199136259926824361465285823048578317155487790775485313929046655222874042698387928987865423117119839944817973165334672655644240394784576751152259628370824434663024024418575011518490382064521827913667162089667112747753535124207783675418967511974700275667309012046788487060329223754816307592779170924531501164340119876000139327544408024106973184674625473383812276564724893335841539005571654820183265759775079589751747626589104877587523415006319142401438844584683685256184472651725051979384269512266601971450685653366718533020065953355981712508860345534161752796241189385496331101145400268056092980486470369444513019881534614061799341395392897417347975110433595794498856720510672308772750213294104276272132667497463492787282710357371813082428478468377819129538727211815622333666816660354583565438907819881292081303387043386670876926764469958036489231885191131050114302131977936474847279924851923137714263077854243985023606988127523596289821331500111059950584764623037107983656960989438380956968393260575271072778863957365450795572899629582643385628639710611546711708409238271955614736601631291370395060012833231421354443797341554577170376506036564132217557077652411894117329603768900109332749511859736210742285027560130448468034446432758727729638990040491574996250063104797738677059556962784396811723371443252662772605997510646452758982125426031044458649357552995121303204693338942472794723310009789920455359278131277695870668310315876389946031424494549763773146136063430889417701887448847015328003015451499112860909942403248329916941358489871131665319203260702546158995642204910162911659670018116940727018797217171686323023556118323193198342370803796953278053782977187454671829418430921721985095232819212480102940486000736338657164939674716847410850866338919788038362565117722358348690989096737227059283378387520150072310475969531030512284930329368248541131113766926569221020923296593566377299675247629189109056398144800021591742635347744703956072123890797151089046108298526010507197557242777201909634714422471270603537857950184437259093361956113283048564569574122170292703201825073022983566835511332308338851334507372273081202885655714787807833951944184851958437229989794757451452736941245634812065844048175235449024407397606058411010621436622691612507865446029785762584964939590202876090478392978007566584355372687291804000734909051848660440791202433127588453190203200783903284912792280548420676834695155901857566765932088926634171356382407121102180333281700812579308596278561884268236429082157465746397088329202574170766452511505505609003041124950089258440827042552762430618486885201276510552341532342351164734524285396714462005001978788690975960312082731929333386050252112006807345880064713266643891024391700346350471880262858040712474770262634884317585612572195523131314179386278947285577465324615711086122333531902738278585784646020600313701514942125391959071309667102965885213697839889156290939743771636780743647494786980566347580750783699119643179162204062000548787439490012304199473697303589997900840621652874808426421326071990248127528436949608115779005494179734937511431781806145857785045035166485825750634750296960306410410179563289780730826789234509202931820390586826950654104129396809093876099264731036820798174964438055115624044199738101662825807851197445426685021856220844261848759266200674656511060029362486031624820819678918152181355926111923461166345822665086176145950743789341584980812952752231860843257985965288802261190266665922655937859396637134691957840093532444525473306658768602008060074798781369928554199058085681741549030727173827517234927484381244144270371887360574934364399214113609316363985218988683805111173090608023338304021000410004993333783004263450282560060958459050745590194592895933947062092079507573081523402757767724788144449830636192589330164576778830549052766661774876685632674136307814153444590770266999239828355457576813955421195065159397418434372715876860476997930972151568408519046320497117726447903332629934498123201460718775034315147902361476205883702162559670339483592737874161365824447049081019047867077729938161516575462820068029800463721563526770860295002450363435919771658499908957051051713169210155056685711478948292601652283703664279729412723327993385676972068945177529247890734902739568992396004082005895239640239584914895675194441732990455908284962508388272481664809644013695108530643590237328537639688567194704667459259852194847009346130261141412179411299994375826249494565666674099752312940749960678432841327379608811354294970105991967067932527833097758928415762643944723789054971807292766811411062804902336531718448905647640615296706335520835436041593386648611858094071235308269292644418143791110200993361422914793119640919331990182443330345380585754214640238824260774995215366915341497235208474057031765422776345411042327893101949992571577825558691897895422945443680380208657578495349595586606235401227143323363094432958840171215550050203924175856785197077586124718868813101246599573589030798669834807255201536300814627715056943239448585159116823195136012406495891984611338805585159868346247052637564031114665756371321951326231045738075829116360629934323624216434728253094934162532761445177538547165024471725562255682921126585840210275028026032072889156454737530566706272562834758199753126146886585122828302440171763025247744940890748240827209734322451822354861070551316853275578081420600654807730862579379336164296300651251035620903073641444759072951433003329108395228654468968443998724991943750648399825412774577834064138787246298154005871653201690041161564805619094094950177728315165333892502449398614595846310753261175601850635807705775203998921942871973931019055845469784764447913903988508253744480825540367906677867871057567478493188656741810436755808948879038430592843598118575241573451984420451874438273802788249941071249303464372879792957737080283657705694830680260355087766018017548240826889393233567613079361639516134438559058561470248595710630583243521624876087878849326799727058325744525127686358697175227126042729704763198212221500110961927927031953451726345983879650304506115735253749823992717894744913635383053788207368902228723257035589214660773099731574328578894614609958412257841707173544840654053687963529161718339377820673974804275660397594495763320761934541624154607081082091431381630887662852444276208094195753892541482888964133078632756060019952316521890141964819830541862502886279942861929515434864567266354539499955976735355894393495991004445955069390234829281284926336527704287398385545271066278910515123558177655155124804872688188708038652699563430158718539676417362165324740950301161676147226987091336686975730078772316774484804082212792921345388911884307584665906933970070288913666161767306556816492529686126542330576930427952309859851945687695616787391724886208606078219586577521157997471925755521830252778574776276558662045076936010197431001405073169538271205697390441457933908374685337544753066892359751986805458682161120599250577029450471790531116688637592044725816809350715401468061886209608998308808761053155925047485763330982810135796784437153235684378855933935608225979566539014908874229318867856908106633416008188397781368955225608754496472366002973989622781331076327936906421333836156329940767987829949219414282739937552368742050095369670510834581278968845142676270307586970560344050293627832921967047772968940770231187440894414891611957992234348384361908134992564366682665696510978419367665490400052255968546785818638881481409824051219338973454619317589006191281840488521392932267525779747925510077945960279398495734167739330399574628957203655424637187995438121309889157318399563297897718347938915006476879059728332276590034174776666804805807585137415933903539371546508657211772037063013142093943376911484717585548985036753668986990778732349370860695937442389869679255309585195314500199898018163496806602205369815418049524140539038443752983715573321216713716303309876573223472073494658660387196143966238355254434272031875166654429112534708035265585042313178039140504966786200157779032253018379775395031624177802409362800776274088937204606438009792960229334141357316853027529326270934813060617513040349194939506111829667596679721724554842338458197057324866302813949134291966549465895240393949176765935059682165276533388253260395177273452448414734481084363051946017495590145528378728694589718770632641502417259843086559611204202453814610339462803726715365311373975645333786896813006476033470456391277472796397664318741782445580539265623629643719879907041630801149589490342214249683643075413638713825740975202255710524519005628410890292248754754939152754157107953000785347651731062707781298031248059008088083511571893341447743035315052308357772390705357815401965655229378522974863831081531326498095411458206016343526704502197334552693425313951442693600699979416793419044571047950054591933973470783926474430571876070606494546076496652235432486913277445868254001418092467524424087719936981330245844189018050669626927477561635971967675947936667840573264315222817706208841363096504161459299455789615473844664822043191643886065072888244114235145369904453860898233956764637008735231406874585372559803108174040402975992668970470323458706663340829004120177247777909390407650943557103557176164798280730176947885600023350422406684015217003439639897364954618944020288720946937413542886098604075227026482788702174057857719036625711012261058982176805769679934893705049041439972935657555686872759565537429136163222780629831139827737682328273538007173604361766686339194080863757502388242360541635097206494291599132259373964992477759699130503679859467387685858969458881363954404384016848950761974795313353392698993567078740170008504367063192312102584020548165945222524105239691877251826775214235888083623030633684703867930130650125295968428623742677462191715457239299389032287069336032372302828098382506936703358757555827103340491155787211743066715263418577384309801993728612813203556766993754656540038816495840381520797028440484282254884632112821925210033546824602794396854826423202843726689970480869195071650949154727258460224485143154709172855637969394753939537534842454461823870448127360033316087549390339491932603424096663377705656553981384251344651715053403923964417851970419752086799349480032265992581424000705801737101791445964258963875786190924396690033057790178748531407381054411659092462411237526877645210411022521678216396060020924621034172725054413396654304600511543838181495559908429007654906632941883397253075597857634654462449755501594356663254192887988476758127961551318345779438588059118960711018114915926214069348039421926460721297822408069255012690250178221901583499188663372994201653644081755046119923887957198992066054340294114974546071159657605660183300202102344309467802093991861862965216891368515339833603657760186751215707978850910662690444513903724718434232835066662847876807387275374320546636913075891542321272611108399646743762333862252602882930547232324311990485665318593042026396489306780598510984447945017700408320977028919172057048382181924135570226760960898139417290817645998917756855185172967724992933123052909118247462398492666928951967247431522756106437050491531797002473836449419068540277472068963138393177448233961148030322348372301545504016732072510497336139578845609651207819365400056853303027235062359420018098760449076899084941741369357339039371012080828320780934162749276755522409809098153174862234168142466848375913203535996417859932173938627851656219636450621416451865792169471928789091851626456347026830292184338577370915000158169528450080894744186642838772985819834529563611933373632440708524703027899883434677586606441445529530405836184308602571764765354456106254643446906140012957381572512463660138820345199166078432074790037248546139205726353557158090656959024185745345956546890947422882539337183883406929169297400044137877815260349485959875657881972792337911693367611917919131915027920557706737769810315715359926487713855353321793871564010753738106086321230546595044476485010200470235649943642098272637082343166210803794993910337605136239806876905139720151979070575500255076889855737572108112919425325518445248006933632368025157148533351689787936121880720836116653840743617415571493745387797691042574418704937861768435997110148267844022966899508273305125680545431462825242960113760480968529000760808009707472576440561766071700939806743526995640583592236944120793230124851216017592161718568695361629331621064836815339177400421921220156618102527651553489597482005681543009594232948075392858721451225712296026349598054076571694498983982619415761813379326410749885515537518666751789095081260226732887008501369033072022423311241991556050372244766164397155244356247926874588767338935163683327933554702277547935287703755133035368418595728953591127644725043878325718984441974471692217612825126396314128770579712175562666092567978624210753782825275802681456221191328149519567354816438303073809218496633499815268520022429717046018825658842467015385712669468265707555696525948903227914864246346468870618605734062682911322413808861525616756567945364657325139882917475692209277183304968538734947428728388582797185751925085125363729075173796643775804671009928949220293268670456975658752584332903400349503949011586021175082326448210272758388252815782194585442203117090992668634959462750022443452546012055002758055127454792702255890205631701275211122693794920290417833369691631162589900706279105985583858392017695508708913053733434385675958920310284847781339811291863191093386084475914087239356382800972352347223372355619360570354411451544244307940032823148529609638296958288902010391872278763245256372127500248817419151015466871343223054572424151488837160849087690844793830186151432135847711240614541446439183938044066695316622116741046472939622004638961665608819717101930135624767270181741989733125492003140924411241153224900070754907516184957543551611208022204023968376636880451822691297708293688894074998217185540931850449663735709971989960908519813174658217406440733137654410084264390199313344416298280201059159586221741529060546858446825609039282323617534880583845852642034407748295813317970457691956263225675641685811512670217066518907796204233575773817564814095574905621916350619556603859001230105241016047652273704404479564336649968708539745125105915160022240368627482259079202336430778070946622175011973214230565495684814465576107906033710595350568611341645767396110859401880245617579689883266256409894693280104365291970684730005887925438391662019569596571533373614115187189312356643389006800187024689032302797342271128282171799878713212117329036060371547786892810406560993783700207922558468011335587906261901093629494719347614610784908347727972664981060886160896302867201510015108566161825129634975425024272081557002265941815391290337945136518047397974376034831138219062938133831604578871761305972624279786410979461568839594456833208172319195856872204542603316087926558321489377543723491132201816700479397540948217989075370768230671731249702531673564543406062253586483721876364885815656468440728188332621030006260484399864535626813077449518708844252479808421884652431126530875716970356579193081754594545979226680522690302736699184607929615623142663354132052863597405323796639870431453066308061197943832308479553993128427148101202879692518240366933913835269757022542403389041102563931777385856395150760422381552306943437155154770876052232484595793376372779715779096638669304485249549423986081793893310670696881891161170144901546778001550049111602186286345163199534989815372560517348564641269606632792272652115204168983118001639477232503487517975266466538605885310375386323449185231709798124778365598533541593980958124433491037239259424061787818955206789639301137224039378855362946151869759563140264720906997750013611877360612394880182302599632772460731913224265247765843851870907483675299829361720529022209380906861000458689821676603902075564791012594713699959332168445898305343858211764958004751287406251595999467293204674470870715167851421656776355939143657993736347249925156645471605043233097281630642396809038021750687833536173404097614118680059037340312341605883455235067338752800787033133391707487966849528493075647320868840934380554883195960251773502083727624240339456212211925683490737454112277877641954542607470029658579411795883383494012636284071606370192505278671353911009904407560251382987723241502706898676119014622076654875776162540892477299357715761700750960446391506332058899436675190871956939800022687432780180818392178709073123353331373011315965680280896735755650091675680722007667153708728485188186965653450591919415129897772500704531083484204256009802043625565542287774299566636078316295125113411325583706020566573294986977164698547137703200443022008505653377365378947288543862725055911788727943036314460020086504429170778872386381956215475209306444914466262735267509651875004139279370893320240127688827675054296294093093354920744403327434214120799757340314496705538078219995180518082515428583740839433883842984823268317117814453641785347046845620463915826027190815790559731433923858312882529042132987246860789417898096245935117545754705002593969747758470845487352156660639391962457416095124403612942059946284579486042861317902103275464677157584106545775551518446983441064825708631574744541847215534147110002165755331087323942894411304556036096' ) ; +test( macro , '1073741824' , 0 , '1' ) ; +test( macro , '-1073741824' , 0 , '1' ) ; +test( macro , '1073741824' , 1 , '1073741824' ) ; +test( macro , '-1073741824' , 1 , '-1073741824' ) ; +test( macro , '1073741824' , 3 , '1237940039285380274899124224' ) ; +test( macro , '-1073741824' , 3 , '-1237940039285380274899124224' ) ; +test( macro , '1073741824' , 7 , '1645504557321206042154969182557350504982735865633579863348609024' ) ; +test( macro , '-1073741824' , 7 , '-1645504557321206042154969182557350504982735865633579863348609024' ) ; +test( macro , '1073741824' , 9 , '1897137590064188545819787018382342682267975428761855001222473056385648716020711424' ) ; +test( macro , '-1073741824' , 9 , '-1897137590064188545819787018382342682267975428761855001222473056385648716020711424' ) ; +test( macro , '1073741824' , 11 , '2187250724783011924372502227117621365353169430893212436425770606409952999199375923223513177023053824' ) ; +test( macro , '-1073741824' , 11 , '-2187250724783011924372502227117621365353169430893212436425770606409952999199375923223513177023053824' ) ; +test( macro , '1073741824' , 17 , '3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024' ) ; +test( macro , '-1073741824' , 17 , '-3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024' ) ; +test( macro , '1073741824' , 22 , '4784065733063810973581885157618788676291241975216665977767007373648750357731006099232824032039924032894289638403441329240212719241920971274455782595989040464660523567661989180298099889009174801022976' ) ; +test( macro , '-1073741824' , 22 , '4784065733063810973581885157618788676291241975216665977767007373648750357731006099232824032039924032894289638403441329240212719241920971274455782595989040464660523567661989180298099889009174801022976' ) ; +test( macro , '1073741824' , 24 , '5515652263101987298728728207430913795608113109085112352897269396216198887424215820128660001943808587833784893551335930816647064191168732319583111500951066614122648616177179922993422016587311577585463592732098692120576' ) ; +test( macro , '-1073741824' , 24 , '5515652263101987298728728207430913795608113109085112352897269396216198887424215820128660001943808587833784893551335930816647064191168732319583111500951066614122648616177179922993422016587311577585463592732098692120576' ) ; +test( macro , '1073741824' , 27 , '6828046779268970776657768233698567984276232522051489956245767999246374131525255241237946573692471593720760228447675638216590132893818229842292076597586769967201441361422350907866192164773697561322460176523147880429251325990375896362151810433024' ) ; +test( macro , '-1073741824' , 27 , '-6828046779268970776657768233698567984276232522051489956245767999246374131525255241237946573692471593720760228447675638216590132893818229842292076597586769967201441361422350907866192164773697561322460176523147880429251325990375896362151810433024' ) ; +test( macro , '1073741824' , 29 , '7872201966280717348342236651726314522606839627565764220475565031568317153405023507392663596386569558004653379220621715171372109048108541030444785631640845193093816697582678260933332408613360539868835105124282664122403089594119217080450011771426148362301864935424' ) ; +test( macro , '-1073741824' , 29 , '-7872201966280717348342236651726314522606839627565764220475565031568317153405023507392663596386569558004653379220621715171372109048108541030444785631640845193093816697582678260933332408613360539868835105124282664122403089594119217080450011771426148362301864935424' ) ; +test( macro , '1073741824' , 1234 , '135032864495417264161796347776955705785892222817973553418838034178314956028897546684160639856425763595503385824329054755201421463563212980917112733900937587464576847323832924136423515380546856668025289567166571296527646275461473028717333267141003518332467805495676717695347879685792063703697070949206732122179518994434776335316458684468092377731792188239016034485284630253586964894185124335453057822293914949906863158326432012623661553678396250401107915138994915256878813546994860886329001648396962604356523710403969300362981938297962596264354907403355610003410746213618666434661128903020244869263896170471066369182082892608827489848219714660341764073206537992528782425500311374732638679622889592596379830695201794132135693911769551065799954240113610377067376683502257705550961373070910821982440913313765403579054599921224319207778610832609088192808064360990585104697667138615140446175879997439210654552913976627035980457885269693547247688226220637387637045378917414583352542513965899437900025330512737621517111697083031434057763772292768696151657707923184295380055081923115043272032888153271224470285860092716037417011085867348183777640814999517894828296507433835585929567261420420462344313146389909474179332054613893650718599796623059768279453815288538594004374465681087299360879696203325418022962651748866461417173042714747088991460375318785407702300361444578324217092319160985594722221278104937860539603355035209045656876866415381803837578632001346316535288568593998708433385135715755188408423372052774222216062791048328356892426522413633286855317150328892404110603628893696215163566867442031835287126762113760377467604420360968473120576018581379277564986140009067855235173575587538977545428601733720192069320627430054733306784720670681238722112369930138992200505842377717496879786984447202871740228658026814953856942888153479080568126661272713405724755303867126253550104922434031984783644501692789857112933381811554363124855689663968314433936452490388268436076601610796805828686914442925663191706651004835742754007540713785525346442305287873815143574033326807511787052642265739017004565917956613363367471933672846629587711796258007368503719485449080451730511414011638477972141851445718086957116808591931107452359052957804865633522313939899601083954314084664652521357737845635635594429769313821802217558277658299721865464301558666750790259183567098179113274454668640485452931068066002908997277843409635151859336573513012860151545891329235097673549964928547801966932932777277610659955980339629366284864226600662175274920200231799911374929694310790998989788523133581837411706270099109279459393672455713820011546843294753524645198035778900516714217425354013155387659200293566814809279617708397538819427548364362324788662653106656895970337977138117687158105548389244431881662586459290188692191645535827574319724588383784870507646115475296972326304672165083538472785124541284886058416994446142617361494723365850552096782926362377318561314608226102827450344958934465468245954006024257745239912802322669809977564421376969565655823452390561157232875258411436971600411470668202989843565841480016584687122684712266492502542278163229587079707811073162054156571019054961062952927977983554302015866971342580754327070415115073966145426561158662194502911612889959593112256884020821481134001501231980935188947653774740923939867063867862219999510114357601167654576478400771215648552504675553652631911512293697639701046365273307557081624386985153768458592210790101466864820465666077389235557282441554467556137942439039191407590628851042708228500292413849444833651262460968069570764996387290215723393788781245642804553333508408301261343724697551028018989537881749905976076338448452394908535816426586597030779896515482117647557447860634450527101713121746502484479941152499856376739864275419495610691316310634478200363068897623674033337430538837932663020502333882835672567028049270502480555370060999493787391837671108324652717939749490597481250676971715293682844252870745501145551758940066811058992261248151841276017611811411887274572413802287051107702233361626519940861991365151787177732149135343171325963570255705926609298821759763745740605618507883067662117450926227987106288796642374051280660094717537306446983341125766514345467801301022109170850857456333788167674306579695352752143676166869626035002861003680151141687395013408918901196436576953798322233993027260775444170722889022629783177992510442629535947158550432935980049655104057058621049474066059547684213926506563385023004213643849612559790681501591969143956634858312507054320677326538188275884275107886773666192492559052155330294262524555672315514034789884026392912345926416901360808651772382910047100655600280544831642567723450232097407181605364971159781140990727057283670253338705128542777670983899963185946930240111611346828021014300849527667380963493241772072243503208897153563615767202700820461479775801950340023203862180599061144940297631835377016813742279451921894644661911014611402981461194280564179453079023523411900246837570509101994534431957542873784483700881074971158165429546479001645257417913405525852266215205603087742174929432327288507482831107662551472614657976383161884377268463657025482687656063877010334242025290874089994813121457120585350369438678750482445541628164325776911259393529988611879496239373025342855694600744246027039218591404431155722013586923335365589621061845464264820717668612915592171183491557882072775450347227785803371128754402118852662696497779734299037300726805751376345509065452470499771152338656741540759667286001807828234665941391188447950478415299791715469552242795959977483249749098144154729856726398843394843136479906418546581912783694281934186249899746840563706877029836122779488478015849960103559937024687849690515515689170897889503967015459345616938867807167382350934016893152627043030526997853293078436718226621464395154690848550466482856381991831742986166751803513242752173233490694252183014711530077920709629933842242926656727149369031087137074130182692159013533974804462296354847649804625060701458152488648760236684887914355314516265818917796761265782595118181981681044254889996850913972129942574101636910767699459646998565563334934817729091557460304359721174908710624610165520926996466684432035990548126234720976930050635146064837916857286368443462256725410214925359769688795382559406991790923193015325212536964901024443651640395352239064142041323998597222052931115684682639641634800512022146941484482355702865668732720081140181922030567504656879986036737923027379371333794512102069490267986276796423969331880136840719651462034396200061876091366707548763496112346222123232248230388694153688276766328691064711815330435460610088491421888195612048740193844188314932702563544622667512558911661710630118364274196170285674349766269310062034958003334299954120247304438475039760866057864514345508533138628508770723222951065702526427845206142448239674333189634298931074576766130399670656349372266937207854772004314241332793691477905804194502714575051020048862726839370657406000869875185698670555381280201599182665294886015354833856011808620179345081837914124086071187518476483594847918835733763073473814523558994575501588763392130790088638634309767210564561156248614464688514525041131096155150204607020153647966454650761265273455261627425314514074528596787641024836845254467857223858579509706178001258970617383401025827829579991212553362569959842654814709014550315424922111780290827915930414726165818710997646590887384752885393971444427639715814163996840822838498023284380865733129768795804080108863886307701355417615576573589725489445560015923098909783946350493434691086273697821816061793195812770178371503741153108240688178150147461201688003004263999364357199123049902951417798592453452403101562071608640099027564271983356263970688542541011654918968049984647651232137086895404259830149749220416879709959182020123061308112888239461649235275893165452695700741882252283027093045450482557353241644181353530529653471719973518815321814018114021209910092621976503477515448618895747516994954217971534012469546841874151849040054346531026855470552536470226180210581952214311535603720572039239234584559973566186577426541184455268877699457062169502204867831831763139996332553492281719620044008348442819347402916347449063826287493279275546962303367251145148862797186077453729802990592616042296098334476139933758210139481670253798728685880004650690300243587853634793764661363939548941992865429829630011064793643332258817519440699413641147721299779933762272040597516388553460177074372616592967741331217479003988681016928742585365278732728251483499212078891220690889658188156539798384331139356971957782445900967760132357158387747329622665956719786329684268357644498465257273930645057475745581973619803774790375513161774140411043479424601685237941073465868677839867198646929631273490654610573573656534496084196010506741518390113797703827155068331674200699131411229929426209680688487714374805974168983332553493786309966923567293209378744360953393793837125430206186894839350307705730235833717173154106746899348996486996231198585887923276258550483914940308115576604381833814866652308982829995287823135115578881841683647985874625837749874589942687788384192613487693851248999443749739642785826605231657455343877879315308426560948548969337045420424230665445855165336217895834289470720467926611740468031169083110333367765062731740323306977689561405194787701475443626301894061597784690178137908223901264029854714026072728307465863936978689722771921158057199058515421972406268544249165602289029057506413446029967238761073334521038239699127377613786798068608688136455403186419278380623768639967693818903002914091657689851030323485482272515883706497395534650119809423124565836391369793842875038747816600835980202179604622141185688760485442517152962269215524720968096159687665960838433942792005418796157545207812339197623327607879244889471757058218065058047984089888544282248414904169827449234143857530585526799957307705003072573479826497347064437602871900701432264712373284911700095912533127999896443887782038410277845379907218733591984612184226296351103012869133391467968434446494841517603701783596211408280361807750260109809286092555909870372810146591135183334539196312751504033478470726845817388732348939299912436932024285485403024073626586251026026899899295415467127267737038677726809661009108302376683834416191919481724680647658317867588060396025374752516402209355880386153514329598353790340684707527726798504415578402359843949160793333347705630484913082537803617023770261845303091364666015596737350934362512646919111958540171867785831140669826682679983246022184079073759821259756221015486738276522189431610413723028908457172736855850746058294313588226728849768689794812414866669348870741591827776664772445325863669071829320107144423553422120538225532216445443836199238118227392732940295380857114186288402531225261406147809210925336362075376428503158948931501742771923187008514442594711388876951547491075456021295349274877008031010408946253351724911972191625857419453217284075817281481549626955942730030530589242183647212102223686706445886268268877799837073315208919568520733667353137904980761596821645748802852145377472403345961092081642831719685504154626740435161580568576' ) ; +test( macro , '-1073741824' , 1234 , '135032864495417264161796347776955705785892222817973553418838034178314956028897546684160639856425763595503385824329054755201421463563212980917112733900937587464576847323832924136423515380546856668025289567166571296527646275461473028717333267141003518332467805495676717695347879685792063703697070949206732122179518994434776335316458684468092377731792188239016034485284630253586964894185124335453057822293914949906863158326432012623661553678396250401107915138994915256878813546994860886329001648396962604356523710403969300362981938297962596264354907403355610003410746213618666434661128903020244869263896170471066369182082892608827489848219714660341764073206537992528782425500311374732638679622889592596379830695201794132135693911769551065799954240113610377067376683502257705550961373070910821982440913313765403579054599921224319207778610832609088192808064360990585104697667138615140446175879997439210654552913976627035980457885269693547247688226220637387637045378917414583352542513965899437900025330512737621517111697083031434057763772292768696151657707923184295380055081923115043272032888153271224470285860092716037417011085867348183777640814999517894828296507433835585929567261420420462344313146389909474179332054613893650718599796623059768279453815288538594004374465681087299360879696203325418022962651748866461417173042714747088991460375318785407702300361444578324217092319160985594722221278104937860539603355035209045656876866415381803837578632001346316535288568593998708433385135715755188408423372052774222216062791048328356892426522413633286855317150328892404110603628893696215163566867442031835287126762113760377467604420360968473120576018581379277564986140009067855235173575587538977545428601733720192069320627430054733306784720670681238722112369930138992200505842377717496879786984447202871740228658026814953856942888153479080568126661272713405724755303867126253550104922434031984783644501692789857112933381811554363124855689663968314433936452490388268436076601610796805828686914442925663191706651004835742754007540713785525346442305287873815143574033326807511787052642265739017004565917956613363367471933672846629587711796258007368503719485449080451730511414011638477972141851445718086957116808591931107452359052957804865633522313939899601083954314084664652521357737845635635594429769313821802217558277658299721865464301558666750790259183567098179113274454668640485452931068066002908997277843409635151859336573513012860151545891329235097673549964928547801966932932777277610659955980339629366284864226600662175274920200231799911374929694310790998989788523133581837411706270099109279459393672455713820011546843294753524645198035778900516714217425354013155387659200293566814809279617708397538819427548364362324788662653106656895970337977138117687158105548389244431881662586459290188692191645535827574319724588383784870507646115475296972326304672165083538472785124541284886058416994446142617361494723365850552096782926362377318561314608226102827450344958934465468245954006024257745239912802322669809977564421376969565655823452390561157232875258411436971600411470668202989843565841480016584687122684712266492502542278163229587079707811073162054156571019054961062952927977983554302015866971342580754327070415115073966145426561158662194502911612889959593112256884020821481134001501231980935188947653774740923939867063867862219999510114357601167654576478400771215648552504675553652631911512293697639701046365273307557081624386985153768458592210790101466864820465666077389235557282441554467556137942439039191407590628851042708228500292413849444833651262460968069570764996387290215723393788781245642804553333508408301261343724697551028018989537881749905976076338448452394908535816426586597030779896515482117647557447860634450527101713121746502484479941152499856376739864275419495610691316310634478200363068897623674033337430538837932663020502333882835672567028049270502480555370060999493787391837671108324652717939749490597481250676971715293682844252870745501145551758940066811058992261248151841276017611811411887274572413802287051107702233361626519940861991365151787177732149135343171325963570255705926609298821759763745740605618507883067662117450926227987106288796642374051280660094717537306446983341125766514345467801301022109170850857456333788167674306579695352752143676166869626035002861003680151141687395013408918901196436576953798322233993027260775444170722889022629783177992510442629535947158550432935980049655104057058621049474066059547684213926506563385023004213643849612559790681501591969143956634858312507054320677326538188275884275107886773666192492559052155330294262524555672315514034789884026392912345926416901360808651772382910047100655600280544831642567723450232097407181605364971159781140990727057283670253338705128542777670983899963185946930240111611346828021014300849527667380963493241772072243503208897153563615767202700820461479775801950340023203862180599061144940297631835377016813742279451921894644661911014611402981461194280564179453079023523411900246837570509101994534431957542873784483700881074971158165429546479001645257417913405525852266215205603087742174929432327288507482831107662551472614657976383161884377268463657025482687656063877010334242025290874089994813121457120585350369438678750482445541628164325776911259393529988611879496239373025342855694600744246027039218591404431155722013586923335365589621061845464264820717668612915592171183491557882072775450347227785803371128754402118852662696497779734299037300726805751376345509065452470499771152338656741540759667286001807828234665941391188447950478415299791715469552242795959977483249749098144154729856726398843394843136479906418546581912783694281934186249899746840563706877029836122779488478015849960103559937024687849690515515689170897889503967015459345616938867807167382350934016893152627043030526997853293078436718226621464395154690848550466482856381991831742986166751803513242752173233490694252183014711530077920709629933842242926656727149369031087137074130182692159013533974804462296354847649804625060701458152488648760236684887914355314516265818917796761265782595118181981681044254889996850913972129942574101636910767699459646998565563334934817729091557460304359721174908710624610165520926996466684432035990548126234720976930050635146064837916857286368443462256725410214925359769688795382559406991790923193015325212536964901024443651640395352239064142041323998597222052931115684682639641634800512022146941484482355702865668732720081140181922030567504656879986036737923027379371333794512102069490267986276796423969331880136840719651462034396200061876091366707548763496112346222123232248230388694153688276766328691064711815330435460610088491421888195612048740193844188314932702563544622667512558911661710630118364274196170285674349766269310062034958003334299954120247304438475039760866057864514345508533138628508770723222951065702526427845206142448239674333189634298931074576766130399670656349372266937207854772004314241332793691477905804194502714575051020048862726839370657406000869875185698670555381280201599182665294886015354833856011808620179345081837914124086071187518476483594847918835733763073473814523558994575501588763392130790088638634309767210564561156248614464688514525041131096155150204607020153647966454650761265273455261627425314514074528596787641024836845254467857223858579509706178001258970617383401025827829579991212553362569959842654814709014550315424922111780290827915930414726165818710997646590887384752885393971444427639715814163996840822838498023284380865733129768795804080108863886307701355417615576573589725489445560015923098909783946350493434691086273697821816061793195812770178371503741153108240688178150147461201688003004263999364357199123049902951417798592453452403101562071608640099027564271983356263970688542541011654918968049984647651232137086895404259830149749220416879709959182020123061308112888239461649235275893165452695700741882252283027093045450482557353241644181353530529653471719973518815321814018114021209910092621976503477515448618895747516994954217971534012469546841874151849040054346531026855470552536470226180210581952214311535603720572039239234584559973566186577426541184455268877699457062169502204867831831763139996332553492281719620044008348442819347402916347449063826287493279275546962303367251145148862797186077453729802990592616042296098334476139933758210139481670253798728685880004650690300243587853634793764661363939548941992865429829630011064793643332258817519440699413641147721299779933762272040597516388553460177074372616592967741331217479003988681016928742585365278732728251483499212078891220690889658188156539798384331139356971957782445900967760132357158387747329622665956719786329684268357644498465257273930645057475745581973619803774790375513161774140411043479424601685237941073465868677839867198646929631273490654610573573656534496084196010506741518390113797703827155068331674200699131411229929426209680688487714374805974168983332553493786309966923567293209378744360953393793837125430206186894839350307705730235833717173154106746899348996486996231198585887923276258550483914940308115576604381833814866652308982829995287823135115578881841683647985874625837749874589942687788384192613487693851248999443749739642785826605231657455343877879315308426560948548969337045420424230665445855165336217895834289470720467926611740468031169083110333367765062731740323306977689561405194787701475443626301894061597784690178137908223901264029854714026072728307465863936978689722771921158057199058515421972406268544249165602289029057506413446029967238761073334521038239699127377613786798068608688136455403186419278380623768639967693818903002914091657689851030323485482272515883706497395534650119809423124565836391369793842875038747816600835980202179604622141185688760485442517152962269215524720968096159687665960838433942792005418796157545207812339197623327607879244889471757058218065058047984089888544282248414904169827449234143857530585526799957307705003072573479826497347064437602871900701432264712373284911700095912533127999896443887782038410277845379907218733591984612184226296351103012869133391467968434446494841517603701783596211408280361807750260109809286092555909870372810146591135183334539196312751504033478470726845817388732348939299912436932024285485403024073626586251026026899899295415467127267737038677726809661009108302376683834416191919481724680647658317867588060396025374752516402209355880386153514329598353790340684707527726798504415578402359843949160793333347705630484913082537803617023770261845303091364666015596737350934362512646919111958540171867785831140669826682679983246022184079073759821259756221015486738276522189431610413723028908457172736855850746058294313588226728849768689794812414866669348870741591827776664772445325863669071829320107144423553422120538225532216445443836199238118227392732940295380857114186288402531225261406147809210925336362075376428503158948931501742771923187008514442594711388876951547491075456021295349274877008031010408946253351724911972191625857419453217284075817281481549626955942730030530589242183647212102223686706445886268268877799837073315208919568520733667353137904980761596821645748802852145377472403345961092081642831719685504154626740435161580568576' ) ; +test( macro , '1073741824' , 5678 , '28148898337860105994977487045818154315885187098857720123923019503536550068661096672354637598480165134022041984837084308868395452311053157640615896546050985553558586892645700423928507935726495168161698045415140497515602386527627319206488017355554288186119966734541348472345944365178980166309150611812365395806608007167010671798672218072170128957907439061754394300128594626814429645477396628406899347464530711061456854894379095840425674956808441653400041181506139011927908393244086335493121681302022622095101860620829845276309901056671871394201026397395171820873860291913878080280170380979892472296164150372296767377145551512657194585337453691634475382711660977481092241928982823053143625635560423178221937797712042117395219329456302241242041523769729459117196674726421874136677546084294826873902192894352596290458993633922997209073832114653500019746006542685067098597091796593235383026677957632827401939309333387666537839316094357314127534920705674404309028805143966637229018794907522055172849778130036761405770603918926933967928498088220730576083729725145992964744748428164200419463740275487586933626822729962824800560240761474558428430552602958126365583033236298214451648931511755996108094562356049299254807663118738845759260918867850503834415322452603653397365429159370357398957195114808416983753993622244836716555146831907033098694343145327951581021334647653286088313114479559741196437718942355964184601385362964266877652784804939052253222575619622416395426846679242522689602653790030499520892085577500725499201404182852867226125589028845844427853042309885329741850855526415975172436890910632693916719523636332471118794070682433535223602563287248795595868253883675189904726519119448801915261351526420699337492762857231988691678382926943587916545335155283702413750409505677924941689908432596377494319662783929468093868450608410231488451353317560659020100954006099204197631204922322164052615891958008133081819761014762487524836715828049458561031763108536694043217084348793653430411896364791299284106421121855831489687835195476115378899943269695006351002750960984964426672142770799033138424141023720291141340435508636127792984379054343612312021179919125313130082850457997100339188672577640528770106417201838870495993792046104170422555977835287298352499757882230600591394487250631375216854641145304444397854662472195749485109206617330733383898435103350307488437904097790795468490159665178407362104384319804361651012650220132889393331591715558188458831449467209968941910069520056730023723713589013657691484906132221013788386184219197754113246865122654385680123164873741763553852763331300981166654373006819001402186381647154946999554421873268375821628561307292124869782352332192908982894920263895011772173577732089662917292761688897717750366293629569204248484060863934466108937195948443800932184673102763342937824460121045896218443122360882698024688871403860910852370898051562718960418260546695613954738347691519692022893663002976632717861663007580356823097781646192222209252702435357691413104372734064147456843965665955652873096110765830684236182089087886565807972209217987226299585696168982138854941280194328335120626512261001331081248654357371396176501075032152655115462224365334172115688122152776903406306442312011439667376618560819888585728027310382981804901247107028140882078332241335878660689097272500434681089309886067525115434143986130726703706878433743992681042628744048964001570508077876948518135387246241479296880092162188798942915085422997374189631465329853471853984489176174861323479075234363120290867769013702739919612009426292832097099802965008680479851809369240814572285623180146280697670984531193650342503967101652478766807739947358226388629806728654389375296457819784548065774571293116718672409678564611844170365489608651048260596575158516893594390739121659741649999445353536303503061294401994598214548838049962733817701620624687363493549713852174836185700963467241090073849191740103227875513619343224494993071747822732607018496581774525356633102020037794640774098109121417106381829411247224212510736696706825452538654935037259956407630578146638429226378102600142256743099393349884190724617199388463752205790794440451940454605274720879574121263752007572801341506805655067825631941739793740936589208965150634092530408044204662895618653609322262359163887982449970383124228287512441583793977627962068395199273400344976325835945060297779883770211181669216457812349694314847337342309957623761533535923980598873005880875269599846465045392510668257169787436828598047252165951647190114307062027405441868359474835271630041202717715681530050858890904183091778324015733255757236109101580482580441967985828890176389397718041212941356619163330226370976268329734773630524413753494529257754781863229577908457569032718062086750844184472834347570239536056326155201810881038696860481717433476664625621082241586991225812173672952437197866259897373157784743844679729067516736518800101031672599250959815137720332161848205045025007611471141186707050967888154770682560924038751737207811193901992570725369435103201791686524505756647772640472180936813395743439078761800234463478180846516292693783004681080895964724137021083746991000603574423399483472642365997697739565793596648669477318614358267250383134596038860702874813526614432265002227880708968988988737493080405962374293053076826540765411717793130826541346297462776836630777435661531826481318792145062405811198530844655829858226912380798813160973881440163721569917634885574462693105998116146807054360746972666730885604323790569427284253076223964273715359978030815340692680006321945430455280199860142711370872816427712142263431097232719784998704069638989755157328661993441529401194894894909869599801115592481835323158814300011842131902588936147873994871847028405399169811064272549350520174591847212829792438106825404534383049157807382417071716548998177187833979248225968420666706416390190707768457675226123463626193995384720198209759936791376844052254490031460575054413862573529726918023653700705063568941702083630891996044965826722959248558923416329510449787545274111154340053470755669172749024818935495960038271562190088388398068258567446215438429638813416144469861387009096942616760208032476355018814040329680679835588802653484030011247737226987035720770688024054612187818344447061414642220551886870397419965104800759185726414865048332705445586347178339611571166805268460025130817411913319730985020314703929369141828244979458118746350794440972469365515773623521735815053404694400936400473790547133327308952286757212455297814986317480141532831981218157144776502263149001123086063793023408647358626440541879077132102385221082903921513070649860566861228278306927456359858970160082545255406851398044427390606896847739909856033659996912142151062203182419823681576029939545766232546225798544936003488100493795546219182495490312417078545669619133839724414087313221443223560772275469655787068013125130766170757522755288995196083208632760367504798374588838275982584188716625435557712975930208506356967363937122210773117642423759034688847074262569157860691733884420095472655868693804788798853460305074114676050174059869840188238249706756922707852403016294480987516418402809622158722332117912191322396344308046005168529470763240755288495911503467885568547110796443005962189288373077954193026536584426645858119360236884973893893358131236585957253729142968547596265350388138211504681166184873067638534159817198960647922530056737171392998222652344768890440903942958874497053450492657340534404950722261826476694600389620993991121412934627781512375531587430119694418600921042491946241808425609218148001707575278154030998716384895216667657329409014393641864525969281112155349965482510043869560234065512374117610382279304357796353832138535779361023572767566136655174688134341190085638519772716269105777397667544752112308407281551063186641110391181368268011784028035535033180997148034817583725977310854347328290703963033914233260949053078632664379976313477320469323833039980151301644772548530801510197665795747529811668583071320734297978242386191013538568847456151931045213697759408021294424885981327060102359352968094713641880316402184069434459849295665713894902493734764537578851014033582135990357328370745283459359873866508862907217949984436520976291123753201389817868962086019717213048013769401358081253749874316414733761110700403879731481327366128134414614015062028812312964841192776605772461602572237848579751596062846119891809475923058727329328606164325877380198476851130919034536367632484283364665496341548696606675798822283175208724674569561785917038686953070189275754779088627350245328334100342506484849574784279451309720531675563912478225243235012917746633631513142936777117922425886154614922105224375020527023628916774071542994620484847765716560515554737127344964768600124294594714592715001471003807303089010784319406981481509952504990850744144964515173603048334536187116309970688343136766612177268007668348523128350364138371524518071578343144952047467567938905941913593215582743180827679406961185115865886327377643057697587542832729089317101509237763970252435463768975389494971467359397430380888536860037432765702651569010253133830734119885207436369488914639018501744924571605683611573454465059643881519676195549227750953450440893566116496066519058403193663154983497437154203819963260242165229405208778700716060684766534758748916704009916082633385168020080405048885760694176577865460810820723540078488639369178154320241426505293354277745875660846622369288568123133292561261235256785531922213375332813363516492867281651918872071496312751377718845934838314667391677793894714490889453532680855202389134062406106528371557396680459568935062620695390268278489516786937751530412550577162465259150382716339278325770531171352930227692196632869620798522311181142960193953850924687498620070544338109430949277948159507329879155210160241450119748611369522285092212852813824570293032227779647026176189223572123084451190061745506256343264326562147424832561761153522386762221700802908370661822157393320044695725445229989991188431755677388407747966911115439215417944956153478651673184696643896949254524276369957021748106422271849652943735723075220056207411130072896924286451944171527022637264455020523596282445070630771934761579048221305568215457139994617211411085307850660300120371189812200827308583395539820589069061017861328862614076955537014856977190049697039330309651801348304720476087039640721882498623638587478814436784569169724978777030982272340221145046578552827191352546947143035275990939793413754422719012024556590240543018750125119716435776594606691472552962887122631806058400823255622524530384727573782908089505801222820975600456796411789607997183949633694399179379455469571927557602044778175978015388866388477893024649939309704230972907459714140113585529896807765412294459996359442449522528811461650087362667428633366378783346662514627715854569781388778149878012550900142410424032639113511075518363232906427235201384917342979688961765962102151375425532423292393037112830729746922825304316043663626837496782405688495899065655537216405612388901278198928051245924054604064320232470222166534446528962122067805923069489828996675843271638295113384222501506572543452808653339012061245181593399976731212745904191650313808438588548016446126120674226308029977326300360093713369252084641668517986682964017531891894972707847947894703397603382187246975964105692629345413266060528347071427038400660608705761598293765664181968080597125867912583308892435338706392483149232139991310577488003922853083026387762353546878968616781786702320683290245408076838623224983658193002922968799601420269991247101304606880493000638853120262969345837845575632652594203162116188047397369127024269086257206506049305152721408369249824397488170653226655559449775665832715337829296847540526548358288035657313921214610780153539347835226207976076946168876430114358524272233723646988855002094455275840302962666856844081766293291452137772048110790637266536704660807449519739327018721619044684676011960134044956848557708417750475836513642574721735576244762978717150713261667412716273664438107629604313094428969497371965141673202051915817445633979326940820989733688568069901109275117585286470786533583664247227757623461868123616550942380510328263064047797942151063136084100508835563648567547381317493212871351484118995384664462190866589013506449874230637279552571417457669151996916924270409859368135881488538365606716772030232698811184558469064636039865808366906057231656211951193116937650377253371722258540457313473237383533121791937083143459043495393649754643213866611930380243460376842178995100338772584518299046902703748625190488159098692582062884386819474282872980115522829156617371896871414855580179892864231619779226423289057203279126691229766046555328864768267364321578175263384079348441103395394618249025089795196954124821643685972538912223482310109199583464708899243992298931497078502095787511123559987214651034665741434614829428967428333802394306584477458469633359430987362811953453518400356509454058669839297226788372776367280158730642818372182875605917838630804855852420246178189659203437587382007313143987554772337361728272583250185719831437811387405182412368783988197961286391351624156213505940541094805465500164206288920572949611162162113050402038557325431333024558950631067367936611318153854810023507303764110973942973756954917700791836575148652033411756519651474800034591874142970228482783950150557217039469375536911748110596177461367744944289602462137274637274069720165611598466507748445243616769937369465337749866771841938628315536271843426900115553507410869477054081430287053781532316668174001761433261847823250273169400494042990324465308492795796008958697421991828212877366624163731089097149011406345956531300275914140023841183483485265586993192321555157485947797690816166469044557255832260658892615942710042684013595996265472441252752479660126933682227709014013002675508541470117652788250994783969626624171862885916722522793464173019418067898505345599496735174015977358875619968199716219533552738926637031051890494978338580207273924479022246491648620522810980430864243281885381172828258575698372088024439462447934958632586064921165575955786537269481483937723577490467737221720409666604585388204859474442997324805317238786488235195413838346371458154199153397286434670625395599277956221756084293733060481746683886469999967199808248860997598988465769993529406058206112180431991132713457015628241212019583216636957380809911503435447564199491276079636441647078944643232895303344668713941249744967791690209229128883799300994462500424955736495750871431874087322800538276593777301272661937240773237633293854544754939117218573431236413676044727898884777030673570034488739595200946297274238360844588881821427893674692289872719794617552712949171013259904704167278643987743105273334320443413659380726864695786527091362412670288650332875617283949480199386204263527209082186767929892326304543956845184355613429740397723016551419039154318260427281778819523773313505580722929854977110755322952416544942744038661223221183759746326498482668536001557277096914159111874312153517083375211013183593250726321533259140501285618966863802490518474254707070066879721010077181030496698210597599398932161175581512349806140123118157674998684530687977209656109669570842567739926631008487026917889091286956137809901880327742971892768270601951934752109320934869765144253043800750296293513146606452851069332013443570630554704382747449487485536496427956274784905893103873987768740604182379428000525642086938721704335210558279257980735181414966979314982367116027137599914079057701202907012346767620471172401133094852140947507709878927974690819147519376781258916641942410215263854181358354623399721795114283058445754664116386572155146227613060724837022655475289960130851827789796741182786701725436689175126115738951255328459283705735673792038332771275966384139356869886544157959423900159524818315186940605161679257955706740318466678645508179828694369147823415549800070451991820864586919375260489703149506500802123898113416334762997208596193606353010669216102269842389887094552624430998968131186451615404193377168588441373578538825728592377440448612020203066191898235515693843215931480135839738134274029581253133656093204899636776425859689995495873537309952309610072133005212939182414561325696226801098867717882906061991955075678342181331882095542089225604653021264291770836186590776579787363667069660002867694074402468427249988282181175359142889347493588450134025762040336381857980331092417620342654222801867511538594654519800002440876114049836951162662750192372554175899061991906290784393548297931360854697304660217388326454025385317464060515392460270735562634219706400179619734817004536958508273604064174329604012897892903752485301302318494759650641425275359084845658186671712160266483012379281979192335879671133821261746570768835599550683335228772226084199813244119457702012788644482031756025391901885339469726868198018085491130601667643050694626140156924968196367534431524629400571184798126488006430721476852350356305114701192180938078185596501406019121622406459154304979668159832955371593225491929291926247593357479974910111035479049436421729173094079651242582981533593842859642090017067207572422151856331378087765898272716477356116505494492527760323026755374093035374204268993047047278479131391553691647838872720204941034872333171803661000114147594995620657679606204475115479977905970944031101379807757313636918891924602682562733654982817525199083912568378542859662922923704736713241305728532013661459371953714893728644715593769353695924513479019412720277833400288463057686946226328790417273092172568136932546842785412317831005776620608067442091003848742510088030854918907472765326404312356309549410618389906172934527763348333129738356175599668898544090809612543931015042371463710234727490208128449271087498194070337397932790231655494664919249685556900070331820527927700923879904712981785622980056040860293852786608014416839444705794599237330395343625677231165730337929171123427679896358733212313404887778628928451238376200468283542093779290360409735166492249355597416078350393046779330842606201068250136256437582935384024422088122049514231186924987486386922255709770571686751402668463117086056087909722759647760111192263760999074221853531262551997916860630419344885774566813330605196726150306444911793623636315706197278750196545874376400639813558827027494733550174136896390860197943805543393966475454387001187325653165083037204644787454406449433808128377060422465144611339962742733002574791924410578469257487544550966959852204997217505241888127436816371252790120771208092431156862674023113879531236174297777218690854959431629046382150819392457019720688697146956554700635427875989653883984765265971447058319231040626981527727045895977255770905523050300664800936806107450054604610397698279501524594807393099512501267065236510023558743136424070008416804213522349576537960765214664370640100210453084611914479027691656864136391290070746628452999965623824867446732398214983818615825977108668636422441563513003831975312156804175525835009983723583171193533501782236576964961510324559549005090600262768394195823389119794969001830645368080861318691095973101919011548228483763812949239379397626324227241369442235711216350246757630159193695160367142155317905915084581982797609343509326821521911481105188403479863217823202421104691839244143919644602509537137465590142091458129871968626743829025365323860594221268369465152742323854658707635430807412874755583770885944383748932124569993895933658098650493753903580677968213439946116629845206367354440478040241152208147047847884378168346630550895572113154003279420848335567732550380587563785065372446579951171277007080376181880859588508139391302063701382117980942753440726346766393542850829543275168072355642671555135145516266084215524110054708924580833152698259832144444062702113296080126316162775848061402470651419774813974402257085656428945474157242235893836799387584558606751664927393493334857578593093025923033903249925802452928325559868490477635990253074330537697360009102142806389826773193350715830565814882983312166010168578638318113581909715614425901966904069916789058597977766919792967752743913284801516270290058840699327499070875081504588210302710253892626213023043634438957621385860258666727257127841683811540495720040171541891264342129606769050464645389966030356482089900989596777679522985065453229500095190697538100163379643439267150956032532346334280315920319424327896526362404605954432140230470878470882264003739306894517976684362812045551613042852192669772965726304705516783708137205632647644097851889002247751584331244400558203132964873335621281299717509879304619288476150109332057109283431502529001299150493028581031388664548216000769077942923394288901958119435090722574806233751271973249874552746532634460237024563407790213999716314923882457446186579151315812380783168745156472877906107226071419443707680584882191451197597628219448713650209673215406805360654332701478226078972457384732586255866424341772998013397576055716829423544245310237330356105227120287256517184974300181658805985949145921001482457911564043446049296375077517623765343452571128748736683475042340324486422980741771950961157672017460212375000343093255257855859277198951018128053837238080978550325407234199361789853768134577442527702115229975219525718789959045191073349653955820878281896398142889923003479767972076383190379298185808476922809215238314249626074164796021558425557210308754766801631838440222800550783465777015428522380797710835404996664778131573332303144318415473153348891859475225796874442481044462069842108821743637445608331048146899622744287339341798591369054634267513173964115613718772637770100806267461469864702974890809600842718955909073251470396524319777099477171768967587473664352749169748604394124828227185348843004451978265273237048553782545156365567001316028448768834710532422641102380518061679205162015773801588206664244457180510418277261829269152549407626154892937631258492719033672820382433466745502235228363223303303588498621164057491411472890847331713440771748363429011212793517034275378352451698293411530204186563333810558260562682373432930496010859284665817691922432863011084933699996961786462463745048747116470391194990030628015332701370191200450760857094229809065249035739502022559141983819390742711457191605178020143282612262800696462461845326859864102767722533666771388582815245205576926226742350534264234612616163494445478555919018674566723039443492562381116590300549213807725226129072939143803666847794403804034573197127632276495815673691688391776493042924568568460383396331869780349811708739849417094527914268223170364569506352973511214621114908992490959875119891914002201928543340360020016065452018805546551793704705117911784155214540116673803430547871133266630619513912440304683435504710983133680288052313077803153090031854465575440001750060605408581808515948034989770356122583873261823440265390089426304521951729320287328409207700383100123151876966524323583031388935239745236968350327632037316230013986711095983640286158845854503322070918325810361899675959053468566534714906108407864581052288055415062268431577178677164927351157974624449718170551912415953093539272615139170040559982269069144788537260760097258745113985468798064087385257717936930463104173511481167429308423462459460962543960069832104794421579983837186447051182599950438328122680458288337425520120137574451732030637289392014736022854027545044245408438033635786397265945453723332808703182454632061130743471916259007228432728541803309270197500946096444605584853072197436724505877621601824420511356681513957999452264448682983769699343994225768926072658063255358146106163505098999696551897853532925142643283744909834395865851620590128292004057571404777642678387685668703868806130918608461650915274491926100585166495256709407294941727457418325940432516141904359150294292748288413140787948986359366462074746713836604803390213998570822968145438813731705421355204337496672010739199285545674998128780178114493708777570231591229449657604145369857370727860129063567167048674305858866375066717347101711427057387739505853397158515841254093617246606188397586238440372102294736076889840979753873898793143249127390280808824855731104585046537769857330026521552755052259518063241611856641516275156726512986189523254888151278812592686063111446785816181415218227445732930445311585144011106096911480434585749527586559521968949018049836045512020729497009550286634399863511982953971128118927749655951377838933784252855345681378774160557470438174481259093651353914975509617330930104363369097847558011805545516823230152705422673827213285554606402424177535395875396349439257879147269990316570555566363631107873583908853302109598741956597344312363552802425107351220022316890426842094449146094093908848454232919398697089400054268720672186047939476318363153358024503206934420826394819801998769864748411198961176921530138349929123130568849437161791761185855627806231398428339981489989031517554700169925879901481360164293541370512956624760397990743413674286804847840458699624232365464488482648339370331099527120400687180993305421299234942550487704295774851922811662380580543940934664708380776764694636606791934436854233668907969931816983166891497973095943662588130142677860603610047337982454343702508574417771555874499100448295382819121831778816886809637030681464951442852987045658744822323017354193015398929135356947939839140306698866302482879187121853214437761579840307617080110522099185105281184531897202070221182174780155244891343031372681720259990267379551766505422208965641261232230697112205687652134593678103177579970271087834049239379072209949397401559634057001243257514833108769363888955683621052565237599125728261239118022575912894175987408009344745117251993238187747886278888586407900202408943623153890915214818002421838815923966958787049692850878031566893781773464813916368968542781397442084762131956466252849726966494397504673443856343004132647844309750841983656463183520640918053128194362601997214048354393807871873141019891406717655832279814142519576502831792032213339668060138693124678086147323694655541522077131244528253802212257686660195802890422055107005242552590674759212912277749904354621960351337529800061117715230093493340418671330565674438486174036271062712551650355860019081761842688678384695345181209344993751433013590249265630411818871254942665247341590902374863056013659912681932484952788985051121820811227358115551518694832616404366490062429428314767614403471928494311323127965060377740115015320155059011183773686991112928134219938238861942579094187368578097611857130108971701774055507254283957072531780780052063471633303056993180268811324636908498651379339810544455043184362168932560296467858789354987134340096423851366091213584971916411716002520202011394261611806506910717102336647860845390923567597373075328613344631519251210849547351316195902683921154170420914315410594227945953667999824864089646190094752335728668593487864038958074636801121239687073243551314746481125760217832551027923488199932464686665557283280854081782932546169494512387423905425853523327120893410410728807263709579745414874034347298836164872219912390950976376370657059966587673786130299383959548096535839326684422935261597602533478601891806412747416883653296136723782138835982528170764256084886875777597602961751140496094774423625070287438285325047835576946313794396636877736116310029692958421411875762799468941694906926445604500237069120930529645136448763546020507845697850054138785172342116922512128840514349291988431425294645753905990244686733733410385281678970312606729383537299554607797672907990394591796359202264492486835738568186180945133516707434961240365199176036679479430505970223502962244183781380913196804818441600413779120622805317818799661043554644440443705675483765184690435438142246744131509594661229983124492357221608279423279364533295157372659250705441584344308292111187384818184306257974181607894350319552740374868519341191483135283763350477192196383786427703966689423831363409240725954775713154895328593988160732590160054997239929414823714727974826024035217860503862168944433455274636864484104518503915125790030638481521747050177942348449246957290358941785218596751364264136325302012127514536979011995360578526074657060450670609980645092613668861127834866905147761396712739540375500705135160407800946104520181528985815263489926159911880084213321212768952431725838938601672188812651102720142982130177098645113732975494219793752073889227065759762609687893651335914924691660042543013159140121403093465609000857166311112970382917214818048185101582696684107408042143042945014390810480019118356949537099663818754715059209366691270390106111853299655506660134809491448878987832685380104145003045774887739416422218687559783784403589016023706079260754932303246949584114360114089506475306440896925694575031099223891967798964042809303692120072723649900326855730217433709980256225249076797838874125035531112686624813374295588750086023037138555024936706002261539102751472102701168353855022613318138841001365460254229596701129402640443828649877042750795516229713646589327314125732074265431844531268182493212072736085146019842646560868628969743149933436726067266230293919685332063288083684098369674426608064526187772953954892826318674314993417979569039823495888917128289051117477198054203719038275454185022748040457767103249901035731885373830510569953185345260681492090178619428435327767997448105824239005042284690390909455119903699725245439425773459997919739647511506450037183108134359259135471444850889646470849065205304395614092274471027676451130301998192579884981980383331004755985458519740718112147812962705310617555010259274607985705228893551463836617686124231748426817936045494654384933976330192421266623131254582148198369659191509650211552964003305770959771233149223935846202962723117218456932567654472669816733803847092639735772223976250554596127643265710435182191800068647592743527104298607516812775387380003886771219532565745981432787326595836968342349008462815121251789385562875463614831060974949395788692980727720786032761748572416672895325498419331366014371448904732847968285929375551256672205371236319010761607531035489389025830582442491033340311783200278400330573275229324139285691959682207033048166845240280073722049031522270750064451502205702838802314453492907125113196867357626343878692666709910893945062710386453480965984908868928331852364750709250772228522623061255781933618377709440518884675617168771208213362028807000568991336640250325843144807507365386167323430530383757386514877678566741578803351624259009223626044690394968507237740190193077024096179943106691946391713265839010095279092109535492123342892233114535396448888859072578357724845567858023341418639436957064116245382812764104096389861125288235620089839796959708844667271837724791853923155783350300837209697417124820469598763421016230556944144273578255047209140685603269167269642662464781417402044138800193094975708451596078152422131206951630446037496865433989208174418961047669463435692646401380865304211042807149992732461476622644253291650530746199877456840901162470871578154957110644808251440332624321213214254142116691052442993385768448482702905034603814208635913143936488381755746324155738630413306167461255699186732545319102104515653378661263778599973833109965924889965578020478609385756785428483645146480030473312941683848824619427905074772081786032588682913441577171034065769355232243310095044798628461790230246155642424833564029628986053338033122509288271156493098356126356548508541821956447282864237858810739664866039796867178105481303341995681155609103956708352541385258044674233021538488882256047867864755689487264233200251948632434367557411696985908027963208271722356561030717196004391383906360151985343954617673570213543813895091001157665808641175774156333012362213294444222039514585400935738306777816189406291014204426171617177142780096988819473458459887462124401026378144063946634234937478266777216707400466276855252285387625315985860983345555708831049494034215551909856922269254608364369447708759473754568912693844211940774320914411502602340550200223765229096489309938496752456919270003385668591424974211318904032650304107631242385298382914407054967999534142551977432253069569518207821850880260921220586532594795739409805616209429954329604196061909860469006839106493724703640208556506345365382655886368345271812409551029573250054776291206004935504682461872164043783174653715005083196118181680022375451553428281102240058446959296955227821993514685348539842528436786789259135360096841258032925547689013177486729459318947085055431774319351281557368747716393992737693541108230965435660525692480717964031924241664724388845193264670242141356326509471299306016413454162671571381531753658371397956451669887495352630248631157664761965740380082152914081452732415621628375282370868233950168887184531780269004718739099708910660900090201255053397723188285495192828542314394947620483330304687649237120551521237832434525777447953092911201834715259217245519280176880179885337857732604864405057483694102485505256429471768330406332418310295400408419432432940963470934061812695129941627390018523946146290853393677169776503143927133001591974399819542958121940959619409121036386106497029519948200613092346225268222984335952952211870862507812271819553684431413604081858429624556100379315289298469968791166103454024434690367788140204407001004669551371707738311759495150757612726027877731029702306303481073738582347882595922394576946021621186829772467105355572710477124514971906584017529758090618910480942805666401277004037346463984772905375809948144463853491825056157101189240572959686371293182284160480818545596306440473897493917768183499944319205900645179847295735484551449225229261645269968906429508149998138016622129015857135775809846587750617782253958791389940037001143544832241065010658361305409557331037342515976928994199426578267553413249193592307251067458813978078291350669052525953950112448480003624625092254818432528874435095079342421604083110240934432048412320452642368267544141594660095901465974593532827701312505826582575011497446990637441740616567155660949020249228616684830320354314707270016757257201734175571113012610174151094479944413698938350396910278103547991209738636261259356477694949886515282971734718664058449032335352583037449070952755124611382023143401658303667877578519296296527334023449638130475844470991345333618511394777165597830452951636561490737471919475646861928324359374967832521186421053437409487480470461954966554705773855950738645971740817037823241512416093275245345820788368984925734262305322634441156380026457447197182213483013402950350246138649304465256498219312777160525099167726998120704957725403800575045490582281116114994378718817183032439438208226746360325766986720916774835054649560456316259175632867603045141112409889552612372622765216331693789078480741915298207295555848306263838407170482811223590205255671667422964415870641962144241361255726603720198161298973619057586912427934170325155184902616599199143436064767051953442782556327831427853713857411098088989225849680427893366785692117780023838758363675203567047751767933295657237755027185531691483903456972232893961200648229859233228579781125136864313569508852945160079164443773633476981446295403950535828103167719751726784350601629663178850550389728335502140195564260831725188380387307159781158911038797569919167004945795140577149749170901864075423619030300911182620763077511907189012876305215130787412613925421216160360751332520310931569700798283937005333531483817004253266974122408656002783119309246945216360789948717449837131577677922669864583629782440739388630470181967026233829667565773873102079102987908580164142215769036178315875089633501680791005716918960107298151922455023391131279507844863316483788898011992028922935242614044660187284736254085622682834529882590617733762378374747202648059522912576707100472276664571181081828497963723051983320823361890551873317486588183597041968899647405888812769324885665206175649824784331136051942330320955997813290150374169555690598341682414758358005345032263076159951017735855589303019820663937187166738223420643133072273883753060709742405287892650826450075887658352906610591407918098029363694819236430463321771822021175150958737396912367945520530338753965695796553479705539515710152369148055346684802318377472296952509107769076222779644096906583067893946837767792663232669048207226484434581284994990609048194589647870843829686890438595763980976771026423557663089024892131001305788227380520948975891163833166047675665100986690807244435880890604269549826217825523138658314976275936944089547382635813595490748259777205666498345149897846304836074875260873003896477439834091090867636750095043118229481634887286877880618142748512183455056884216089061037969239651354971148328982756655369145281624013806819439797157064508394810115585016956024709722310092594188732446592100117958881002635994259708482658147888287467568985217077229723202214489094759132716574769640290873606782618033552995230016319587100167955339887968922205047010011389063615635451818872082020951265796370440182994059107927214391413065859873935945939866806647249901995379512541102421318646178957796346016199498645184725987268058320037711898529749988840623868356343243014613790813886854385271790938818469590098025543064598325239352259049625770848587072012496241155997192163530260660709931448706553743372471711358996628745306173083673087048269342745699715075360398067471245252833958545215646060059000665959497705967713122400751567337815731755845116818658270900111989799269094832164568929732353735566608022923214255026340432900765571233256796055879631067021720614281128969644791733928937006346217595371531877564139995663256573848449072798997910083484619753891994751816910829518221088342707669386410746832407567737548811686421700767615090296347645343686568901979295358016279996388099431659129877979491614467543895195928365541638941655634949364961607403740873577172023120167622227906175594503905136634860440145452083845427286042679614121738077233331267751337860968115995259442772881335900849426085481298429404772477164459261951878223611738672150293049444078426200516395163393367687521048654041265810615151381063263935652729823202648067856665037222449646098366399836365825764298326138044202049679510635928460540367467980830027780617634593554463824431146300071372144602579306617234168891833603527083083269873328058909495444334975114655549063249720495617631057572031874245243997961001300513101362881251642646541467566216418471740031857891367923431107308911790203560135760701742446161244397707823612390132206932904487297474667708365158321867415005381327784224688971310518664331206516637603593863201168061905577055537633677360364992716387876270201457406093693672211367026066251359512820184684258506560590497065152819145724007871945726278627820342047898093019876389613692251293554098133528921703415241378403497988370527212999054917321986991814063285400208883044316721908821428731628645291282887066115443721552877170570604616124348447368192516248043205025944481980530204535986716383404018559523989983031812399260867758441326518650885918827088514421998934133330104671880369209347348081232645725979472839249731922910513395615257747541668539314925713185740795246049806364284790354471628315103815173988609118640232034770300847089190756094694855291947481048264317280061195943077860015918935087735267314720428607580533653591482200744245764521762708826753820707439580086465928632736043303848285308853903855332348614871305843065583952661440745127334275983316524983354636338311850616828793114631386447872731549903896191810618225811994194258543856474840852403622495390802298101905113183569217747553051194324637039769564669265685730461935387485745474548531803797420197881185660590162228866272412460152679622021094012535010728078962481494326411253419325936549782831143489394327333139421162015929032280145593875719333520986496480401015368469256210183619123828239613847237761325489122341426463456792867754427053754130540233036035263170583560480037008121865434631069654336463838256630571872029280200897225456315873962517477987515356054666388335880482803738335843281234886361107822104373467807207148152456587769815724600397786335996139383096925464081053403190812702627052226018164361018089519728465893624253132229741126080320799891756070655845964271557907548948044677077363863257868119670264756034808085525933006104325450582318119445844371631130489034386859999641254958672328012330708972446485735538272452812683116142324976642281414157806727682979925482140939388726958044973071808687704736117992808583199418428491405610310555841404113412524512607651482794741704104508555513921174117909699949944138077122359611486542282513706246826158111267704327564719834230477914342600808913796656021750262931585150361150826736050413848790484905133275593843111446885863249713473516993295032625202150709018861820843089366420307862925612315011763286059087359702646725316162907318251933248352262736009240653208822499846306085714364841289204210934994061604517285057191437038278296329720531577065146776291030097029355798319414150197610941914453739920532379971545817364964168876652813969275610223555143453902384109425782195979757650614340946753732503697778300949396933922189195629933830643427842357993425928608221704765171398421314049866443720720332523788140277791693319134495238776754114249069486675919919115524635059068477480012114318640538800382974854180294512160755863961496844546963247293230634774004814278524154396815808981949969899661609677131701008847067152145047651867360230416267953917241882452727879680761316075541059208603633056503562463652855050253493849478608019628492062758037223414401417765687997128882287982851856003322488026022040865006856147528873435385875797540153930164571391471671391160042539309854941702496529294867154798015788742502152230116550540162661693692539273155844284794665714954330600878709559778016078241522501246825227935293632552928387677803748341379225975660508623451899520006550271647002585568931118574545455659515660038345490294841747607977013620826761777237291808944805985937922773779602164771924014259621421398152048641717356805328377078270519526709847397617420484043908676504757819931941243041177123618041199834460478895183606359631910158614297021460961506443641195117499315571630596201425150181128388605065882437056059202356631642243208507714451165052845415067097808080851672441966218691001993587878740388639996683623023734138001598565353767664950990981120035086276433367022305016868201908444769762114808566372599134247909095865960176282379704629611831845169982707258625668463208361346123275876520219495822276097730472791775307022937656401471570150603123068394019432703602830427629891416112019683710380141408360658819167165008669555364748658228361388799129393430801106411036742406503306803992584318621042791299946447585114169600357210438157957095528391813802687194266709630039430263970789169155406821880784658555589183142366431661016710970043339646209991971708490052667399949393124645885563312313000565256168576816471242098741078655616401684618105443606700332167319459199324804559567998844314002622600802628881188006088161891775688908776969324799915484922813295198723011775033753773984506158063112672102525281790176367584254556349673906995336472433972094889433283905354468728810249741810297092250546619901076403998845317693420655635133057775389193863669306991834605425655868705164472180005264501435736678480521635938716050416503207778590785511538467619550627020032108893492813556129597923638223179897023498575923081788821088015804957415400699801583142361538757925647242388065271363797533919781055008828224632453178217449526824788604797672702208962436493342699356518705273202494331071951221069318730689993098592688654567904468057095325225333473423398110323034834929517178574105226269026108740903170496491984283872607251986315802385098293436390674754854459924659801591397981418582800158623004657928930499141495824770952134245875818682387530291630027075762725947865821227819368622145724985158466580099763293854618850180801176478217411245219876559766971294143696106113612302343864027910528445943043133916663267112690598511400033628218370711265166997699353177108131047643498369142260604016608498278071054060236977815657846742243817272015351033515462368642825223680361745623868563711420294182888855363490410712215539677378212792938504001171148596659381275262256682730800334574549206704438125823923904766613486206013683813771293988827994751308475891995988301215387152574419412381447476226068834648858706639617162206593451235290457471618073014725679837379893842150101611995440452298353244439201356304245337965099464541409401494998025031536565597836490234188808696463603490112721627711519596821915331825959575551885212518211442269003344859271286227913506007307492776291453029668960179359667440503179328412171436131912330530510150770695249381710538279056954140700591999368475200255875436698833909225866367218550888340455501359261125896501916510656688648535225387182212843221884399211433135403492193025160357801967177079276486051857093141011025001336496825522387474808295736361392021889554180981081598463622614232871932724282534643030508717884192962595416173373901132147755094503249975052901677902751297694205366921037547465221635547109834317374178362148899395469037802172487094585186770930012509897916799608892358494351340358146933481155823397177111871069488870844726702308338279055819352376060712105984288779181524985526892916898169771532756305479326497428699889380770355624262738057395122369955283094631409213654957473184032227153342629154545066740409513258489251745894951453040542909925854317157799562581760030422099105501627694451657079935138142010860784796990853862871522191280775790778371590639687771159316980947819357536812939905863927717243432556756272342151545076411956132389217805472604221690864013707763682018315188952607119946758811062148170296556777942812437533627450340974634326975205472489671702387269156909914717782582977963643216463960975465090627229265120385884158666145053132529879199674915773930220784503882143864875273224940706693965405173279072485994435371203100135615211846813669839874064050008341057733642309562593482175302832142539877643154259022027570686612027858107329925902923992533804455918636701337810809181701161499325971154106538957803193456380395910615088491686184579554366213353862404529468229005466380181873403409584627731219911460708898848941094056348224778795961427666141965047354825879067952211675767220530116000295439261008669342189007742280071068070049356315167614419942532751651005774976056088498859079183494367859475921643977167294332870981630985883183324300422297953590981162371465213620389531664792862643382599634861925000395120572493802624931228823781014097594009428931662915167760327883521129852617756650413448593360913038295175844623203494974914165179908375706734492901224902529747574979742050002106663406003731866003308390615816816885072065325693182794964309658585406733281728826923008660251012331523873157425596492124889226549015883614419445399308078104363183239762732476535449006179002325229065282571464204281914919738887388806093573140020542097502020482802396957530453128838606753183180413618231714722120716858511620673458780848212762689022503174722516119261588243338767449952444434492732505531744736476097910021749893176437861458807350602081308059329158498808470348829171596127767256507414629365764148529834296644442209403194238593555813227361493776673378092377609835480829848834776365785714688656577506221151558342984932908100108088372100268085844151793490975148337058265267421349296237603497728123188032647729521086794670644515840940201571775430350624975038471658580078746878268495164463287848960878856056346450934896163169743105045165581323819513175905223706128682491544237639104590089628822641723836875903418320273003356617592635747925184879866743725876316742503710595986069001288762512476804118154783404812514751164897754250989522763124616991870608224785876468099785756699995690777785521839922485175041682536651172403481264582149129122640889832309992014062260099244291268883993005187894563801642518228414478270295351387046868187081518459838095851978514656128229212018856271178656781951865372510349741871729755268077300762982107262353653936518893638816222941960957234072662945228277096588212009569956941412021462076133412738736146790862165840981502021144402381041280424251250883937325527577117337986616772117322486188058793070661939091520797904347760947648229902630915645259852652351426082406577287674223134756799727233169989521419114425894731716176653550245770496344605597265572794815166192064124403378151092763885978383102009455257854519465550301246995381640601210343662742827682420934279626373395652395999817378249059327854481350431454370932564627625133649242512820576486994269314077980997512181283650077115840159571482838806660739273917501233904422474377532434136501025892293378909898783835997744621072578866963094511489842039592491140393655505817457506101458107717258837998857511634160292786691167461904365591738425550323512909380910134644272821236782228219560211903524789255642834093938631309207016144273343561768392015946096695071260787134006919955539723059270708621799610107543927526866927300423827447908075410338089761911335554236211607220959786761543017923621639938468989547957660767931657662555862328888341958281025006331151526846302872456080086024493507245030108230400783031595576151219819834046954989509826434061777922015202698717273136926158519899556374615974574751476743761878619405436331799448199218707421684180814768572994000075233007328760708771469685534860487027489184792709249535333983754626094433733032515199669313204947984860617843400446621737370155244778071837898583388336317051871475231701394053764483680409312689893186371509520310162182341717820195936661217314875571498709625015897265778525908426192975934981499327876012898297481801302513955401656740742216850342293182123512761948372907243591709809867936260493428885126511278718652820255574252494032278725612072481843951172165236478241369093618112853011844718845683244161791308969305441124717285732154355994917446499020686931075617421667334186609165302628815065613660124919531779983740755489097111398429642375934585615080318880945851714180064949364535973649030877678201116971542188813985546353470746080703026718628888167099094905487828127808372458317234986212227785960019744988804796058282310039384459545585269109729037178184648276479018986182113845519243079489398133256876630653378351331911274848188248662596501979226917582116118414287306394568957790733295371259982778148292520276396147454871187308323855969429534148144661681789463134733719964597750987783364244289405724721486331025051689631320360354172622130078192112932513759893682282761898438094232952668404869672405207574076058791075187428450213304735992945688679113077409644110920248046893065024931964522048240938556520005706710005859495886813562695510970268577213963715728820134124358408738944689728844164577395064088737288423942837489012346099566084287150267414187495425649479841848385871962820959477885446374521648256438103084109135495704911087255494677079761801565634611237266318594849791726944047395235607649191909852897356458928629738104459452802907338153775097668122498603398192996423582181648082577188518353374547684930803109595187299401366263822653454162234774772311308453961738397188217257178280423339056239809467587898119899705455896748544161972100059530059884503731622192443130376572006764511595596363774526764097092375628909773455008189308634710975487576532392383165983021315524343179231843380356936802680309074711077530643449857659333638389866129257243516335469244971824181245127687203135672398351564301811199850315776' ) ; +test( macro , '-1073741824' , 5678 , '28148898337860105994977487045818154315885187098857720123923019503536550068661096672354637598480165134022041984837084308868395452311053157640615896546050985553558586892645700423928507935726495168161698045415140497515602386527627319206488017355554288186119966734541348472345944365178980166309150611812365395806608007167010671798672218072170128957907439061754394300128594626814429645477396628406899347464530711061456854894379095840425674956808441653400041181506139011927908393244086335493121681302022622095101860620829845276309901056671871394201026397395171820873860291913878080280170380979892472296164150372296767377145551512657194585337453691634475382711660977481092241928982823053143625635560423178221937797712042117395219329456302241242041523769729459117196674726421874136677546084294826873902192894352596290458993633922997209073832114653500019746006542685067098597091796593235383026677957632827401939309333387666537839316094357314127534920705674404309028805143966637229018794907522055172849778130036761405770603918926933967928498088220730576083729725145992964744748428164200419463740275487586933626822729962824800560240761474558428430552602958126365583033236298214451648931511755996108094562356049299254807663118738845759260918867850503834415322452603653397365429159370357398957195114808416983753993622244836716555146831907033098694343145327951581021334647653286088313114479559741196437718942355964184601385362964266877652784804939052253222575619622416395426846679242522689602653790030499520892085577500725499201404182852867226125589028845844427853042309885329741850855526415975172436890910632693916719523636332471118794070682433535223602563287248795595868253883675189904726519119448801915261351526420699337492762857231988691678382926943587916545335155283702413750409505677924941689908432596377494319662783929468093868450608410231488451353317560659020100954006099204197631204922322164052615891958008133081819761014762487524836715828049458561031763108536694043217084348793653430411896364791299284106421121855831489687835195476115378899943269695006351002750960984964426672142770799033138424141023720291141340435508636127792984379054343612312021179919125313130082850457997100339188672577640528770106417201838870495993792046104170422555977835287298352499757882230600591394487250631375216854641145304444397854662472195749485109206617330733383898435103350307488437904097790795468490159665178407362104384319804361651012650220132889393331591715558188458831449467209968941910069520056730023723713589013657691484906132221013788386184219197754113246865122654385680123164873741763553852763331300981166654373006819001402186381647154946999554421873268375821628561307292124869782352332192908982894920263895011772173577732089662917292761688897717750366293629569204248484060863934466108937195948443800932184673102763342937824460121045896218443122360882698024688871403860910852370898051562718960418260546695613954738347691519692022893663002976632717861663007580356823097781646192222209252702435357691413104372734064147456843965665955652873096110765830684236182089087886565807972209217987226299585696168982138854941280194328335120626512261001331081248654357371396176501075032152655115462224365334172115688122152776903406306442312011439667376618560819888585728027310382981804901247107028140882078332241335878660689097272500434681089309886067525115434143986130726703706878433743992681042628744048964001570508077876948518135387246241479296880092162188798942915085422997374189631465329853471853984489176174861323479075234363120290867769013702739919612009426292832097099802965008680479851809369240814572285623180146280697670984531193650342503967101652478766807739947358226388629806728654389375296457819784548065774571293116718672409678564611844170365489608651048260596575158516893594390739121659741649999445353536303503061294401994598214548838049962733817701620624687363493549713852174836185700963467241090073849191740103227875513619343224494993071747822732607018496581774525356633102020037794640774098109121417106381829411247224212510736696706825452538654935037259956407630578146638429226378102600142256743099393349884190724617199388463752205790794440451940454605274720879574121263752007572801341506805655067825631941739793740936589208965150634092530408044204662895618653609322262359163887982449970383124228287512441583793977627962068395199273400344976325835945060297779883770211181669216457812349694314847337342309957623761533535923980598873005880875269599846465045392510668257169787436828598047252165951647190114307062027405441868359474835271630041202717715681530050858890904183091778324015733255757236109101580482580441967985828890176389397718041212941356619163330226370976268329734773630524413753494529257754781863229577908457569032718062086750844184472834347570239536056326155201810881038696860481717433476664625621082241586991225812173672952437197866259897373157784743844679729067516736518800101031672599250959815137720332161848205045025007611471141186707050967888154770682560924038751737207811193901992570725369435103201791686524505756647772640472180936813395743439078761800234463478180846516292693783004681080895964724137021083746991000603574423399483472642365997697739565793596648669477318614358267250383134596038860702874813526614432265002227880708968988988737493080405962374293053076826540765411717793130826541346297462776836630777435661531826481318792145062405811198530844655829858226912380798813160973881440163721569917634885574462693105998116146807054360746972666730885604323790569427284253076223964273715359978030815340692680006321945430455280199860142711370872816427712142263431097232719784998704069638989755157328661993441529401194894894909869599801115592481835323158814300011842131902588936147873994871847028405399169811064272549350520174591847212829792438106825404534383049157807382417071716548998177187833979248225968420666706416390190707768457675226123463626193995384720198209759936791376844052254490031460575054413862573529726918023653700705063568941702083630891996044965826722959248558923416329510449787545274111154340053470755669172749024818935495960038271562190088388398068258567446215438429638813416144469861387009096942616760208032476355018814040329680679835588802653484030011247737226987035720770688024054612187818344447061414642220551886870397419965104800759185726414865048332705445586347178339611571166805268460025130817411913319730985020314703929369141828244979458118746350794440972469365515773623521735815053404694400936400473790547133327308952286757212455297814986317480141532831981218157144776502263149001123086063793023408647358626440541879077132102385221082903921513070649860566861228278306927456359858970160082545255406851398044427390606896847739909856033659996912142151062203182419823681576029939545766232546225798544936003488100493795546219182495490312417078545669619133839724414087313221443223560772275469655787068013125130766170757522755288995196083208632760367504798374588838275982584188716625435557712975930208506356967363937122210773117642423759034688847074262569157860691733884420095472655868693804788798853460305074114676050174059869840188238249706756922707852403016294480987516418402809622158722332117912191322396344308046005168529470763240755288495911503467885568547110796443005962189288373077954193026536584426645858119360236884973893893358131236585957253729142968547596265350388138211504681166184873067638534159817198960647922530056737171392998222652344768890440903942958874497053450492657340534404950722261826476694600389620993991121412934627781512375531587430119694418600921042491946241808425609218148001707575278154030998716384895216667657329409014393641864525969281112155349965482510043869560234065512374117610382279304357796353832138535779361023572767566136655174688134341190085638519772716269105777397667544752112308407281551063186641110391181368268011784028035535033180997148034817583725977310854347328290703963033914233260949053078632664379976313477320469323833039980151301644772548530801510197665795747529811668583071320734297978242386191013538568847456151931045213697759408021294424885981327060102359352968094713641880316402184069434459849295665713894902493734764537578851014033582135990357328370745283459359873866508862907217949984436520976291123753201389817868962086019717213048013769401358081253749874316414733761110700403879731481327366128134414614015062028812312964841192776605772461602572237848579751596062846119891809475923058727329328606164325877380198476851130919034536367632484283364665496341548696606675798822283175208724674569561785917038686953070189275754779088627350245328334100342506484849574784279451309720531675563912478225243235012917746633631513142936777117922425886154614922105224375020527023628916774071542994620484847765716560515554737127344964768600124294594714592715001471003807303089010784319406981481509952504990850744144964515173603048334536187116309970688343136766612177268007668348523128350364138371524518071578343144952047467567938905941913593215582743180827679406961185115865886327377643057697587542832729089317101509237763970252435463768975389494971467359397430380888536860037432765702651569010253133830734119885207436369488914639018501744924571605683611573454465059643881519676195549227750953450440893566116496066519058403193663154983497437154203819963260242165229405208778700716060684766534758748916704009916082633385168020080405048885760694176577865460810820723540078488639369178154320241426505293354277745875660846622369288568123133292561261235256785531922213375332813363516492867281651918872071496312751377718845934838314667391677793894714490889453532680855202389134062406106528371557396680459568935062620695390268278489516786937751530412550577162465259150382716339278325770531171352930227692196632869620798522311181142960193953850924687498620070544338109430949277948159507329879155210160241450119748611369522285092212852813824570293032227779647026176189223572123084451190061745506256343264326562147424832561761153522386762221700802908370661822157393320044695725445229989991188431755677388407747966911115439215417944956153478651673184696643896949254524276369957021748106422271849652943735723075220056207411130072896924286451944171527022637264455020523596282445070630771934761579048221305568215457139994617211411085307850660300120371189812200827308583395539820589069061017861328862614076955537014856977190049697039330309651801348304720476087039640721882498623638587478814436784569169724978777030982272340221145046578552827191352546947143035275990939793413754422719012024556590240543018750125119716435776594606691472552962887122631806058400823255622524530384727573782908089505801222820975600456796411789607997183949633694399179379455469571927557602044778175978015388866388477893024649939309704230972907459714140113585529896807765412294459996359442449522528811461650087362667428633366378783346662514627715854569781388778149878012550900142410424032639113511075518363232906427235201384917342979688961765962102151375425532423292393037112830729746922825304316043663626837496782405688495899065655537216405612388901278198928051245924054604064320232470222166534446528962122067805923069489828996675843271638295113384222501506572543452808653339012061245181593399976731212745904191650313808438588548016446126120674226308029977326300360093713369252084641668517986682964017531891894972707847947894703397603382187246975964105692629345413266060528347071427038400660608705761598293765664181968080597125867912583308892435338706392483149232139991310577488003922853083026387762353546878968616781786702320683290245408076838623224983658193002922968799601420269991247101304606880493000638853120262969345837845575632652594203162116188047397369127024269086257206506049305152721408369249824397488170653226655559449775665832715337829296847540526548358288035657313921214610780153539347835226207976076946168876430114358524272233723646988855002094455275840302962666856844081766293291452137772048110790637266536704660807449519739327018721619044684676011960134044956848557708417750475836513642574721735576244762978717150713261667412716273664438107629604313094428969497371965141673202051915817445633979326940820989733688568069901109275117585286470786533583664247227757623461868123616550942380510328263064047797942151063136084100508835563648567547381317493212871351484118995384664462190866589013506449874230637279552571417457669151996916924270409859368135881488538365606716772030232698811184558469064636039865808366906057231656211951193116937650377253371722258540457313473237383533121791937083143459043495393649754643213866611930380243460376842178995100338772584518299046902703748625190488159098692582062884386819474282872980115522829156617371896871414855580179892864231619779226423289057203279126691229766046555328864768267364321578175263384079348441103395394618249025089795196954124821643685972538912223482310109199583464708899243992298931497078502095787511123559987214651034665741434614829428967428333802394306584477458469633359430987362811953453518400356509454058669839297226788372776367280158730642818372182875605917838630804855852420246178189659203437587382007313143987554772337361728272583250185719831437811387405182412368783988197961286391351624156213505940541094805465500164206288920572949611162162113050402038557325431333024558950631067367936611318153854810023507303764110973942973756954917700791836575148652033411756519651474800034591874142970228482783950150557217039469375536911748110596177461367744944289602462137274637274069720165611598466507748445243616769937369465337749866771841938628315536271843426900115553507410869477054081430287053781532316668174001761433261847823250273169400494042990324465308492795796008958697421991828212877366624163731089097149011406345956531300275914140023841183483485265586993192321555157485947797690816166469044557255832260658892615942710042684013595996265472441252752479660126933682227709014013002675508541470117652788250994783969626624171862885916722522793464173019418067898505345599496735174015977358875619968199716219533552738926637031051890494978338580207273924479022246491648620522810980430864243281885381172828258575698372088024439462447934958632586064921165575955786537269481483937723577490467737221720409666604585388204859474442997324805317238786488235195413838346371458154199153397286434670625395599277956221756084293733060481746683886469999967199808248860997598988465769993529406058206112180431991132713457015628241212019583216636957380809911503435447564199491276079636441647078944643232895303344668713941249744967791690209229128883799300994462500424955736495750871431874087322800538276593777301272661937240773237633293854544754939117218573431236413676044727898884777030673570034488739595200946297274238360844588881821427893674692289872719794617552712949171013259904704167278643987743105273334320443413659380726864695786527091362412670288650332875617283949480199386204263527209082186767929892326304543956845184355613429740397723016551419039154318260427281778819523773313505580722929854977110755322952416544942744038661223221183759746326498482668536001557277096914159111874312153517083375211013183593250726321533259140501285618966863802490518474254707070066879721010077181030496698210597599398932161175581512349806140123118157674998684530687977209656109669570842567739926631008487026917889091286956137809901880327742971892768270601951934752109320934869765144253043800750296293513146606452851069332013443570630554704382747449487485536496427956274784905893103873987768740604182379428000525642086938721704335210558279257980735181414966979314982367116027137599914079057701202907012346767620471172401133094852140947507709878927974690819147519376781258916641942410215263854181358354623399721795114283058445754664116386572155146227613060724837022655475289960130851827789796741182786701725436689175126115738951255328459283705735673792038332771275966384139356869886544157959423900159524818315186940605161679257955706740318466678645508179828694369147823415549800070451991820864586919375260489703149506500802123898113416334762997208596193606353010669216102269842389887094552624430998968131186451615404193377168588441373578538825728592377440448612020203066191898235515693843215931480135839738134274029581253133656093204899636776425859689995495873537309952309610072133005212939182414561325696226801098867717882906061991955075678342181331882095542089225604653021264291770836186590776579787363667069660002867694074402468427249988282181175359142889347493588450134025762040336381857980331092417620342654222801867511538594654519800002440876114049836951162662750192372554175899061991906290784393548297931360854697304660217388326454025385317464060515392460270735562634219706400179619734817004536958508273604064174329604012897892903752485301302318494759650641425275359084845658186671712160266483012379281979192335879671133821261746570768835599550683335228772226084199813244119457702012788644482031756025391901885339469726868198018085491130601667643050694626140156924968196367534431524629400571184798126488006430721476852350356305114701192180938078185596501406019121622406459154304979668159832955371593225491929291926247593357479974910111035479049436421729173094079651242582981533593842859642090017067207572422151856331378087765898272716477356116505494492527760323026755374093035374204268993047047278479131391553691647838872720204941034872333171803661000114147594995620657679606204475115479977905970944031101379807757313636918891924602682562733654982817525199083912568378542859662922923704736713241305728532013661459371953714893728644715593769353695924513479019412720277833400288463057686946226328790417273092172568136932546842785412317831005776620608067442091003848742510088030854918907472765326404312356309549410618389906172934527763348333129738356175599668898544090809612543931015042371463710234727490208128449271087498194070337397932790231655494664919249685556900070331820527927700923879904712981785622980056040860293852786608014416839444705794599237330395343625677231165730337929171123427679896358733212313404887778628928451238376200468283542093779290360409735166492249355597416078350393046779330842606201068250136256437582935384024422088122049514231186924987486386922255709770571686751402668463117086056087909722759647760111192263760999074221853531262551997916860630419344885774566813330605196726150306444911793623636315706197278750196545874376400639813558827027494733550174136896390860197943805543393966475454387001187325653165083037204644787454406449433808128377060422465144611339962742733002574791924410578469257487544550966959852204997217505241888127436816371252790120771208092431156862674023113879531236174297777218690854959431629046382150819392457019720688697146956554700635427875989653883984765265971447058319231040626981527727045895977255770905523050300664800936806107450054604610397698279501524594807393099512501267065236510023558743136424070008416804213522349576537960765214664370640100210453084611914479027691656864136391290070746628452999965623824867446732398214983818615825977108668636422441563513003831975312156804175525835009983723583171193533501782236576964961510324559549005090600262768394195823389119794969001830645368080861318691095973101919011548228483763812949239379397626324227241369442235711216350246757630159193695160367142155317905915084581982797609343509326821521911481105188403479863217823202421104691839244143919644602509537137465590142091458129871968626743829025365323860594221268369465152742323854658707635430807412874755583770885944383748932124569993895933658098650493753903580677968213439946116629845206367354440478040241152208147047847884378168346630550895572113154003279420848335567732550380587563785065372446579951171277007080376181880859588508139391302063701382117980942753440726346766393542850829543275168072355642671555135145516266084215524110054708924580833152698259832144444062702113296080126316162775848061402470651419774813974402257085656428945474157242235893836799387584558606751664927393493334857578593093025923033903249925802452928325559868490477635990253074330537697360009102142806389826773193350715830565814882983312166010168578638318113581909715614425901966904069916789058597977766919792967752743913284801516270290058840699327499070875081504588210302710253892626213023043634438957621385860258666727257127841683811540495720040171541891264342129606769050464645389966030356482089900989596777679522985065453229500095190697538100163379643439267150956032532346334280315920319424327896526362404605954432140230470878470882264003739306894517976684362812045551613042852192669772965726304705516783708137205632647644097851889002247751584331244400558203132964873335621281299717509879304619288476150109332057109283431502529001299150493028581031388664548216000769077942923394288901958119435090722574806233751271973249874552746532634460237024563407790213999716314923882457446186579151315812380783168745156472877906107226071419443707680584882191451197597628219448713650209673215406805360654332701478226078972457384732586255866424341772998013397576055716829423544245310237330356105227120287256517184974300181658805985949145921001482457911564043446049296375077517623765343452571128748736683475042340324486422980741771950961157672017460212375000343093255257855859277198951018128053837238080978550325407234199361789853768134577442527702115229975219525718789959045191073349653955820878281896398142889923003479767972076383190379298185808476922809215238314249626074164796021558425557210308754766801631838440222800550783465777015428522380797710835404996664778131573332303144318415473153348891859475225796874442481044462069842108821743637445608331048146899622744287339341798591369054634267513173964115613718772637770100806267461469864702974890809600842718955909073251470396524319777099477171768967587473664352749169748604394124828227185348843004451978265273237048553782545156365567001316028448768834710532422641102380518061679205162015773801588206664244457180510418277261829269152549407626154892937631258492719033672820382433466745502235228363223303303588498621164057491411472890847331713440771748363429011212793517034275378352451698293411530204186563333810558260562682373432930496010859284665817691922432863011084933699996961786462463745048747116470391194990030628015332701370191200450760857094229809065249035739502022559141983819390742711457191605178020143282612262800696462461845326859864102767722533666771388582815245205576926226742350534264234612616163494445478555919018674566723039443492562381116590300549213807725226129072939143803666847794403804034573197127632276495815673691688391776493042924568568460383396331869780349811708739849417094527914268223170364569506352973511214621114908992490959875119891914002201928543340360020016065452018805546551793704705117911784155214540116673803430547871133266630619513912440304683435504710983133680288052313077803153090031854465575440001750060605408581808515948034989770356122583873261823440265390089426304521951729320287328409207700383100123151876966524323583031388935239745236968350327632037316230013986711095983640286158845854503322070918325810361899675959053468566534714906108407864581052288055415062268431577178677164927351157974624449718170551912415953093539272615139170040559982269069144788537260760097258745113985468798064087385257717936930463104173511481167429308423462459460962543960069832104794421579983837186447051182599950438328122680458288337425520120137574451732030637289392014736022854027545044245408438033635786397265945453723332808703182454632061130743471916259007228432728541803309270197500946096444605584853072197436724505877621601824420511356681513957999452264448682983769699343994225768926072658063255358146106163505098999696551897853532925142643283744909834395865851620590128292004057571404777642678387685668703868806130918608461650915274491926100585166495256709407294941727457418325940432516141904359150294292748288413140787948986359366462074746713836604803390213998570822968145438813731705421355204337496672010739199285545674998128780178114493708777570231591229449657604145369857370727860129063567167048674305858866375066717347101711427057387739505853397158515841254093617246606188397586238440372102294736076889840979753873898793143249127390280808824855731104585046537769857330026521552755052259518063241611856641516275156726512986189523254888151278812592686063111446785816181415218227445732930445311585144011106096911480434585749527586559521968949018049836045512020729497009550286634399863511982953971128118927749655951377838933784252855345681378774160557470438174481259093651353914975509617330930104363369097847558011805545516823230152705422673827213285554606402424177535395875396349439257879147269990316570555566363631107873583908853302109598741956597344312363552802425107351220022316890426842094449146094093908848454232919398697089400054268720672186047939476318363153358024503206934420826394819801998769864748411198961176921530138349929123130568849437161791761185855627806231398428339981489989031517554700169925879901481360164293541370512956624760397990743413674286804847840458699624232365464488482648339370331099527120400687180993305421299234942550487704295774851922811662380580543940934664708380776764694636606791934436854233668907969931816983166891497973095943662588130142677860603610047337982454343702508574417771555874499100448295382819121831778816886809637030681464951442852987045658744822323017354193015398929135356947939839140306698866302482879187121853214437761579840307617080110522099185105281184531897202070221182174780155244891343031372681720259990267379551766505422208965641261232230697112205687652134593678103177579970271087834049239379072209949397401559634057001243257514833108769363888955683621052565237599125728261239118022575912894175987408009344745117251993238187747886278888586407900202408943623153890915214818002421838815923966958787049692850878031566893781773464813916368968542781397442084762131956466252849726966494397504673443856343004132647844309750841983656463183520640918053128194362601997214048354393807871873141019891406717655832279814142519576502831792032213339668060138693124678086147323694655541522077131244528253802212257686660195802890422055107005242552590674759212912277749904354621960351337529800061117715230093493340418671330565674438486174036271062712551650355860019081761842688678384695345181209344993751433013590249265630411818871254942665247341590902374863056013659912681932484952788985051121820811227358115551518694832616404366490062429428314767614403471928494311323127965060377740115015320155059011183773686991112928134219938238861942579094187368578097611857130108971701774055507254283957072531780780052063471633303056993180268811324636908498651379339810544455043184362168932560296467858789354987134340096423851366091213584971916411716002520202011394261611806506910717102336647860845390923567597373075328613344631519251210849547351316195902683921154170420914315410594227945953667999824864089646190094752335728668593487864038958074636801121239687073243551314746481125760217832551027923488199932464686665557283280854081782932546169494512387423905425853523327120893410410728807263709579745414874034347298836164872219912390950976376370657059966587673786130299383959548096535839326684422935261597602533478601891806412747416883653296136723782138835982528170764256084886875777597602961751140496094774423625070287438285325047835576946313794396636877736116310029692958421411875762799468941694906926445604500237069120930529645136448763546020507845697850054138785172342116922512128840514349291988431425294645753905990244686733733410385281678970312606729383537299554607797672907990394591796359202264492486835738568186180945133516707434961240365199176036679479430505970223502962244183781380913196804818441600413779120622805317818799661043554644440443705675483765184690435438142246744131509594661229983124492357221608279423279364533295157372659250705441584344308292111187384818184306257974181607894350319552740374868519341191483135283763350477192196383786427703966689423831363409240725954775713154895328593988160732590160054997239929414823714727974826024035217860503862168944433455274636864484104518503915125790030638481521747050177942348449246957290358941785218596751364264136325302012127514536979011995360578526074657060450670609980645092613668861127834866905147761396712739540375500705135160407800946104520181528985815263489926159911880084213321212768952431725838938601672188812651102720142982130177098645113732975494219793752073889227065759762609687893651335914924691660042543013159140121403093465609000857166311112970382917214818048185101582696684107408042143042945014390810480019118356949537099663818754715059209366691270390106111853299655506660134809491448878987832685380104145003045774887739416422218687559783784403589016023706079260754932303246949584114360114089506475306440896925694575031099223891967798964042809303692120072723649900326855730217433709980256225249076797838874125035531112686624813374295588750086023037138555024936706002261539102751472102701168353855022613318138841001365460254229596701129402640443828649877042750795516229713646589327314125732074265431844531268182493212072736085146019842646560868628969743149933436726067266230293919685332063288083684098369674426608064526187772953954892826318674314993417979569039823495888917128289051117477198054203719038275454185022748040457767103249901035731885373830510569953185345260681492090178619428435327767997448105824239005042284690390909455119903699725245439425773459997919739647511506450037183108134359259135471444850889646470849065205304395614092274471027676451130301998192579884981980383331004755985458519740718112147812962705310617555010259274607985705228893551463836617686124231748426817936045494654384933976330192421266623131254582148198369659191509650211552964003305770959771233149223935846202962723117218456932567654472669816733803847092639735772223976250554596127643265710435182191800068647592743527104298607516812775387380003886771219532565745981432787326595836968342349008462815121251789385562875463614831060974949395788692980727720786032761748572416672895325498419331366014371448904732847968285929375551256672205371236319010761607531035489389025830582442491033340311783200278400330573275229324139285691959682207033048166845240280073722049031522270750064451502205702838802314453492907125113196867357626343878692666709910893945062710386453480965984908868928331852364750709250772228522623061255781933618377709440518884675617168771208213362028807000568991336640250325843144807507365386167323430530383757386514877678566741578803351624259009223626044690394968507237740190193077024096179943106691946391713265839010095279092109535492123342892233114535396448888859072578357724845567858023341418639436957064116245382812764104096389861125288235620089839796959708844667271837724791853923155783350300837209697417124820469598763421016230556944144273578255047209140685603269167269642662464781417402044138800193094975708451596078152422131206951630446037496865433989208174418961047669463435692646401380865304211042807149992732461476622644253291650530746199877456840901162470871578154957110644808251440332624321213214254142116691052442993385768448482702905034603814208635913143936488381755746324155738630413306167461255699186732545319102104515653378661263778599973833109965924889965578020478609385756785428483645146480030473312941683848824619427905074772081786032588682913441577171034065769355232243310095044798628461790230246155642424833564029628986053338033122509288271156493098356126356548508541821956447282864237858810739664866039796867178105481303341995681155609103956708352541385258044674233021538488882256047867864755689487264233200251948632434367557411696985908027963208271722356561030717196004391383906360151985343954617673570213543813895091001157665808641175774156333012362213294444222039514585400935738306777816189406291014204426171617177142780096988819473458459887462124401026378144063946634234937478266777216707400466276855252285387625315985860983345555708831049494034215551909856922269254608364369447708759473754568912693844211940774320914411502602340550200223765229096489309938496752456919270003385668591424974211318904032650304107631242385298382914407054967999534142551977432253069569518207821850880260921220586532594795739409805616209429954329604196061909860469006839106493724703640208556506345365382655886368345271812409551029573250054776291206004935504682461872164043783174653715005083196118181680022375451553428281102240058446959296955227821993514685348539842528436786789259135360096841258032925547689013177486729459318947085055431774319351281557368747716393992737693541108230965435660525692480717964031924241664724388845193264670242141356326509471299306016413454162671571381531753658371397956451669887495352630248631157664761965740380082152914081452732415621628375282370868233950168887184531780269004718739099708910660900090201255053397723188285495192828542314394947620483330304687649237120551521237832434525777447953092911201834715259217245519280176880179885337857732604864405057483694102485505256429471768330406332418310295400408419432432940963470934061812695129941627390018523946146290853393677169776503143927133001591974399819542958121940959619409121036386106497029519948200613092346225268222984335952952211870862507812271819553684431413604081858429624556100379315289298469968791166103454024434690367788140204407001004669551371707738311759495150757612726027877731029702306303481073738582347882595922394576946021621186829772467105355572710477124514971906584017529758090618910480942805666401277004037346463984772905375809948144463853491825056157101189240572959686371293182284160480818545596306440473897493917768183499944319205900645179847295735484551449225229261645269968906429508149998138016622129015857135775809846587750617782253958791389940037001143544832241065010658361305409557331037342515976928994199426578267553413249193592307251067458813978078291350669052525953950112448480003624625092254818432528874435095079342421604083110240934432048412320452642368267544141594660095901465974593532827701312505826582575011497446990637441740616567155660949020249228616684830320354314707270016757257201734175571113012610174151094479944413698938350396910278103547991209738636261259356477694949886515282971734718664058449032335352583037449070952755124611382023143401658303667877578519296296527334023449638130475844470991345333618511394777165597830452951636561490737471919475646861928324359374967832521186421053437409487480470461954966554705773855950738645971740817037823241512416093275245345820788368984925734262305322634441156380026457447197182213483013402950350246138649304465256498219312777160525099167726998120704957725403800575045490582281116114994378718817183032439438208226746360325766986720916774835054649560456316259175632867603045141112409889552612372622765216331693789078480741915298207295555848306263838407170482811223590205255671667422964415870641962144241361255726603720198161298973619057586912427934170325155184902616599199143436064767051953442782556327831427853713857411098088989225849680427893366785692117780023838758363675203567047751767933295657237755027185531691483903456972232893961200648229859233228579781125136864313569508852945160079164443773633476981446295403950535828103167719751726784350601629663178850550389728335502140195564260831725188380387307159781158911038797569919167004945795140577149749170901864075423619030300911182620763077511907189012876305215130787412613925421216160360751332520310931569700798283937005333531483817004253266974122408656002783119309246945216360789948717449837131577677922669864583629782440739388630470181967026233829667565773873102079102987908580164142215769036178315875089633501680791005716918960107298151922455023391131279507844863316483788898011992028922935242614044660187284736254085622682834529882590617733762378374747202648059522912576707100472276664571181081828497963723051983320823361890551873317486588183597041968899647405888812769324885665206175649824784331136051942330320955997813290150374169555690598341682414758358005345032263076159951017735855589303019820663937187166738223420643133072273883753060709742405287892650826450075887658352906610591407918098029363694819236430463321771822021175150958737396912367945520530338753965695796553479705539515710152369148055346684802318377472296952509107769076222779644096906583067893946837767792663232669048207226484434581284994990609048194589647870843829686890438595763980976771026423557663089024892131001305788227380520948975891163833166047675665100986690807244435880890604269549826217825523138658314976275936944089547382635813595490748259777205666498345149897846304836074875260873003896477439834091090867636750095043118229481634887286877880618142748512183455056884216089061037969239651354971148328982756655369145281624013806819439797157064508394810115585016956024709722310092594188732446592100117958881002635994259708482658147888287467568985217077229723202214489094759132716574769640290873606782618033552995230016319587100167955339887968922205047010011389063615635451818872082020951265796370440182994059107927214391413065859873935945939866806647249901995379512541102421318646178957796346016199498645184725987268058320037711898529749988840623868356343243014613790813886854385271790938818469590098025543064598325239352259049625770848587072012496241155997192163530260660709931448706553743372471711358996628745306173083673087048269342745699715075360398067471245252833958545215646060059000665959497705967713122400751567337815731755845116818658270900111989799269094832164568929732353735566608022923214255026340432900765571233256796055879631067021720614281128969644791733928937006346217595371531877564139995663256573848449072798997910083484619753891994751816910829518221088342707669386410746832407567737548811686421700767615090296347645343686568901979295358016279996388099431659129877979491614467543895195928365541638941655634949364961607403740873577172023120167622227906175594503905136634860440145452083845427286042679614121738077233331267751337860968115995259442772881335900849426085481298429404772477164459261951878223611738672150293049444078426200516395163393367687521048654041265810615151381063263935652729823202648067856665037222449646098366399836365825764298326138044202049679510635928460540367467980830027780617634593554463824431146300071372144602579306617234168891833603527083083269873328058909495444334975114655549063249720495617631057572031874245243997961001300513101362881251642646541467566216418471740031857891367923431107308911790203560135760701742446161244397707823612390132206932904487297474667708365158321867415005381327784224688971310518664331206516637603593863201168061905577055537633677360364992716387876270201457406093693672211367026066251359512820184684258506560590497065152819145724007871945726278627820342047898093019876389613692251293554098133528921703415241378403497988370527212999054917321986991814063285400208883044316721908821428731628645291282887066115443721552877170570604616124348447368192516248043205025944481980530204535986716383404018559523989983031812399260867758441326518650885918827088514421998934133330104671880369209347348081232645725979472839249731922910513395615257747541668539314925713185740795246049806364284790354471628315103815173988609118640232034770300847089190756094694855291947481048264317280061195943077860015918935087735267314720428607580533653591482200744245764521762708826753820707439580086465928632736043303848285308853903855332348614871305843065583952661440745127334275983316524983354636338311850616828793114631386447872731549903896191810618225811994194258543856474840852403622495390802298101905113183569217747553051194324637039769564669265685730461935387485745474548531803797420197881185660590162228866272412460152679622021094012535010728078962481494326411253419325936549782831143489394327333139421162015929032280145593875719333520986496480401015368469256210183619123828239613847237761325489122341426463456792867754427053754130540233036035263170583560480037008121865434631069654336463838256630571872029280200897225456315873962517477987515356054666388335880482803738335843281234886361107822104373467807207148152456587769815724600397786335996139383096925464081053403190812702627052226018164361018089519728465893624253132229741126080320799891756070655845964271557907548948044677077363863257868119670264756034808085525933006104325450582318119445844371631130489034386859999641254958672328012330708972446485735538272452812683116142324976642281414157806727682979925482140939388726958044973071808687704736117992808583199418428491405610310555841404113412524512607651482794741704104508555513921174117909699949944138077122359611486542282513706246826158111267704327564719834230477914342600808913796656021750262931585150361150826736050413848790484905133275593843111446885863249713473516993295032625202150709018861820843089366420307862925612315011763286059087359702646725316162907318251933248352262736009240653208822499846306085714364841289204210934994061604517285057191437038278296329720531577065146776291030097029355798319414150197610941914453739920532379971545817364964168876652813969275610223555143453902384109425782195979757650614340946753732503697778300949396933922189195629933830643427842357993425928608221704765171398421314049866443720720332523788140277791693319134495238776754114249069486675919919115524635059068477480012114318640538800382974854180294512160755863961496844546963247293230634774004814278524154396815808981949969899661609677131701008847067152145047651867360230416267953917241882452727879680761316075541059208603633056503562463652855050253493849478608019628492062758037223414401417765687997128882287982851856003322488026022040865006856147528873435385875797540153930164571391471671391160042539309854941702496529294867154798015788742502152230116550540162661693692539273155844284794665714954330600878709559778016078241522501246825227935293632552928387677803748341379225975660508623451899520006550271647002585568931118574545455659515660038345490294841747607977013620826761777237291808944805985937922773779602164771924014259621421398152048641717356805328377078270519526709847397617420484043908676504757819931941243041177123618041199834460478895183606359631910158614297021460961506443641195117499315571630596201425150181128388605065882437056059202356631642243208507714451165052845415067097808080851672441966218691001993587878740388639996683623023734138001598565353767664950990981120035086276433367022305016868201908444769762114808566372599134247909095865960176282379704629611831845169982707258625668463208361346123275876520219495822276097730472791775307022937656401471570150603123068394019432703602830427629891416112019683710380141408360658819167165008669555364748658228361388799129393430801106411036742406503306803992584318621042791299946447585114169600357210438157957095528391813802687194266709630039430263970789169155406821880784658555589183142366431661016710970043339646209991971708490052667399949393124645885563312313000565256168576816471242098741078655616401684618105443606700332167319459199324804559567998844314002622600802628881188006088161891775688908776969324799915484922813295198723011775033753773984506158063112672102525281790176367584254556349673906995336472433972094889433283905354468728810249741810297092250546619901076403998845317693420655635133057775389193863669306991834605425655868705164472180005264501435736678480521635938716050416503207778590785511538467619550627020032108893492813556129597923638223179897023498575923081788821088015804957415400699801583142361538757925647242388065271363797533919781055008828224632453178217449526824788604797672702208962436493342699356518705273202494331071951221069318730689993098592688654567904468057095325225333473423398110323034834929517178574105226269026108740903170496491984283872607251986315802385098293436390674754854459924659801591397981418582800158623004657928930499141495824770952134245875818682387530291630027075762725947865821227819368622145724985158466580099763293854618850180801176478217411245219876559766971294143696106113612302343864027910528445943043133916663267112690598511400033628218370711265166997699353177108131047643498369142260604016608498278071054060236977815657846742243817272015351033515462368642825223680361745623868563711420294182888855363490410712215539677378212792938504001171148596659381275262256682730800334574549206704438125823923904766613486206013683813771293988827994751308475891995988301215387152574419412381447476226068834648858706639617162206593451235290457471618073014725679837379893842150101611995440452298353244439201356304245337965099464541409401494998025031536565597836490234188808696463603490112721627711519596821915331825959575551885212518211442269003344859271286227913506007307492776291453029668960179359667440503179328412171436131912330530510150770695249381710538279056954140700591999368475200255875436698833909225866367218550888340455501359261125896501916510656688648535225387182212843221884399211433135403492193025160357801967177079276486051857093141011025001336496825522387474808295736361392021889554180981081598463622614232871932724282534643030508717884192962595416173373901132147755094503249975052901677902751297694205366921037547465221635547109834317374178362148899395469037802172487094585186770930012509897916799608892358494351340358146933481155823397177111871069488870844726702308338279055819352376060712105984288779181524985526892916898169771532756305479326497428699889380770355624262738057395122369955283094631409213654957473184032227153342629154545066740409513258489251745894951453040542909925854317157799562581760030422099105501627694451657079935138142010860784796990853862871522191280775790778371590639687771159316980947819357536812939905863927717243432556756272342151545076411956132389217805472604221690864013707763682018315188952607119946758811062148170296556777942812437533627450340974634326975205472489671702387269156909914717782582977963643216463960975465090627229265120385884158666145053132529879199674915773930220784503882143864875273224940706693965405173279072485994435371203100135615211846813669839874064050008341057733642309562593482175302832142539877643154259022027570686612027858107329925902923992533804455918636701337810809181701161499325971154106538957803193456380395910615088491686184579554366213353862404529468229005466380181873403409584627731219911460708898848941094056348224778795961427666141965047354825879067952211675767220530116000295439261008669342189007742280071068070049356315167614419942532751651005774976056088498859079183494367859475921643977167294332870981630985883183324300422297953590981162371465213620389531664792862643382599634861925000395120572493802624931228823781014097594009428931662915167760327883521129852617756650413448593360913038295175844623203494974914165179908375706734492901224902529747574979742050002106663406003731866003308390615816816885072065325693182794964309658585406733281728826923008660251012331523873157425596492124889226549015883614419445399308078104363183239762732476535449006179002325229065282571464204281914919738887388806093573140020542097502020482802396957530453128838606753183180413618231714722120716858511620673458780848212762689022503174722516119261588243338767449952444434492732505531744736476097910021749893176437861458807350602081308059329158498808470348829171596127767256507414629365764148529834296644442209403194238593555813227361493776673378092377609835480829848834776365785714688656577506221151558342984932908100108088372100268085844151793490975148337058265267421349296237603497728123188032647729521086794670644515840940201571775430350624975038471658580078746878268495164463287848960878856056346450934896163169743105045165581323819513175905223706128682491544237639104590089628822641723836875903418320273003356617592635747925184879866743725876316742503710595986069001288762512476804118154783404812514751164897754250989522763124616991870608224785876468099785756699995690777785521839922485175041682536651172403481264582149129122640889832309992014062260099244291268883993005187894563801642518228414478270295351387046868187081518459838095851978514656128229212018856271178656781951865372510349741871729755268077300762982107262353653936518893638816222941960957234072662945228277096588212009569956941412021462076133412738736146790862165840981502021144402381041280424251250883937325527577117337986616772117322486188058793070661939091520797904347760947648229902630915645259852652351426082406577287674223134756799727233169989521419114425894731716176653550245770496344605597265572794815166192064124403378151092763885978383102009455257854519465550301246995381640601210343662742827682420934279626373395652395999817378249059327854481350431454370932564627625133649242512820576486994269314077980997512181283650077115840159571482838806660739273917501233904422474377532434136501025892293378909898783835997744621072578866963094511489842039592491140393655505817457506101458107717258837998857511634160292786691167461904365591738425550323512909380910134644272821236782228219560211903524789255642834093938631309207016144273343561768392015946096695071260787134006919955539723059270708621799610107543927526866927300423827447908075410338089761911335554236211607220959786761543017923621639938468989547957660767931657662555862328888341958281025006331151526846302872456080086024493507245030108230400783031595576151219819834046954989509826434061777922015202698717273136926158519899556374615974574751476743761878619405436331799448199218707421684180814768572994000075233007328760708771469685534860487027489184792709249535333983754626094433733032515199669313204947984860617843400446621737370155244778071837898583388336317051871475231701394053764483680409312689893186371509520310162182341717820195936661217314875571498709625015897265778525908426192975934981499327876012898297481801302513955401656740742216850342293182123512761948372907243591709809867936260493428885126511278718652820255574252494032278725612072481843951172165236478241369093618112853011844718845683244161791308969305441124717285732154355994917446499020686931075617421667334186609165302628815065613660124919531779983740755489097111398429642375934585615080318880945851714180064949364535973649030877678201116971542188813985546353470746080703026718628888167099094905487828127808372458317234986212227785960019744988804796058282310039384459545585269109729037178184648276479018986182113845519243079489398133256876630653378351331911274848188248662596501979226917582116118414287306394568957790733295371259982778148292520276396147454871187308323855969429534148144661681789463134733719964597750987783364244289405724721486331025051689631320360354172622130078192112932513759893682282761898438094232952668404869672405207574076058791075187428450213304735992945688679113077409644110920248046893065024931964522048240938556520005706710005859495886813562695510970268577213963715728820134124358408738944689728844164577395064088737288423942837489012346099566084287150267414187495425649479841848385871962820959477885446374521648256438103084109135495704911087255494677079761801565634611237266318594849791726944047395235607649191909852897356458928629738104459452802907338153775097668122498603398192996423582181648082577188518353374547684930803109595187299401366263822653454162234774772311308453961738397188217257178280423339056239809467587898119899705455896748544161972100059530059884503731622192443130376572006764511595596363774526764097092375628909773455008189308634710975487576532392383165983021315524343179231843380356936802680309074711077530643449857659333638389866129257243516335469244971824181245127687203135672398351564301811199850315776' ) ; +test( macro , '51676101935731' , 0 , '1' ) ; +test( macro , '-51676101935731' , 0 , '1' ) ; +test( macro , '51676101935731' , 1 , '51676101935731' ) ; +test( macro , '-51676101935731' , 1 , '-51676101935731' ) ; +test( macro , '51676101935731' , 3 , '137996870875659993023030601717979081222891' ) ; +test( macro , '-51676101935731' , 3 , '-137996870875659993023030601717979081222891' ) ; +test( macro , '51676101935731' , 7 , '984075056308295134728924301613024127189711420386591471717924665943308236455086452620716372586011' ) ; +test( macro , '-51676101935731' , 7 , '-984075056308295134728924301613024127189711420386591471717924665943308236455086452620716372586011' ) ; +test( macro , '51676101935731' , 9 , '2627893230921823604806622170301238567075367550796577156262388588821361374710043228118573957775035487173592314570495647093971' ) ; +test( macro , '-51676101935731' , 9 , '-2627893230921823604806622170301238567075367550796577156262388588821361374710043228118573957775035487173592314570495647093971' ) ; +test( macro , '51676101935731' , 11 , '7017577357393414069660702103810709794111639796715410950809665871416156554402226865497006924403635139554341331701687118636537520158096482611987596307531' ) ; +test( macro , '-51676101935731' , 11 , '-7017577357393414069660702103810709794111639796715410950809665871416156554402226865497006924403635139554341331701687118636537520158096482611987596307531' ) ; +test( macro , '51676101935731' , 17 , '133636682614207953928748833850325980733386921434321011865528143804403832298431098135380464855882180500142250108938933037601304663280771463018430933459134652554649625077355814284452093494072216581175752265212265439075492239388118741811' ) ; +test( macro , '-51676101935731' , 17 , '-133636682614207953928748833850325980733386921434321011865528143804403832298431098135380464855882180500142250108938933037601304663280771463018430933459134652554649625077355814284452093494072216581175752265212265439075492239388118741811' ) ; +test( macro , '51676101935731' , 22 , '49246391967000732783507102143055596698062541496879424569521554617507032914914454137461679988278650797334594157775094696043090861230475376194375316521688783968615512922433798610465048085885649879473134467691860598529596944970613815754223330498710317737303087189649634312376508482500446153530865527315961' ) ; +test( macro , '-51676101935731' , 22 , '49246391967000732783507102143055596698062541496879424569521554617507032914914454137461679988278650797334594157775094696043090861230475376194375316521688783968615512922433798610465048085885649879473134467691860598529596944970613815754223330498710317737303087189649634312376508482500446153530865527315961' ) ; +test( macro , '51676101935731' , 24 , '131508525968430457729352665685966579498949401101062972415020772435432844742532822029053861945108891212811973673289631212054118103889130601356311755368990255559386038292351210647400499145803946225847945057201109848257891860310495954779113656786197608913596258321184172812660728137089758780590575321178923726688892590199481699405921' ) ; +test( macro , '-51676101935731' , 24 , '131508525968430457729352665685966579498949401101062972415020772435432844742532822029053861945108891212811973673289631212054118103889130601356311755368990255559386038292351210647400499145803946225847945057201109848257891860310495954779113656786197608913596258321184172812660728137089758780590575321178923726688892590199481699405921' ) ; +test( macro , '51676101935731' , 27 , '18147765077113876911302828311188973140568509988864514321318950227295742688037464926647103633287511191936183601316483196589434477469945433422640225075158236638385320220491900270340310290917462596573996639230442725247179360636496672307042746911978502976958429476017502296658675079086344867081673179346751656568649207060344721536870325119505423628920139126455081000886137611' ) ; +test( macro , '-51676101935731' , 27 , '-18147765077113876911302828311188973140568509988864514321318950227295742688037464926647103633287511191936183601316483196589434477469945433422640225075158236638385320220491900270340310290917462596573996639230442725247179360636496672307042746911978502976958429476017502296658675079086344867081673179346751656568649207060344721536870325119505423628920139126455081000886137611' ) ; +test( macro , '51676101935731' , 29 , '48462145947906619312350693780921922040423061718629753751200616100444307162466564390962728897898203939025561944853542772935543250149935950441420073115202129685015069493947975962419875285445358970303515733347425597885530386757928989657327135942306712537754584065199854414524879131878269249276451508346267360984001689290919795053747833808800804304207297975041606946075388009728565472578248141445621571' ) ; +test( macro , '-51676101935731' , 29 , '-48462145947906619312350693780921922040423061718629753751200616100444307162466564390962728897898203939025561944853542772935543250149935950441420073115202129685015069493947975962419875285445358970303515733347425597885530386757928989657327135942306712537754584065199854414524879131878269249276451508346267360984001689290919795053747833808800804304207297975041606946075388009728565472578248141445621571' ) ; +test( macro , '51676101935731' , 1234 , '158324042278377313925303658781524871614898748673989982468397056801513262659968003390685627949704258611320160536626820028889962136800384219988465148278031573450509106387239568116863743081510112367947744316933204800345240432247765898932280221777380025886378197115150023156888075592661959629600638394821303250632425654059380834813385429980578207356778680885151122557244823021413539337390766886386023683774012622502869673441546686299110751211243381992933447873142802156806866162053801684285033755846634081232710212999710106103508622919082329128210235683603138941762803368001142605648619008990425285579947768914521571612053244135664040468206471912029995462838737725025722037780961352097655556940963081046269689524507058695919021145649857025466601631832206335908714770892218847010797983061128886699295778458908026100799624592058868604507879625795059341788256071347226801293035257896677449812101619168410274645467937698072600485973695316558617078697826464067560685120905997944243512191651052772680067894809080799438615784588878741144055738313954890688400429893361117159935248693696396627137695916187850803885204391372040167551605832355933919492494203181745050697494649819656173693467296980021705890813609884785517604611253528819574733690077002295678785343609499106604869068180574890180024198538158171783307883610859971770618231149618665209136576442748277494550519027415619444394250603341387572991349015145136953473904476495181684188774626834750617818472938996987683214283309439924103189995535468277303822947364785117218431807701765196665481474819809014739483414625184823572545931155707708389629548395519118401609231979035135464875664607469901894710597734005254396315648601392217921679551086702353136339520705796471641431879666411557946264230276753464580691493861591875142232836387168105624036383384304939623273671227663421382364346405035511757097384178188343056871496957008430970719845337135563975023000121180003910787544177586770185372939136428614465285828597849364223527930973569574297409565906234014152140399051264908028037854285065695691516894764306741200445258651130079726633055035454707400264143396200125546607001935250751700196849819373198663005937089255142210331719097533030824267705354302579492394252054624819810635910772930818973501002381509037985751201262426338686073137167777790210884526513502529974672754561818929196841359487503116806374857279102032619499735463547437917873852231188627313193995709278200744560332235099781528906681845236757294232939540840501710793402651215365559223726732901232304332589555728463490815104762256836437378942770237781171541242665277050803400441103245698206078424116844542305855433985742997194723110120559706402361837255518215431654983113821256777518566578007246638117303300813282471059695780960937192471342720483093022397272639388862609111334563922759362521380716417092672083635856258692643635802385292897608203124530755925272475970099885482900647144339393451148660375139200420049453396533433237007433364495099843124339385777936467767832834097532992680258633382504023134945528051080162773976630522027388364871860673885601145463850278499705365785873574057496070902362590690329163430582931012722823339673749687448879341947128478168108948119496075857326371621272158040967590212259705607234109590371908430237962275467620195565091210074536958791316104893306127805978301999920209853998214358942944312450676988966603743669909381196873223441882204064076740792698565324619823892332131678341250397203399047128712276865053621353068705821363484016988865027435388961661676827059827201761588689945100159628259798636637114887843908407692866645165407556635346270470882762478678318748969509612841224405192451391751679491699159481451781132856593225478798461105500650078302736522399508859604061090018430782371103406780095793970327199466172644652070455424994736654900037878682536762730674188797509195743679412902718668219372565376042254451189328399930173247680691539750124735316777490200616789118915166628770213641217493993403209087930983866118739242363270739641673142095457606027878252411764298206871520866755170134693811548956683565065642028688637479006103660374113920609307215137832756503673451270374534771904030303590041498702749217222999004759003357602091152034722604948534571885348781516114248627593361371966083846505528180094830427733303359954633778102329930129088225944419675472344592340947633203426100068451070062748913329381430835928677944810202891752490896892126540425812163639252121628049481160408647454747378481685454865724857469700081698360897592285719829250458270700796398492146131941376976151305748227248367443062739785389412243719697174747793918305844429511703312893537458763839752259611393771379620065253777610623533134188428935625387641575540926717563311541862831476044794518109895950317069739650023453809779525953218406298837457049987396316333779299477763690386671808883206738746473461031527288187096362547392481733828192703691811275652684091878491782335647464304090599317117223713118270154362644379673966875526023251794033742058280817715606901272370694953811351940143399555738367916981834656631234106492867315013462578161451861851222727927484978513364472656866134489436147990440601567348247368143427992571647342689311925448855042244915814046156681924587686088299035248256687768173138305271776131448783660494290452155267493170780209088260573726810563594020164626876894543544776117725891695956937655222596747253562951739070430520784626532005865397891770599810947915766027843984225809506465099491726669647675836542704925940472862292458103317707001664851510631632483368333519166567495603149523436655902927352564469259379326902513957700266530203095978420437621994997883942015182535685373952581674954526368979534376580657019506688748132488994259649481602782027268796321496293234619922858621277867678825491370164615078298949196552511455124851536133799925473329405250474593913924912551804901403390831450711740501508314471344016110507593788337973582789067759260879539344607152262224215382333489330153894940009834586533901180095846730855291500939551837669345284373711184756405666180209071363312585030301685774779292178313316406602373255646327348281134955048336338727490454877812787617492427362023670761057324483134159661968729511955276617697409266496712072219753283729016198339234913450671856683431220026361896256233229763483100008432120294903953687352831503401656888244700073250811277269623445793796563405171676855616924791868998241051758600745245397052440394156686933344580101379617401437696817984459028218921041977399588148719347919096302390719921087960315851964586936208155974897770793714626502400010799023394074901830556484876564044019461148646704484745692998552151910298131789877533559303845220138187074792203552289300587811989652204054350569388609355366352079539773210398305281469358542324938107197041217218595947653381833043778081164511742732935680326233241131641428417476654793443376871059887960714321380031930204997295874730540407682218645410154547363569726463842192519870398072169036254497989626119475346195254734474880846366685010394270094459050207503355330015842707449098167167948112211428609169028462215066248890291708247636295839908593225052889285032180148515349175791108452276764174092593481970638911935180284154383805459092545680971655577656000718287895404174650864444487637275330486618588627887913198091137313600079403324248364944559239416972594744134017813214704259974060248545972845617599594908395004708799034010940349453335426733467851508855124434739037794790113915284799938282633515926124039300489403274166512016144314450767050504019696951073496152282334971591755531534918527658116356766005810018865387036502835277104484897521399845192578397217389066546258015343671781439530194484186424336132467982739290593716534087153430243415506786743021432802857971661907233602499902567387941782564166386342672410874812089691799529503443000488843767817702945159240603649832489196454539442081235188719658702765814391130506231315568011273524165094617918503831867012569022324402969461007866076655261544955353941677901200948344001405059672259174534803855786509381749106901797774448058734457124149367609992922544375497404889378084258630248150919968340293441413856717836345219286003180349374207341129088557493435423239964391016550727225456481162350628594289395184071310300179756589174536625319150383798785373066376691658528761564820534618453895379491843182268871603588369275077855410841475816916672608469381494765293579645251398504292250764825206147001031380918536905798997324364665442675157885496504116737588881183129820652811664336805124175412738167561167253417906013601281586840716605226757932860034772050966241473341886952885772364434302876604236880399216981777408544673261443252042495657687251968928902101306694702738065723310727043271924859335698667952366365883749591917139742105118753077931026478251365210693917236917159155967697763044367201149926693443948539699579913602708706722711432838021246855315885038460450756859122906583939756348652891700451630407133090901515174232078445554725093208016341426376158610309666955884603433032223065165852248565738599860177261970078536206931153975848971431287001632805433404957578207772941765098112799264026267445074698665059729145576674938934608054531809788773719961126616990316210326818453980080321988760982334379271531791369297582640574651520702873403331880456606970974892343433336446248718921846000086640006680764293893307983492389270379130633842798650803348158429980408513212973097444321318667389109611955924135884714672638284288772566998005211664934734547822982660638379730254204195834897865492728459422863551908452096176425627547324850175172784662840168613264736639310780854731722004175205456083684478275667370139311794044918888433282117891203786131932421524201946630405904103705604352951344094166243627023050380063835187325378976884921927883069821201742308833558695341662261151498959733037164633952848288492505505197499859566019268823236129754425893906449877905855504081397182635782376853937776733107007960687910397361651834577002303143087866448497366428780519572180278375369679225575668491891544012967905489645541044473614128660244742603437904495496004459121145000204660640788761369040236852666481807337266045681038338455762663801212249239773760849573135339910245942472057741897143798714888511942994856977741299663716890747044572844810556164536063761986767836402140711391146026318746472684683736517628592458110701485687350372867786408697530159165580262455780381579264667555447984957739182385760977780225061084004806106049112388374908757400568145385583888461889658540915335972493538978104321154519123769320702224831927212063777898343511469299130626487155185875277476235831577797403193411734525969805530291201270196761046479780099300862785898294670735985568048204412072182439508001601125949813004653714414454010147969834379658692070731355494945150892188648577526049837658909733330381505835664398796899002686901365148731947521928717964471059772305071463737374874406416651278356408918633301449776192835629215568915731374744480004571009884843731735476903477562446584279323243628329043070154171111030416954029897290949469967976161666719811003325138761099757410714225754805089491754951146648993331480859725730046281101542321018226211161218032808157377990274486574775247295293446271999216933362071677144037958846938035870357017121382946099997460180182187217217820316108638070949402341509021488404838623964004697749860791584971181351855741948571771355034517420282039098468418778809673122690363103723019689210278682644736222976118509622284207375261241784528558945409584782281603428222482076644739841708067658443152632760947992710970595496336571116020117920899681972595692145247586867390993275854296221489381933037318139292360281964291441764499495760508673368168379423816602792242572983422830229937308653522404847350290384106194221461480553536360110558204157177392001034747822538121785134044265222471502565785788526018168367500851854368644667069187608053339694123467967831636497181955436837184144618605482450617195904135269079047201637007435156663520051298601126128369945944529481020638321516198582623214543218826748293953436296165935049635820455993901167665818294125029492356440701038244166842363513621908344320848585686797979439878826598478637355993217261347336958935084397089381198078856022083300330117262456180993049915148012467532881768933263035840131555093550707791000541507741393303110968532024193273602133335942404611643551498070626757534418055263575760282736414364452938769778575091320674432871296496661879381856396240520797406048137637370857663757380205251562705321737487489618016878804542225487729084746708529820375811443132907266237938994474813800033631766739207459417966080119828341415764580961209459326665346025307463631064586254511715110933308682061703769489020980806855962724479591125787395163620658259594004092166562170516032834000268855499213998125944650816177533565867482786957117566835113604843003762380044014420897831990140335889989942967539299895614370850827546132043892135670514224732115622279448086834055661975850510059575409653558505225706327368788238605905950679120827356203968736553949603508567674941011900196065319763868748440255691811431275690300510418853466423120699880274299502906401428179717337224051460708185153900592946400931539055519213456766111907891650507124264750664276520240241037246834114060324514820797852416016033426385928748625138008254308550145235061493199996695892684482660951996875137704256478179472342925959911345035957714418554051230886742531878578912441446768201652221881141572325507385719459138517136751018669079028246205826509211255942319179978511691727159374093169411671988666216994674771387581235589884768273625075469787220620863887485675316340301843253576693265829584060863611223658502419013220705349254141879296678287934598990177839246206875955136263946160336147575157943154184876112942552766291737477532772806816444968335075758603052677831616530597162083339994792052192524435339516491271771018617304228747316364353881326364901896898510732593688984287402238373219422623300832304655724736690619601526746558520579969086684975110249886471858004298619330841151157594042888413560753001085286164089989253446994193592178607918900886160044643360093127301377281151260181516816234448235332218822653468714779419621593045561237278383012807110518306356320302829822203975624356719898344296257410860244073851008991224738267988788643891504893485173066765606602131746590564072891775528764778009114601909601715732204601099651995466171422428561778738906387340637322539207184732852648369340774890627245756174444189797920171705224195397835012801944668568199244460984454556749562726348626755008071045094089456543538334719344496279903285819785473638260950225191989064998217546604935254843644830354787903047294704085156710060314626981157703292007319217920772059875929487108231502602963313451208908800123467770051210962134514589094511232458059331648208202240238411255010578542406383889733905056465012899219382378659412932505825923945018151275013771662079650082951456689539196985442677624790938978370091323150932644989813926815926713764846502628535537778970161281065391987916405930855478432409513765364564416242604015243337740020591190036055281150381447998127901685806875751795496258487587782150231045731795366439544769654743511101346187573916565954617871601220556806571910322664035856441943067590583463139288226902843506064510903232434224397360091696338842373040990564260619541435411792673618388777689980307230201828335309818088702867877855077758454325070909742544384843822430367944236208743002020404743158305208417720634625853803097299728910140526037383656368066889205000542592984418496643069772107977370892309483087973050493056264411495806490399183836440009935339770300091372817892264236279135289290245333645902675314110412649989844978340728685671821112290828829269519229582863992855788155443525507663925117628911796188678980556041341513060132014775432709153262923597668710862496337413472675889360137051840453387185317746367448685333562536587961087795964381494602518709912953530990322369678697647756220485903298571233830750815526500393713347618692958695894950510589138728887035609091986740671003066902402415899517198377159897977346749717804687344625438051024990052589164200510168556411467500390153089322228903919050120669166638660142562191207450620162728156493213454482792702092126905050509757880809402415274410795695253751046401154902184294192597738198949251837113299325218278871891594334354748578529416161681277186999781125923908898170603590196546728188587904407695359656110397019078754943031963775608531765690045741190503521917787960634065347919180851301558862438424029407982357071724159087489759092692094168623631500220272025560981867388778272041688773757867813778995307938836220728347748425397447066334129722102586996109604827849770056592342207245854658461155777410922160788502132706011423014788196149318932156333527262500699228183533489815176386063167069054855402190127471059557044073327189922247461125984452832296717571418178543557996289436839762935964681924754366975350149396326998775147547939177889984004415721' ) ; +test( macro , '-51676101935731' , 1234 , '158324042278377313925303658781524871614898748673989982468397056801513262659968003390685627949704258611320160536626820028889962136800384219988465148278031573450509106387239568116863743081510112367947744316933204800345240432247765898932280221777380025886378197115150023156888075592661959629600638394821303250632425654059380834813385429980578207356778680885151122557244823021413539337390766886386023683774012622502869673441546686299110751211243381992933447873142802156806866162053801684285033755846634081232710212999710106103508622919082329128210235683603138941762803368001142605648619008990425285579947768914521571612053244135664040468206471912029995462838737725025722037780961352097655556940963081046269689524507058695919021145649857025466601631832206335908714770892218847010797983061128886699295778458908026100799624592058868604507879625795059341788256071347226801293035257896677449812101619168410274645467937698072600485973695316558617078697826464067560685120905997944243512191651052772680067894809080799438615784588878741144055738313954890688400429893361117159935248693696396627137695916187850803885204391372040167551605832355933919492494203181745050697494649819656173693467296980021705890813609884785517604611253528819574733690077002295678785343609499106604869068180574890180024198538158171783307883610859971770618231149618665209136576442748277494550519027415619444394250603341387572991349015145136953473904476495181684188774626834750617818472938996987683214283309439924103189995535468277303822947364785117218431807701765196665481474819809014739483414625184823572545931155707708389629548395519118401609231979035135464875664607469901894710597734005254396315648601392217921679551086702353136339520705796471641431879666411557946264230276753464580691493861591875142232836387168105624036383384304939623273671227663421382364346405035511757097384178188343056871496957008430970719845337135563975023000121180003910787544177586770185372939136428614465285828597849364223527930973569574297409565906234014152140399051264908028037854285065695691516894764306741200445258651130079726633055035454707400264143396200125546607001935250751700196849819373198663005937089255142210331719097533030824267705354302579492394252054624819810635910772930818973501002381509037985751201262426338686073137167777790210884526513502529974672754561818929196841359487503116806374857279102032619499735463547437917873852231188627313193995709278200744560332235099781528906681845236757294232939540840501710793402651215365559223726732901232304332589555728463490815104762256836437378942770237781171541242665277050803400441103245698206078424116844542305855433985742997194723110120559706402361837255518215431654983113821256777518566578007246638117303300813282471059695780960937192471342720483093022397272639388862609111334563922759362521380716417092672083635856258692643635802385292897608203124530755925272475970099885482900647144339393451148660375139200420049453396533433237007433364495099843124339385777936467767832834097532992680258633382504023134945528051080162773976630522027388364871860673885601145463850278499705365785873574057496070902362590690329163430582931012722823339673749687448879341947128478168108948119496075857326371621272158040967590212259705607234109590371908430237962275467620195565091210074536958791316104893306127805978301999920209853998214358942944312450676988966603743669909381196873223441882204064076740792698565324619823892332131678341250397203399047128712276865053621353068705821363484016988865027435388961661676827059827201761588689945100159628259798636637114887843908407692866645165407556635346270470882762478678318748969509612841224405192451391751679491699159481451781132856593225478798461105500650078302736522399508859604061090018430782371103406780095793970327199466172644652070455424994736654900037878682536762730674188797509195743679412902718668219372565376042254451189328399930173247680691539750124735316777490200616789118915166628770213641217493993403209087930983866118739242363270739641673142095457606027878252411764298206871520866755170134693811548956683565065642028688637479006103660374113920609307215137832756503673451270374534771904030303590041498702749217222999004759003357602091152034722604948534571885348781516114248627593361371966083846505528180094830427733303359954633778102329930129088225944419675472344592340947633203426100068451070062748913329381430835928677944810202891752490896892126540425812163639252121628049481160408647454747378481685454865724857469700081698360897592285719829250458270700796398492146131941376976151305748227248367443062739785389412243719697174747793918305844429511703312893537458763839752259611393771379620065253777610623533134188428935625387641575540926717563311541862831476044794518109895950317069739650023453809779525953218406298837457049987396316333779299477763690386671808883206738746473461031527288187096362547392481733828192703691811275652684091878491782335647464304090599317117223713118270154362644379673966875526023251794033742058280817715606901272370694953811351940143399555738367916981834656631234106492867315013462578161451861851222727927484978513364472656866134489436147990440601567348247368143427992571647342689311925448855042244915814046156681924587686088299035248256687768173138305271776131448783660494290452155267493170780209088260573726810563594020164626876894543544776117725891695956937655222596747253562951739070430520784626532005865397891770599810947915766027843984225809506465099491726669647675836542704925940472862292458103317707001664851510631632483368333519166567495603149523436655902927352564469259379326902513957700266530203095978420437621994997883942015182535685373952581674954526368979534376580657019506688748132488994259649481602782027268796321496293234619922858621277867678825491370164615078298949196552511455124851536133799925473329405250474593913924912551804901403390831450711740501508314471344016110507593788337973582789067759260879539344607152262224215382333489330153894940009834586533901180095846730855291500939551837669345284373711184756405666180209071363312585030301685774779292178313316406602373255646327348281134955048336338727490454877812787617492427362023670761057324483134159661968729511955276617697409266496712072219753283729016198339234913450671856683431220026361896256233229763483100008432120294903953687352831503401656888244700073250811277269623445793796563405171676855616924791868998241051758600745245397052440394156686933344580101379617401437696817984459028218921041977399588148719347919096302390719921087960315851964586936208155974897770793714626502400010799023394074901830556484876564044019461148646704484745692998552151910298131789877533559303845220138187074792203552289300587811989652204054350569388609355366352079539773210398305281469358542324938107197041217218595947653381833043778081164511742732935680326233241131641428417476654793443376871059887960714321380031930204997295874730540407682218645410154547363569726463842192519870398072169036254497989626119475346195254734474880846366685010394270094459050207503355330015842707449098167167948112211428609169028462215066248890291708247636295839908593225052889285032180148515349175791108452276764174092593481970638911935180284154383805459092545680971655577656000718287895404174650864444487637275330486618588627887913198091137313600079403324248364944559239416972594744134017813214704259974060248545972845617599594908395004708799034010940349453335426733467851508855124434739037794790113915284799938282633515926124039300489403274166512016144314450767050504019696951073496152282334971591755531534918527658116356766005810018865387036502835277104484897521399845192578397217389066546258015343671781439530194484186424336132467982739290593716534087153430243415506786743021432802857971661907233602499902567387941782564166386342672410874812089691799529503443000488843767817702945159240603649832489196454539442081235188719658702765814391130506231315568011273524165094617918503831867012569022324402969461007866076655261544955353941677901200948344001405059672259174534803855786509381749106901797774448058734457124149367609992922544375497404889378084258630248150919968340293441413856717836345219286003180349374207341129088557493435423239964391016550727225456481162350628594289395184071310300179756589174536625319150383798785373066376691658528761564820534618453895379491843182268871603588369275077855410841475816916672608469381494765293579645251398504292250764825206147001031380918536905798997324364665442675157885496504116737588881183129820652811664336805124175412738167561167253417906013601281586840716605226757932860034772050966241473341886952885772364434302876604236880399216981777408544673261443252042495657687251968928902101306694702738065723310727043271924859335698667952366365883749591917139742105118753077931026478251365210693917236917159155967697763044367201149926693443948539699579913602708706722711432838021246855315885038460450756859122906583939756348652891700451630407133090901515174232078445554725093208016341426376158610309666955884603433032223065165852248565738599860177261970078536206931153975848971431287001632805433404957578207772941765098112799264026267445074698665059729145576674938934608054531809788773719961126616990316210326818453980080321988760982334379271531791369297582640574651520702873403331880456606970974892343433336446248718921846000086640006680764293893307983492389270379130633842798650803348158429980408513212973097444321318667389109611955924135884714672638284288772566998005211664934734547822982660638379730254204195834897865492728459422863551908452096176425627547324850175172784662840168613264736639310780854731722004175205456083684478275667370139311794044918888433282117891203786131932421524201946630405904103705604352951344094166243627023050380063835187325378976884921927883069821201742308833558695341662261151498959733037164633952848288492505505197499859566019268823236129754425893906449877905855504081397182635782376853937776733107007960687910397361651834577002303143087866448497366428780519572180278375369679225575668491891544012967905489645541044473614128660244742603437904495496004459121145000204660640788761369040236852666481807337266045681038338455762663801212249239773760849573135339910245942472057741897143798714888511942994856977741299663716890747044572844810556164536063761986767836402140711391146026318746472684683736517628592458110701485687350372867786408697530159165580262455780381579264667555447984957739182385760977780225061084004806106049112388374908757400568145385583888461889658540915335972493538978104321154519123769320702224831927212063777898343511469299130626487155185875277476235831577797403193411734525969805530291201270196761046479780099300862785898294670735985568048204412072182439508001601125949813004653714414454010147969834379658692070731355494945150892188648577526049837658909733330381505835664398796899002686901365148731947521928717964471059772305071463737374874406416651278356408918633301449776192835629215568915731374744480004571009884843731735476903477562446584279323243628329043070154171111030416954029897290949469967976161666719811003325138761099757410714225754805089491754951146648993331480859725730046281101542321018226211161218032808157377990274486574775247295293446271999216933362071677144037958846938035870357017121382946099997460180182187217217820316108638070949402341509021488404838623964004697749860791584971181351855741948571771355034517420282039098468418778809673122690363103723019689210278682644736222976118509622284207375261241784528558945409584782281603428222482076644739841708067658443152632760947992710970595496336571116020117920899681972595692145247586867390993275854296221489381933037318139292360281964291441764499495760508673368168379423816602792242572983422830229937308653522404847350290384106194221461480553536360110558204157177392001034747822538121785134044265222471502565785788526018168367500851854368644667069187608053339694123467967831636497181955436837184144618605482450617195904135269079047201637007435156663520051298601126128369945944529481020638321516198582623214543218826748293953436296165935049635820455993901167665818294125029492356440701038244166842363513621908344320848585686797979439878826598478637355993217261347336958935084397089381198078856022083300330117262456180993049915148012467532881768933263035840131555093550707791000541507741393303110968532024193273602133335942404611643551498070626757534418055263575760282736414364452938769778575091320674432871296496661879381856396240520797406048137637370857663757380205251562705321737487489618016878804542225487729084746708529820375811443132907266237938994474813800033631766739207459417966080119828341415764580961209459326665346025307463631064586254511715110933308682061703769489020980806855962724479591125787395163620658259594004092166562170516032834000268855499213998125944650816177533565867482786957117566835113604843003762380044014420897831990140335889989942967539299895614370850827546132043892135670514224732115622279448086834055661975850510059575409653558505225706327368788238605905950679120827356203968736553949603508567674941011900196065319763868748440255691811431275690300510418853466423120699880274299502906401428179717337224051460708185153900592946400931539055519213456766111907891650507124264750664276520240241037246834114060324514820797852416016033426385928748625138008254308550145235061493199996695892684482660951996875137704256478179472342925959911345035957714418554051230886742531878578912441446768201652221881141572325507385719459138517136751018669079028246205826509211255942319179978511691727159374093169411671988666216994674771387581235589884768273625075469787220620863887485675316340301843253576693265829584060863611223658502419013220705349254141879296678287934598990177839246206875955136263946160336147575157943154184876112942552766291737477532772806816444968335075758603052677831616530597162083339994792052192524435339516491271771018617304228747316364353881326364901896898510732593688984287402238373219422623300832304655724736690619601526746558520579969086684975110249886471858004298619330841151157594042888413560753001085286164089989253446994193592178607918900886160044643360093127301377281151260181516816234448235332218822653468714779419621593045561237278383012807110518306356320302829822203975624356719898344296257410860244073851008991224738267988788643891504893485173066765606602131746590564072891775528764778009114601909601715732204601099651995466171422428561778738906387340637322539207184732852648369340774890627245756174444189797920171705224195397835012801944668568199244460984454556749562726348626755008071045094089456543538334719344496279903285819785473638260950225191989064998217546604935254843644830354787903047294704085156710060314626981157703292007319217920772059875929487108231502602963313451208908800123467770051210962134514589094511232458059331648208202240238411255010578542406383889733905056465012899219382378659412932505825923945018151275013771662079650082951456689539196985442677624790938978370091323150932644989813926815926713764846502628535537778970161281065391987916405930855478432409513765364564416242604015243337740020591190036055281150381447998127901685806875751795496258487587782150231045731795366439544769654743511101346187573916565954617871601220556806571910322664035856441943067590583463139288226902843506064510903232434224397360091696338842373040990564260619541435411792673618388777689980307230201828335309818088702867877855077758454325070909742544384843822430367944236208743002020404743158305208417720634625853803097299728910140526037383656368066889205000542592984418496643069772107977370892309483087973050493056264411495806490399183836440009935339770300091372817892264236279135289290245333645902675314110412649989844978340728685671821112290828829269519229582863992855788155443525507663925117628911796188678980556041341513060132014775432709153262923597668710862496337413472675889360137051840453387185317746367448685333562536587961087795964381494602518709912953530990322369678697647756220485903298571233830750815526500393713347618692958695894950510589138728887035609091986740671003066902402415899517198377159897977346749717804687344625438051024990052589164200510168556411467500390153089322228903919050120669166638660142562191207450620162728156493213454482792702092126905050509757880809402415274410795695253751046401154902184294192597738198949251837113299325218278871891594334354748578529416161681277186999781125923908898170603590196546728188587904407695359656110397019078754943031963775608531765690045741190503521917787960634065347919180851301558862438424029407982357071724159087489759092692094168623631500220272025560981867388778272041688773757867813778995307938836220728347748425397447066334129722102586996109604827849770056592342207245854658461155777410922160788502132706011423014788196149318932156333527262500699228183533489815176386063167069054855402190127471059557044073327189922247461125984452832296717571418178543557996289436839762935964681924754366975350149396326998775147547939177889984004415721' ) ; +test( macro , '51676101935731' , 5678 , '114598568890558892351277519655251349170512457301108169122918046980237508383487307624081510756564677550336178477302154205298849988621620086922824241203952845169587118918761676702275886803533985126048599159621880798222780212304246817740927997329598603522333259993676023070883723250177300932925278631685866750044996349161018487418710787156824698743699059007370890842841419231416436426583294134280327799008795618556337681789763639042135318458712688112601941846586049438371804926113126508996078777819094310659599757182791807946793330068376689258887811689995072195331087218152210579989587318167100041773383622122477291943850218476496927044272842237554951357422835645664516760841149829622887677523325405719345978782256416220091760753375551941881093250856520343277787117543740369641738849743550250267305042707228709682744788048246753481687183391246480490101912653586013524077299683599506874945043746289984496657526568247754108757916023746860823651106704947454023630829841108532968959604789557821034558282678387782274892400435740522133769190575725840235412871894976415960900858952703549298673487135436478720837173606603965003749202465844411925396601850697464037386444381718980799446621464654550821206321596000370929647608427450678602369409467488634567676260749990886237210425012278562172533337907188794399372225626872733254924000975445679212294865582779159284739536067574648674948637306603357526281158214867606477582551408107503527328338793768794019922917887582376894908153461450324195019808790951956266885107461973925559489970262966079308484289377245650607102408136209843678657317031621605407118233165024507780188477008776626376774732469991901945525053633560386998290497433245057356518070213620275700745654781100039839338506451450577013486892471483552928409289830016271158248107951963293890564868178813169793288638609421552999187733984144553406615257602536512368045676140620190929856992488533649322354718067519310329366233012095782513367770623099210385145306068882019668219811962909945944938303357412007436455159207921731034641005985972731076872404481351411053559046816512985501762256787820371273853296301441525251524961854980951466415757745095790408750111233498938399843328976884101167576106332111369898329073992906185716431137905217592404057225277504661400556077285374257237710751164948498254228336520906926692000699164318088485138209956632046211769172737818805518350576876409911238994857621609965737246540747228915599832803850235006646505920161663461782710578007459880127628658300436718162035702759857413264686037450843066618529962777161180564480610570194083990996868348589497339967832525631952114004244381394862686005465286457021469621822619867151692227701982207711240403754089139160258204655040380941387512320543125847873280531581254727837191059980870831091122923417959861596435814654220789276907248261882603123131749272763005899889970210586720440187361168097472073369327028087807891921073775186041480435653913681928394558065224090076679384591070891307475995293653429635959202548503686994214508788450093243004124213718944072946348546273490462900925735733454594192759136002496877104912413694566063277128709834235803795521599955020375102449787917179385948650401410782450535088196592336719230363010532216782360997264383385827672744353408971592600267691136637128647179666091641390767353626655629610767925329336924814212570169908132079298822259312790776336192539171954812142459076936946385158760440753962659197081868092892356974717649297318187816581273710002222637822422625907248946609177471022616696078166962638903351786881559353388016022793559059422611570772104441502159519678683680896440534678482697361220573057326321241467487140124612227021769519132788278891261578500937493023431494800715316974572061757711388338850673314696559686053949631600706217179936149359062760652855148968218517603478406764660079773518392515740066557654365463358812116383920109518376511927056859803872276659655935142427958378419267026204993883734671725916631060714088945987606306190400841739343960163767980632636951807150346899488246361701225858275512527213850024197265932454942520600005445974264278700061722886358112352180245501375011619481895903494024525948428278732709789878138429844599672738323876521649110855277792436882821166942741738868002576408435397753753580116182952236210916267829966145925028378437875898705477022525397608430772386789943421906088726337517286361167325374608638664447743003669920203279685500192102212678244500280945163720924806258942015670529098264965727843346426114488713290334508104318728502382771728945872501553223396187212916235118458655838036585541800475260873636577479118287025217430116350907433315459696137904514955307303089701947453368286386613774098275500676250943657017383834720061347722825211956235385743059349300184053076658159489552304525616565099968774334572359425467321345729237028949216589829910496148348266399952259506966453084807497614865786568010359718381755280552030450357482091573325492727231276923993244258612115652943501643076670607096916922788985244717748167425031600866371091539018747314619844176434458885344303041217826099156483212620631712885522804065144269853819342281878739269471469710167419263261298426536005724710899328976253518828717132656525336398408521558604682092666618949049723934689800847063844761671282296978918952554214898709123610631472079549040944065036271515445762211638184670207178784047672153843595557392899022269520772862968918684932700339559357972321385437515253951979000296108897236060608128673387896445773358382692008138068938089087965375939805087660261553154170365883140110004255362850999174312472258828659845801114248663995523535651080385407122403810220614699534394862199070170516370529573724426277383249873364882798357333666601674798052228774948816335992020369901620508453181317972153011582161807177844672456985443467954652113777013601630746866436183732233279064589871750135148960495813527709288884229866780850817394534670003825516127760071436525331020214654659944097612888206044199184355427079633744822550780458499778237357353947422296038656940932241020563615278249555508480330508674120678052089502789507188213274173100770916834969313508824784364056056402134407244119638598785990062688861144654163575302227468770905464187883181134822725915136640612107272892247282302709032318098895359710245013039285473099721463792717954735326941637258027020359449474131956608190956922971406645107469617185652049606430376373658432400056414731724407005001708692411063413271177513212657905468790370163043951258130982778875673922295809518571866979572550249035569072335930443175450876647946083312614092963535991789686984682545283358632371449413497269427928750522476008103850277182197862744717478903974777451339726925492684847344667201465331748104805481572363883196797787778153950751138898727728375184289353676704124928349416752637531102490310279351764714073405197836749014690395282266606472002997382187295402889448513435174099451342568509159453242120888320839737697049616714431772174331671258229322246266889685257316038839337528724509464509575560371587287218382144584572419703181295877602278221106570930586664027065311454892200273818659381311150404756262029418161040565111664447264252108585981706307591881047374954123445586938599411011096620619274323216164888259706949545584064116931697419880810232135950719390350713062967911958144149654637677624682217905237402682589189689936992002791828405957862158911334297099480655817390013698092780805866900709190383307511190456176470564094830491741371514412781382471608566016857542175626271815830825751173841300134557318244910059728166314923856198690466209098544666893459074761870150034083238014245526074209050076925214228138545561830243367680472907455390358950492305796631316420731434125187536810546887612854361525903826549660077385607201642040850831267699276814362171286190066768458981549632902853741404667094999899553250446338548089645534133891269993883172431804704263925215719942166060373843805638153594804487097561950457231382850176704556278355177741960834256932103041468108431421024565688930277277827204256767781041934083737995080790793709338041932760953129953324240749245316117068345243350389721646548464456799564122538803508302280206449283869830911336778221946967418555187670963441198271217790496259964780654563445592505556519078267175564184094236772289072470230033320640614537275025449633888698376301092731992965463666856043698716302806693885087426713749261988769556429463390046244837567904659070225420983410009710978888428520162826187731324371494738964988237894717677430862117281326863913479208553025891950712021033737482821762882285969238709814995624715621242460823465809517565513365312665098952226387532971101201851401611211767107556328808562154195909528062579532668678860849786353548436978596941540803973584469644923040177756384343881496136104278613378924581962143710807219315022833887527431763513942927784402594506818541221504288809623165972198540933669494785758163834650407164355749575134198337788610507044159766150241794499149571096051559220223878817602912552525929282957515181558545301005606558272154807998739024160863626434649314036466134847629318039975100093407373104577388406981878656175843258194717523909092875616040477453623785051493436611595002796440848161148666254022016142475461311658387441335732482745839024940608008050016971556249565896984096952364713943123112125591933258703693851493005494192677788993225349131525711396145903045479052901233399936977821783416065979989065328839546014013831203847910851373499087681269273873808794681827032455802487324933071462267161585550348497079770547563318071210788547323150873537668915925365865275006606032948938992420253484030285899801624037645490546643734003092212092762896778094831579400704783040331797648705647138803684988666221643282949518185294231209149700862655885675685742587977247470742881671606128975518282142621174602709267031158360580359120233235473997243785917055987801766020914435512416873713285800875063783960692674329948345063193713090346106430960233900220471049512359484540660252000207287048940904649627356855235310748631701290142334022573624657571685050543054539462593343925120666965564304346218619573761401243630815566172421336337019044921825132743027076074431860266381081919439461501518228192067428154599552061956522454587058878725629423271121973055948964177586675025613775553459402756099732937841164187693906160490012428728615553281749083877569856034002578003805619108603440019554292851568931421048023066958052204343883372931130679073105823557408875100214126784759475874110505599354169570696609784560599958215019928598013718187402289676120592754363058386217976480889644579627120147953445090187876503616327911008391800184735093377883625195033462470489375923507822652512086242908850264792687042789386655227831819214938281104644932640292609019834942621395608142214243559409841197661527772521605594271433534022197568992584336382425215293816118135415822763659169694051345319875623274091939751368133997813845916207449451701850545644437368283792955041875417825002650183812267921554071554148141810545261132326348765749042696757503149872630966032411848943742788719959766685423336348908720532382273782455044811025224688005258724128117375301877446615463103917254847301569577217661986908844517236064250159012321706048888909681124601158873187553237768719599661206118675972473809098983711387501122615038573963236084013215429847727184258992906237874964751406104681742937670985077393504140518585378445945934961441800684055554038233956351167210957484786967705794592308352175762541752214854817124986107384580167149061884866946918670005168162259392927744148326558953622056499756057865517495516987090419182627739373939985152189775038553115538646471075934221909696916621433427020321907211290750366847722032569885358324304825748519823761695735069483610277833391784268305687555417321060681254063601376044472764727209479821068239831947119222642427588604524821548797463869612449236554848366936415329635310834448639523331032214535561193061625240491292472959421415693842751590387163835477828542899873873355067539845115993799752754206275423338217062076744831694087595991582736550683224860678822779524670167708708091493709146151122212285091313848566637581973054913102622054948327816252692080182215324465447499805634653027067312991605368041127365270645100770232874469104024167016075695806268258050422993127312933128697504418653934394765893583568834878949604860449521880438659616802122657499696711371950669696088698654540203231615696906652300496120780993861295366389568887602126999373711575248980111463126737434199999923186123228140458802135764964497499211839068795147064258579583962890520656631190772155927073711649314137404718303647113380977808317817846980386481066453326264620161085488324738434460460038866634635020866393862469381723564361661779993116516911788408702482058657042742027085322886734485737469665890653383965527251028179320635401480247183169549776451102905415564180956069929150480364980253864993561144620337603341026450280648329108363155941423746477676441226330763778143302558927254074511454873470596647216773968167693426794670205504808306963783432036244979681725783341795616208450760202661124160076951242290485270351100016293179519729579532961953093883990623843703845911016699084294413469034800124849706899721051849479889146370628964206263232509984714695180238067877770898591308982070720120248367443358203058594410980465031081259361282748294276045466637842578800793537425693971319078319720309483472991281827652766395632559627448449322724455935973458554816112349560437316476772468508305512367513982203113683319867051472957794682903830326933115041030819168485955295547194534592544854770444190167625774242882339856600323988117721872329621119307065210242378471925603855682602511342933926964022027574473668074767250277614350240898114804833628233917590283331643902799593247663848733995782588708639967040765878261594144333897235212151312166170400673009191876880782817897642797305674083214304116001846541558880139343876729547122660589815784784823845573389037426438950965231475933765920983976255357185318394294462939870923725191627253724661104724674152692069584822984507668895796308777450228162744501914688617738288423774855905509153854844523303840957562160021954437904572106375782764718235463296636952021626993854683250625366396838736958893686683145675963239492023700157535671554883718959215653559018684790556050406047348053882167970909777535677010769091602244371438842557331819164644414366880048931933080199464775719509620992644091954275270680288884109813652088838217429569522796724565190899510248605280475710488565214118916127660760240741412774854958523464875335791354333554221114105991785983393823020076734058183927249261932463022507518378417531613595367008713063568456526553921055526758039628801741635831559596552015920057728581873824235567176123583511244661921620535917294970250780006254560913313662765305807933366774232072453360650960008438817118037078045098657774617616105096015011390156583453754385678396291801322575711617682706241038506687001234836301806498523163010650449912433471614658213754184557683081702691883198005157762869533426985772871548066409461102566074482585186196172527568428897050456306066648582770036459460511184764057517774896339386592062506459252579461592560474665528416239792702809524368229823156443879848127098290936890568640344899841675398255520835326531345996368545121081712559676548972073976307843066272299578779899750067849171423314509815187548244077378329796193933542997364333804995452518983295374300579841041477430234285996531274115737469223410436044734098218596575261885585549688086844423068789246324166549747789727265524050455962780001580710226770900533745079189013929659478693513587745539578848213377469358275467176678200951122297705749503306698574297410712427125825591862363276134686251235055301972061105661224639007183964902695034424436437936253659197166818614429825626676264111882581783852335169138950280191270126993381055654149481441296522956835357856587690439122868336488948939918429473181311497573245935858058048846043815567877289011167331444931953925754671240134069623866836792786186011879777990158691547401988209088233436138946304596662211246080716963940999419458347032733075551690030530582476791228961785738428344668271954394260631144673445131619681560910288236163257493867850591921101601774216283724826035337528992934585854238509545972201306935022486046021526186153884783616668536070352766884410433501411997774544944294529752318683967218547747054919125920723787453768874396140732374376069661038491913390225584336932342777315761255948878551294079902768864779706744004767497971699010857817837320331732586562556917485670513125539936647354410777628785488698349835379591475098154799827267570479952391820096174179651670850574284042676840011853046780858800494312309921469703542619592726263073590976462669364922795234207666005686292826903212848877481605826947453296687451059719061958356539720636942722901955175023641714596609837815361932183405821894237560762724700527878714340752426908901818205438166928697623647899633610409766731686872645318577714032460894835086863906305213902132263709453953046543560314104677422693777305934218298526734878837051106284119542143667788585456657142746665427084921846682769309335227479860142774263718482271045462438363768361342074577613689416306245388036366588228918750297891553343601271116018104061166106299788463499404576467234680999408128685491495431444663757432415240164158488210900819745907723117930120695685024585064625587827493034169505631321361629073305032453650015121172416455507667013522455054423012824659556913170191784272134013229862167933357870440372597009868509136667331096909772244774497523425649971713882182557907497459362685468864499900443106554956344003403877683026526745408126870149084364211072799881433860076306106247851979718211066568293397639539451283955573658564108776175764110532523449193170074167594375276229899521780717952518583208904105756371686598266057406647087463129407379439591678526118563375375353708424759178126712588851088358543556455828259242229752207982655534691287505400579846562914613465114055818872346386918363454946173595045963724905520868541270473697264250446046089642748190999453356935960747546554692305385529475044104740895111094053981210797991140570926872891670773814468169522981197767273686316613791050298552624472953601064874491619431515581298483094974434200152544999972253615705670333910064258013397051190672327809649449512231521002044431168670777665701194943318920142732683570462533039523306263620225871545457775764770604929953997570625951936899909518438534435970611071611463871839879758260799824991623563429811928499039440771973070864273967278618870976632376075488071575461144561219935848976261991995743418626824010282377472581361028454622921441883252823380473535980635040675347266665813701114359254871281962513087998501938848746260785427396775049514168562612073137570353309933421182587431285208099490235882059772793358564991437202016800963518589761455026124188003465061263343783842908952238749299315855490241309786950824004062760976904187502795945035840704763791629996479207882802190639214588281672075545825412562820832491492193486742631064101780835395570244051743402738881730159768458032350492340983945389655058528481715594070179000970782625156057915320413986266019990172337946416918557063800133747641604183437713060443142402624891881249459030992935793527950409840201343706778667031036382270368309922120727685173156943536928765918297523291556499898745165164935596868942828843358938043957961029987646769997740718353298902113509786945580718208991358463177836638025806577481206139581029605232343390118748079783839195843230044920030000293609262840245610181309358224141510030238251805707053062432073731984040628183721390347726139606685474826304883630174052769377584217789247910727483325946473633314792666461326212634921565119552168762472730204002086252124424937891781185484626212876955436221477165360031020231430386214870054108295007899715254119071513260472470230202533983791307938408960011206611455326096801350655243853398472597807466586200601253211741913149771316966742972424796953362829778527691461619646698652901365907319538496395153314189223850326377266970571724729299225616643375250610943592593231827466075999846471798767809815413033084807935411432143738782707086800700249890892016781300755462774204025643372850935993536835930431474211275360661334909180169369108705004893833932685971810039967903674985151600881858004723253102936206563045825118090129751111068119272073957023228117535946104197559484455044224813743551400684035958704844910240433782794543523046179137502988175588334343929604010655262873143788409800103840149709367769678272389350632655653061526909944375166865821226676124073718040169866120459345622225584107723626981527594409083885799002170436455111357966813110193233521883524236223930189338177788877617266977925443568413998134839137304794431773484057275907471161083605792371548269896511232018878269590877998951467990708359705970388117405757636229559483770009754679879169950634139569036627493168743252032958240435946744381139249473095508589299567208080597578309780705860706366590038525752672682617991285144702659613402563158938705017883355247903759797019472262560188954212310667319942679244018502332473572330860141285275142567616352011441717389434820775671752035498192835097210704346762871785843394366619830754655068315068021943501597109761283722605580646118265029950836645428880355482809418017207519930746525482467660956501946286248673803148678778320154527985484392151772657071003568822396992334569447439518931797472794360893625913323930637936123592307936959744134660419379541520223856359015281561124867120268443532762202836358157067397969523277941814805842994278790015196862449348685333746940835406048087120468705315737810814851006986239662973395622981892417635797361552255577200093154926399160041205233526050099942113585424767102462092543693848903032320176365611859456909911464662553394222492702361972492589328743134628042819438985147526265136537852840491772207661691558509954371067469519662258250666590165226871146827599529979187274127942586949484821499948977145043677342942737229631023377843981185400933835831423767351371476191843662990866109519730716132126804072070640870780628344547744782396291260010070383315973397408134147633405837121702299828479485082965001168058308660534087429710071643832112134185681191355797031035640660674171124608581811772720944526748929882880981531600483484334329258782080131950152990379792064594496526209604646130807483497903997981366660814109367081501493013317987778423970445235345262451162417303194219408843842138074967028470582769901836866713822445861935378961772248421345450181825317803057793865331808243999032870740776976064805740571853847337064834310551096634478336669042763136704807586517365797136211624710257953267355206084531695186978286706442628626395149607414222118992574163280333685823680906473269108560879550907146951083501973652650163620691173614434376022074343663278172616794365354028350879611668170977299413329242853102242731460245981931645393086566419168095714547735636341109457537424127013466092829987029469225005609148935719219627886553517060926819156103842061184103249786722102357857380363966877195050686029417164805540813780785634440605334896258106006438094052913691329158675367290141201254618676773332219794175088755775479718673883939486154200593603203954816323103020616423867397093710839615897871898114553682658447075458783118190023366087506978374367440207438924966819405213686487476793825253259734471325657957108673156552118127808366008364042860528540535034950176612182005881123405988511608306144849231503055132715499943836726775291396811671741107037864808220275570128503090451498085660993674239141408137294509508916040084880385126052374726220832131130118877249390053885190862016620304127338330822376885177520007162660545308168910551027048206864259306643403258146047122775364888620470370521404458837255123240697440311548296630455328683555320575028845668660604051631191978861891344050450146706574218145025744150912515431643639763471496084616921691588906643318094161772942444267813744245201380387655455570994259537781139991672727963630401572633729986361556875282295744688790419550042115325815066901167830915280249317272239032336428833326465165088029450553351265755331884109528200193953474902952152924946185562536338925534826199411100653632718279533909714213316643228976513653756607679272611930525331509533360676882289504637968260788530354999017751472236832783844855905587554729452514767314824700008649155270346776891167316609312798908304391728180382885705826358462049930067611387677311125159653938052767644809094689360554558540305110248935812740648171186350593122648008331898865084081910232912772214306873277181550887217911939282490833562582253824958566304651212513938680716752798136384903060676496603824306844521424474974798402169651179277198301900928835877874551786318031213157816266052352420958386807745919890178528945692073978829824318254828803767836945769264370965570278955420236563465318633087533589358061430931666035989509802975402163642667940061694906307745403336415888401856273908779094219374541395289779919505811512398727811277052044628889676576204347887155453152137381991361998780634451422237710883316724087265275331735893833197129258839234716392342611646952816033259950054307629463527993424446629554718055401467323011537168845330459671616005062986429892433717372769708986976311304603813694466876866558852113339228482279288771725065980107614730689732508546319518769065056680957782914367866215918590112732510471009325001837807792226514983632349787121937850873634795369167442047937893608233634609666703704587131733723929085811244615783860405178507877859666805690049528538712275243036223309707838878743093968440740186365488240924198311296922550429467362803938321202544305084030232602891812533837834720169281029831388109862088373636124595410033526477352125408960443495710872004466944740504181430539375974997235191384764262912442475167562557149784655839519095519656973612676149775555468394211684073546313305136429488931374979941004482067517955299494545191338214275004688648850080625425657255697031851628472826812878438128524708409359692881087063253264481220907184058301090967458080899506347453532002995200234316121374098161410900539135981863658581370995732911051446451138998982787447971905437800015184192194998890428219996377737564767442914336298428740825412724669981656100409516386221832151219625497417581073077338087294189592180026420910118672014596652061567734369839911877944565035730463100962767041999720431147498003871428186236484743508773318443952371300988256662194348824041466733754460943324754187692906063468991068425866078952725816706806990970194721942596702352590797837064926809786719427373172154689565613653917663261933894602724198203854026358029130198575484449317765398657516813791597967078843130547339469073783524497382496877243498441684162650928487855937959542776542381517702580219111410239373945791463335216468817891797159897821504141336134011961229585863213744116868341898479921270173994357042490280766042368231306294592305816034402114190442648210070915119128632526643207927399206403270502196136290923785508894091611892797999732479898770027343898906937912932694388260729491337611804903421576030209232881941209677305990236485778758568570909511203847749727139447140750017842138051158739164470079822994287470311711455580863809119499634431231542924995363573544534166199416944524373140000391672173343392584556167540657516390123765234814227550308964579212558077778186821292704585207362004093356520798803551721188807088087772466898440741018646115406804612936758076828507023774182209672664449988128724902414993501219401001765370672317191401925997949428670713449531376719892790107292559315329271665439517184073930078672355080717529913180235718999452728793715874798090520042529997304171394608223665519403070588265928559013346665409955899514815287087015895503845612331949334663867288844709249699760870154746576067740617109411671360905733205915721144812868914282146396418963599623786016511558301453135637971753217719122740923575115844689612181585533098056418282958853896584799967463642188879073429673984966106974767322904274930921304431241275791867912140260586098638979591977302253507591795249943499668854219091401728091291240324419097106670936334674554710470587846998580373319693822832186125663563662227300196033318571309952940878063796339388257833300085483835132481959803926226375922877243938995147684343099551037900344498227926589430544888103232468580078181742899166208452521226468017225770159292796370494628221608659705311860880457610945893698767024912686130786102451619763311388742213622180967440266735615377707064630432362851346787104938266503146626301826386009911001332410273267944348625003805191824863507525729321246269404084347151934903222130472688695181142909993054528914728385212132736819895913661164653395636100392775995046821116359166052147490259673545652512579506858292074086966566678148092233349090670531856554153436180220853767903100802098585062424675371471614926784976597351943926464759004842764683915776120276735116378854746819555607095002547606392301607456201613727812460712017149291083250455836242558225613747332670029560146313664626625184108408526435551075760616558918639998468694149252839714828173433759651731790585540238768981676874286013596872690278563046650509425213768568600827027602310874261454666959825912534982207381304504165906647669730083754622626706293980961379228599568320787109947615111949624856762702790577996604294851650710262744819536909560241872405354015195815901368973088718316821955357398270458847336192054118678494760800661846422575105028339264471032443221584848296622560987616922442031578568960816859233700095456702725652471996634621805360039904773049493081061117890447026080993179208164914084001561137279717964474457910822698800571370948730739574958519456023949553713352403879552609629342711187222946890885571493932420920963889812746152759211771233710658321471894667865836881256359416902697886305637566565270511589302949804123378578009588741245234061360202559864224187793107140310370774238991415782896268860247160087221743398632360201329490179060521461387097002495616922113269135683217341549840373435949057182322394943783472872058473593126858273723016989321497958715693848778260916053432892608850153974019086350180056263354802687994169752296797729166187979142462997664638545934162928193655800594073599868087694021711982073641040542199591089911339670166122773835431930957664741772458832249655277342309784943306925485650386363310465509184262852528967556488981679969063781668502292160178629319257109918089175245793016717386236635810518592787953993726687773744355504320944066168920405278890106620954397703842075409790585293639502140471672275176364054469159930595251498121123000632836929940035415174800963695560911591519351305097536056757497122738733247223334299439795964416272756974788281452938919543919179780495830578105176873022791010237618749182041436120814538747344362413981166492880532981408473122438956024899704764414827372680888359069383203084252482710559799658759140471216458496005546408675587772142479513233766094809931909320095433919996718551768358151589619518928107632509757299346855803242881198506144473507763036827161335579895814696687756797267492473907511129330448610059311031697081944370716803795577518487360501045579868709621241757229741722143091970632237708849516805918096189012758100919518522581134272755075309636666228932838080599671285408828093511202116961319849653073610668505654418211025373854469615185587420505700575888261495326807192713148159720874106763838858514416282535260626452514445199386144279460790374332488395321942092245696971633409779711403667148196791467370350138794216664252879537117245964416540374786812119366723571213640039312537831206990870490421854920889257491088284125753811729442672269609411252776690642554159109624124410614773690847589962809481591267437473683970316925645103066449528952833136986667526561057302938060806717705640347372758940854559438090824022934117904362128241289781935585414469223058188520370422811243860774239667131292667503614480954661643166021094263565562954650536478763836171348484291106790718789951482491353812912872996022446709005369204478525205413817559888660494002070759867343020833304262695786258762182090471108517478008062047916158342858928375981008630590361530730991533337103005007767024431048399846363323604547570763844498393678827412313502948266613097046593733067129592808782764829082779540513431895899823748129703286439371900576065601753249715130145551395611158446136282331860450878473803949375391163105048460542796053348711044126190850489694720890621885113977651566300965967733708467656571181095189043634361442938460620424892828907311518705548399259321673290854432989232402033427695505537391672297800738391325014683049620765825976502001490715724896015980764535931939727448433948695121642423627605318724132757699110767075442641487063525797598420578507881625322631258275225375353312907827229233991901973469958877318300954825891826980150082560409853023435179352929576326184297304876469260675852353214336752697472278921785590185472893192209568387192363535612736411827177789230687431274148917049359515220791900149954463891144855694570764248287491511795465355571647974077067810042898359708679406723077456168802915159985106685165278844446272185418039624433414989676529360733224196806303027701699401813246007448367635711560091194638564196215462750260469722895057683130186655197563435087042456745552261726792507936708788382778795714813046436130676422706429620437824366040216140317789120666296561961817276627472468337572371444709160465057566385526105800512406353089397311243525990809771719833722278531018522388436675146455281597431804631523542433155277652876622739675563673188640006742892639445098465242739506308240042149149884627632749060858136523029010127328467486160496136970964099609404485275485587599287991078550382891153951255006778605902787210807236763823509705570383045418472207043091603551691808413012509993628114628175790641442073599128028234496708954756607086944124895421408720862402696781696349037884497396953950073338348468396830752927901597524196430868111165262332019170855492271790130827789573109557139053285109689778332545958693287355659898640515042491550628028917049986801903913280115785942913725572192146862247809512151632511954616445305241282672393782775249991259990268401573895663033422145829424653742257468572830795144571447217172170344390171558138444299290663385049414552445567639181283014510290419785983701505834195674761038613042562189128641343318579288380854262613061171426518448419053079528551126733990801837900708461500681574188884795165426161291709564074295450881956626201918302402436945381093124745577171671312225963759197527876184346331791160454187021677119481282452140937671112699410475067112269611894574476316058950214818972540215691086743676782333339834793090049695579827352673705992602098532938745690406929370454895121406852644336817988310511018606485003687435377377880357687101549923752753870842331086890020957072110482921078203892582825430743853678938678845171550824421056075012746445684719777935620199933697201020688921671515732288023709159460020579281422206200660770662136186411119039464511246972567849083853953974560152919983727889703872145059312940206651954534823197197456037124574320069154489362428152384518561176908584188017896443196497458965211081852296712793505164224540578823521427317961999439433840947679261853070347008183355600509419881301091737467053884095017880299752423221585377626802533750299111687354685486159204618103044084872599593910681436894070175869895284548114007698177881132942381244912110629421844127353550884486951712261822154242410334674508400867284003116207597789041715421899510712174705598161680472160639854366218120520371025267080822589762082721234822899143897023722519527191182967187424707516302075467248142839624551051489916072253973677889265488627584976956960720624875569085896430625668405496389507310955276293395519901278703982054295957616190481642061914557057918641411590376116837069898283627310675729905679075315341752230316326873798944842338809064711121830318844994995728478247554519759647479833188840882272330805936564717875937759645466235877959356774680757359186747964855850779950002190153225827761646716858046423788030255771497227479049063699882556523239832981578690856832572914858098641904135700095112492548076201483334658215008902573568715728628589777880228112444674918240096125221488915805020859677852091654966635145651388632847300280396301961059638194991615057652714347324569091348372183877979671140165075401908204991585820352573960135268809787675490861799359172749390316567281411205233112473050152264568898538213889610052662413601412411722965122929820314537969307515359259003169193350947717065852529386538881686267170773291846400688708486999155003104663586382344290816318064759978010654953537866623711446364570626969502173544423423074929404208942616624720195343641583097741467031833905383231234374060924479894152342878888888587110637396276339544946001358888192005723471164751936785560384570786894012343324076324959874814196843505410918926079285183879707107430170210495856306080442455608822862122117572876456630741312672784076158322593594055019414285422443235678980565689755317999308802910505961137210498567710018536735289083212063487672806707334546206404814261141369706196328862821461886994687577175390043169221020130498162026839862458973943014519368318441838195560100295968496734198518495996314945289548715598718870583552621401683863581183106851205684154635910380524563847117217821212106128722162524253763046827147151974918777923681784807700970624766909477312166760595507462337125669968044357089923070482883709634106122062070766308810712735710624862438926613157497959226806833188459480017662980172063360634178971275611314406393895211433271861436947760659023345158492960047345295499295662853340265551685535599800744092303711269544719828803680436916119091632263364533324661266862974434455516831152632639373435575795104537875888710518410020589958339879959822445451353658029443025792509752253551525308255741984775779270729019138683637750829888081844708006890211552146344622614088468708319389319850769307851285942767252474785352358559267431807815209013706262561029595478897605034763527896789052350336340918526657057958081872287341591904736173950725836194473696707391163580393299902911848791441413850082003693596935427471422729646162077763129389201152696915172964938281148555040979580355711393742641390964747263809506784813646753925737960500015999521599040534422500550634111212967036120707920863177566166569229503234057262633077041307108981897403699595707664375223053442154801646621952674073998016018204114207792322619912823001873411899291943544289433976296710950251614937569204757779765928995747738757818760854802038762304982286305288261345463881107741394409631520373874750233139799838650413255743318875470620818472533845161123753583328874495241216906348859022307736592331867789432771689184631548324581181882547915784645287665908939251778029107639157159289196176127518723121751560070469290085609343869257334092947393223315517614003002467048702184847384690761234900833286623358455281883757151812237381345516686955628191314036123519539678665398336254286303408505084714763392222044018726750547293413234050365413766358316654410953551281819431995257295975108311779909520303889212337450841246936324792672921730951765343962514538205080555856311467242150053436496567701001851431642012883560394627048117888153808553859689392563362831101945847612823435569999360628749362849396263121141428978393706694610773760753498445233988754224335605409426064724465150571453306140168263830877100622522054887364455754048830624591098148199844437954318671983054725473714673721746781284214097106750134651020281137856143339404661336097397401255849460415338500002693898912492847012546892053061780546003055285372933509996259190318553322495887219489025100141803027682285498654701158621266627181173588718688738389808332699617026792423659913858117693296106288197971001919395880629554677187346338125838160292486198360147729979871273120571322032028504575690735750011778046083231651989085708906682400875964848727543577767320694907469192930438894927009743546491436041357955549348300042338360759281377236265892227047663620196806664771980284507347099402902967733697999621184233818138249990684015970535495278317959125975524991795957531505015611136002871680310533093786875108515066706678620823077849432976257275439747172137699295045174649617946011443989552460583705965135899024689374640564101925298778186797415025378969912635036062934209463477387146111182074864014263939109691429255035354418183096283089143643718609144817465350868728368487526110304341902202363658329806583404243426301929038999413811963719928900533075863880385638026377355762024440421846082611952343954020299294254318741900205024128317877368328956627168050002516703106370642969704283772358296461093955291187494644342390316988195849776128675653911509104542124861217280772932996221537953310962029452657975182251689107870392012504852892547316032463597681300089847160255250462914104176616050444245028613939373851574524967337186933259018554428928015559462061881262235852459856089108099770130466183985887436588873773243601088860550229426153384432008657567689985229925644560273502542282381742604579927654137058837459574794972575192961456785170540640531904771432931209781137337286211239818317844041106915878514399961654100374566986719879295231727712111771772229486027185802483882395198074790128622402561348121667919956756920273231028898988580958707002246439749981244065925735360676364733954118132106641155299199544857249592009103053430934913609249297653361487158248749289098935130229734152531034647060511392685477854761239602786254479061019382441139667288410559126176759142054940087896465268370081054931187899275164499441058030518288371926823323313797222058155222896466033422597096415435116962085378815549492184638325958401951721290473197241670371516491881467203347875585007359331254528344449459950467758875267278189820752127439854852566552803870490438503143232653957782922118685816688148722781734903296936610500471173522177161064283024894888579788472305995091180282414062431445897622125893030305492825543169066044111330888912781754024348338736557326750833574402747013630048297404805583748083230530028596408741040030162350741781079342392865246051725408625341045214944667618371021284914091497257188761924767939637028534628334759882175770670772289957481292738316309937728650022513231422234754422579929841855985946451468684350390314845273621075639131390824319325380971724618039332427557919436402942528867210146505840229198062530002639445641553444719681044247172959043190866680070064196331063863914130249071095131248563606711066426848149947420902504927075034868938069205285471610210028557331474791661084008529287736898562988280474609439222101768158060840395982029394044056801641541171538945243610104322534200730204315260865284828953604535787727385628812968114791370986014951254706844185451923929072881468774586758820306110885474794911532141074138864914763733541384283976740191875378571118515523438069807588777000827782446489266182050245346558837361947434377809680600377844482788019840369988901856492040146378437457195604765771763497148753529247674438388594397093126205511452264943420149474713408497012302647389453439359384872233770236640360026013633256865164883566645637992031106481526435623633931034222232355213509370961371765010288817762179693552242379775216656260241135497573014130795564397554787053584387187656853711857623431937857471939579985035081848718829777316272176681052612968630380592713032967004361608181691291430592912818088530249261471767125961629681696763811424116391066373303384993152768280740948118781184558104319987675542498579919858166065158389793255707776743744116436672753184816598112104831674522931550279998771106215597545399479437343520773636597563675211447481439779932609623982600338971268883683768790803057118303171340769493891379059633504014432705976380151918797310743478564409243233539718255459610193420711760557630156927018163410042030919328901263062660290810416055096762283837210531454115711704392214764971534200239720890924410613605239216073127851967270391325506751978212863009614699353698989489629129966825662563519386134716961129383146386288035146250197315211925553022512173302931962094722039477374774504846268505683930350343868458784422880640500784492844169201589431927903016379662303396527872095562568156390966362645360971925681857871968341995483947410283964766743270092620340260322997257237091573993613689320984290367200247030533720027280038417097783212839273035096338938542591727622575162362022599685496500554429222347884038006453190248400027743775341348801335215989938742326080054254247170602001952079080816650302245176710604093355842163642360723052540350943441654273802237051128416322439426475234583967057527446258480482041840231234842602058417412378587528062618463131988655226053150118765238820025342051914431270624521243139110536045516721557341224477691444072542250943379523540914610979701581620559268793412031737790984636977046879757487332724442490312397606565039366925463662967999702808542773925468580692839991293056392310917374429934951347005612307226284322964209030221618750098429366099194983439477136694496857689442264881224914039910670322116288372730289047738573108522450033816672394101565965048622910696973855813020101016596778492150524524163597858951412311844796147364899117621449468760602813472330721658608635506930727103404682194935368589333167590774588214751222713377251630553526943871411102693132298087279434996411605103626921829523837922181308665640485185328298412378683376130991261907022373866335460773339455678784703129263634716537532090282547777127534019418852120934212233684269568396133976431366342292873151938449479967788561358899533463702974267094796359284987637751201598974404152475871775040728557820818028482149140963098586410453529806961657287735738138755712151598174425380024951275335199558910669206209576113284903353418478945780694878129790034895748753362050781539824584920892084749347087235642519520452342493927793799776786136198617469969693126983224168201909587877154725998407004749212713544394340278146389166186340477628969995703328593195001704673717058025352438357468612946242018587325606773986648467186870072551528951891526255461310771157406650956757785133396326012890387635813591423184033135516070805571730845080137132045429491261012978403015641430817512666681469843066257060720964098086648402611312090715751833710679060879766494555066896257649913350023260836668751637428823100349524601403601892419159189925922959275820633937990644299249271169988339019515965180613573895432999894831577608592304848155696364198541694025900829134781366210991417472495148139315405572913400497872095116583163635740301688579861226084476006780263453790933289131487409161550962668826089637489553038837859879843790532691421980575061315224117692153481092599586056471601215629186621130434664996556516932298784329307022398027011414332176083277481254566740985113591763468957331875643736921355329794098131053487627474682120881562550550881428255655602726301461818701211939805917586146895437388795911816068375606614039394049767168461259001949273538210144048916666534903327280258028482616623798309398413700586176634115625829647911232227507375334923375588614078459209835676422299267049663923396700676273951091983057302624288416865668362779855525365118686744053391254580621393591196711448438077488551738236403307762952589858684493455657463478117126363062783121291423235729455410918637867035685633113782220139687642412165249598360509878714727491849673012334378180463831584187354582895646400179807708658382550667724914138565820039682009987745157792741850123714960764039841065734298623591290702110380779922504349890524389320347890308828719589040376100679017864219311467557598930026491189345663675214233027772264878374490381972865809240289051249348258334250741010764402699448241367513588990261100526633287903176928198197677117933055092254550168988385755711184604062724032969041641602920344983239296376314963817502741923901882100981471281443446703980599875657083621988880973620719138197772524100421922113549246894114245414372112090493791692600291606869049421927806267868540149608572744342888343192125058473363971742076638014712200975997813876869820888826654477230072783335769094726343439363924451093740799160365246814221521418251509165560016088242931176476666040166149409617751387959304000667838298475779617451435521971107542909535756971647840211114967059219572740619358273317825413217697042690085081762346191097822496311788562562031626726216116215298679994354658456828777010935958029126216060917819707341303406969946319555176649237050902062556966761241375058739571292436871898013175671381669805507508696910381959470264039318613075638568464398580077833659887720496385166104378193365458881086843156468468523490854549529450710965680147266392003581831969193933659362316072852675420800357125522249098898054570353965505168107882852864529840652677935931955087124815626428567901773577880059003707684993021595642820310207853594456286754132723969857923337469252202259735727997751116848764487235601899102596111514927141978064206334037406646670461524244267294399389563489619484717324536636445719285643430736881017478756148754273773852289888136125549801175894395271495950395640707601607104562785797592351715554623869028246265577155348990843423689483732331337719099850118433499218006218421240299027208453829439559447186342420117431465432792072288988488740343057267417723708067738577852233243672319230819937439683915440649582059516544561598623280971773789120893086121672269536624083598033868209624720281605641588278852741452020860395156344376951038233934553306218241725396467724828107444994633708693546367123495314361476105770109803860472148239644683473596101653816933207579295804239795231250209707489881769264862491580478053842336543358337010193843107143139943833585292436929169794827683225645488250493758065708204332690153429283252246824483410972045997105029219491200004356064388873493046364077650981091839516620395962650712687713049420813661020164790060026130112716818875580888149422706314230708204130100772098049184062203228041362580051800921206280742731510572822623376036459787961780882292249221002031736456366826421727834687640584814053632480791830200948413810861443283626261692032040972578925220311877455650049930685081104107394628130349553352694618261578823385706710078304466022726537115509158412710129375703385879757237284539292895988728180490390220496139617988669206437315385861127520716472864870732451423836516235084903022716386874198709556735053670824221685660220728278626961642949943462735737024852061880916852346905339456156753923289238892045090888056432159120268216479709411830925161705073727852182241843774144994444796800812422381396128011433956107925125566938292728894518495205656479288798467478295768971565046605743380817683675039276816505508751212423949926029841364819217401250701049413854705548216151519699389827283019852789171293382302732747354572335967904262121679778835809536307205684993347760735860485162352359870983946965085935681532501893160966722375508805057199214927917795853333092263437505359039352967087492413012955087698529172665198805420638824693085516459299213503601188841365820793247308338096862952405825957815923600207308796364681882565126559078649360912095932577475791841991368526488425858095470521872452183848155746479635949126054100759873565047420408657908196467861088860745823440200596937137469726554619440021533471197651802029945746028546114454400341137146234850866902640999835474619226352406181906965593958219260459751945218547186010136586725824330239183847055787095688060314095111184685688138832308190665361771520893357047382326528633906357935617076387165550366027262811769099959556389802647692621844549401990735569529998624105286253926755935055719547875890932694340554447107616689228089562066086569944905859544518038840788528630069102190204691632172591973746465885214629803758001818354722671577554377946458675180639189931170900056297193465314174724380797003889515935304761631926385152267377564862725712122407042606969044731545405432011544768262989326191733481446407893297863327714256422001628622845256022926722039032858852550966980793417370766719350671793803838423609435455646884754065033709502751899071375163169890856762230034353248802768786910964565926739703092124666704198303948460691736963253713870119591703313690617965257847769243951364137415307103859326650169756472734611428216414046385745227023184773573317555077165126936736741629792481292498743205155835997683268172359371347012456091212295887484642867877578646795751622965835785463864395557880638259410281317519825410588466995700288346083450655637106260214808311406178732561340081016232526189760751886271379564740782676263559705973541667456189291443581212424404676011914816089260905831619643542553993402039798670408163878137967461241701829503692199517679672763486035252098113450580438489510602779967538406778194913724886699243032503589895316658938365078639346817966446042366971598315102456226149656515684119923736039138700680083951001771224019777161575827820297993227494571953532246936982900599366416589787251517727463895146269431106027269854190552230633092628014821482309609635823553388474087969696520047538050162437487064672959995402543841470139970706134643073875937981889199695346910796106300932889981171735045657785459463379515938396509980647441968924682241853711106019941292568600206670508573236766497716210397782410983939914467015508129203700417353471801331728912556922317624644415889241609181001149181985321743941473620491460989210711065194784149182976559106558188134333708873913801535240126355571162155611895528080568951526554987444334536731499537753528195430833779794624656681766785270140096283044140898051247012255419499146558168259139756529674323772834587323355629868317816780292113528663119722680719024978280040818470547128362669379424806012577422038887191868631883448040020015452134369307399895551088373207616043579965759272959559449403269879855598910900010706024392636484042799046911831117069348975342142583017574911456602802451624070688915906429274072763654290623835166951367071267497654861627881666298541483065726588427718084629534053816735134742365841971731795029103239286268275708328610899135163422402889934113026131852180686527150505983759002779807773566223011788941689719454712179344607326254690287120395766024482256671418388078554228023784784496201187429256077058990150435615351155216101657438309215090638315321592936537200580321910657657215666815341247654573083731344740394722638474346512544521661792980002338816800181577838361703000507770721899400195844878004251805255464724701063911083619487594713834381627924257067711581105282570735802353540652641183829634997288735297250112282208477996416073074851093528870765045321232820222921439911099170191434612580973635919820391541809473112124075733876951153040686421981760730940392248786343513079856829965044538757787037942418740284997136502228750221662928279924265870962201635314064803827203966095428887928130337192039410759247169242739168498523247197273121591784250520458251462557288339313896397732661534729027052493515404201580059981956608905079272892706164790429218771081619749768508639849339364643058661360212160610191272076371006352322980097730083536900596908930188252920677441148336565335213544052062940677350237569694340838070570449158815512736492862139779132213211843388066176862669989419112198876291824452684702959605871999341982491423024679580081630979799600019718579349756991631102855467872079017699044841433689138792070082691245858860091100747333527615921285623074522312582760989162946865573374037829302178739225575289042659045727978291390647109321424303936944279972788242891964130377157310772605953533486292992603361085012572105175885943335595705321341456889458117518989992036681091968371021602143621382567898278967201088486661538826229576844449884230327889089656416829054301277201456616051237734474662164978054102538036494621644430726212087953103526033051131027386921359383088225533719150606934884972757665515341103897402690521343519506346008077717938429482549626794547576980199283223676534407717065157853712801659521185640516453515871565192484321804442962765733972699330046829989406888341627015358639514826801677079021155478293962619923778866000228101968771938334162366469804573202014667190358534377215482330962923275262634963671825984637003914633619143396330500521755888969843386922843589872134400996113166528653861650963770197465796117647298541079103250256973646631652580593033941058305941438443670583302078961092385000096028004387250797639227058729182855207638716095753795885220489180587608501087576665670950961102068748473102397688480068745397125317899151900803171836227422289946173194639475472087332607221032204172993718739866807063991965434685529724874290316386815414750536825089647609755324478912829208542640630837182428790314967707466436030120046677693513719304754091874591925748831794738661935209325972784637836372417065832634101495661541702552237720067651495419730409007777535110394473910436455762333458257497687020560780560125766474028996604483310845299656108458520836187635944075062965164082259016665860024741824447869072154938884824126520956717610359345956570059031363334002503160837760160190522749970822199550294007333039256459130986258366814988498652039570467430857270936255566922917138875176546035640770701881537448577626102002317298447304080275355918518719943682484835725447927289531637629163866387981244986227932821777092957191598008618007108755043196577493390795743913791435300045489842318803840629056604453508622889454329052961581308249435966212373719648882667006349214657094779879673766929203239990406226893937690672818422017388165317029813987140416820890222156353954178254095413385973580442456560445558499420284582912636669611387427404451225546415356155838383066957787260635657953616728518750757252485659572480629089199805995107320554322842323926689320663451184520268687258689886344606068388694479162354509096941490038433598847203104301976611951445601852362544266638679678290075412941302729162013553313728522646010957992606699109069616544863135068561276755095781547242671190932783722064505309964908887877840158912914910105346231151775487613772792899879678519963830591786250997836698271218528501056595898076691114631296567610559849673121473718916782416581126344147631655121086933981180869415987776601838722614534041581254100451763340221780549086746753938766610289735053241990894606197687789239665605165716452187952517064149162738755920000811374455502914943892262459729586085538415828908694331245193074260696566568387741004970586046250406779678496790295648201386486985620162529677519187045200318621917855086482423481330608007219543743506802384438536607353392218691697424857241893460152387618386782325153321432760552484142145781862136735387766492081605376589501268788700420050453317070218115339201229440765302660291694287227700950440380765107112761096963572158992801291875003909086676778623232366690994533299491222168137364267573039455654289904047646814229327801683590630142563153751747079457858925522910205111288353935603204598220411265610249301465496049605100661153637159888807908902323782288115917266030548928229073591717694655741521631460966838791102199409138425309485441867582737071365301751525547942825571779776968661573074132570848279551828767121886018701878619280272422103259889312657193875315049837541388659071098765055026282156387486107899591956053135772784100496825157507016394803644582281562465844931202245768097460360009083034532364442320183540873202417639221501463884395812838717474792815470457888288508076821945174144028105860328866061726727674515030087857289847427613927570162848467465868388369591904690837471560863827694337872032073339132310877824074716599328692954368440290176778939622098606562704309952427724800739407743083724696349092602202149637692306858199125713600548864386864010917928499351492615039593355117890366131905372145092198636688161883816483303851872238717415106454350355132051773548989777552757443255371566372474534435441848412809716879074979241665690375961387244267989469704939164542096816857631992943353367922943450974577981735513285980794037989658748077626750133198955052583318759656463244526191339847597578899938757558196148864075073244250467261088756301070340776077937405119970413498591233848696140017565253179511771575795275131945857256304538740165986955527162558693404651982237870681250364694679537863190584566503257017428760056979496904352580609209111103053294614675377385059624280899965796306324467850909780831489026318753391745970785291441580820547774726329434556660527022852038096530229629083381153469692319673185432212788337117250065774907249107252485740348419082835779774814914168825271376969001094340761377648487418731698243293622743693716904170881810872101742928109037100000977309557903344136643273367808231025012640831073700517532261466072965558652756539975841935786806116867047742157426598876286995997384905698693761028030005126905217313490141907445119240485586174004947125072513293761190201760157186724092851713785477603552145995848354307689575140731563893520272232436224697297570996577403366115446408204985059861276880231146593632332116664047060124406837360322379955207563026996917043872020612169132773506149751543096030902910862068818208029741138639192386867608762741997860087946363183791825619263211533747157596191757134157369834295405013020010499759058170439698811648143980733751968237686573164454534211394206136959587926718539689642312494935570859665860568612537475919659068040072420100618936747953737753705749383127291409003383837688855841053309435892404414955527379658360309647135313289366129538476897703162917189354281206164435348255552192776966124707287270272355902245433955885751207009741227994192134495378305063561634794407295832195458144059625112222238732508215922805408792621363851812950739715101715283572373388069309775291979566994423956314498349376967149231461962778062765502443563061034611737001968423504862603967799669087117588804859019639157112753414649335925988454052986607957770870482923146856099244325494894435569370404603972409346620158075409396512099348903782562196646067345376443663877635728814318418090231549113721533373625163581574526840997161673119389664334579356556456354401159515864788956168788481450985197215201467974181561001940631241149619657961920795580250374263473722428593232378725810430245637202518132904531251551627240821059617789024316527079137041828262423203999027718050493278416463558083739015666535614730630528564883352138943172947828201962484672894006650945217851258824311228840838756059704734974004156889921429014908926432337401389537678225680966329782263719847506238362967059541391051250329777158461686302483375117714795942380458251770588312881492313634727768589869682161697321291504228940601873619348996292388777724630285389255078462577634963779959329989151426153404562174906613363783607243267517210079578320766293154362152207280832251485579899573303194771526628078798007578233062417352061348072159821545393566054519332770028296707118564344742106657936278687268732675617734737178056510690046607762220209746122648008510436643666435541902320142352415694782992027493364828745928747851672282706320889132159909846882540327746849007379809382050344297894224907120550708900023237802233950487712523780018161507312354618054223609497536035163494093928091032767640336242711088275287685948003533785270118743240118979225026796544540327468208658559416238357927216565224536669218251472645443651889081645564816245005362169954201386198950135410692688457725430323102706392241999820836165265276591679465060858160505568568712438796347024605304900308450966553605733042168429732916370172195896437974642297090857585959129744911909686268599809774528624601994610190665878857027337811884181381233078873788158373359983366672234669655911799888726805731249876450737363254821569278028649052801255401131062341913855820271583117070719273865683054999663069013111249121297160457447041240423061246140642426490959698720730873511722072350750404737742430572024048268685119133667530568425561907620950064557291163632179554525056907363270277399640559645834440273363853661188000047234146519397763559239145260412600704968936012028106894549688440479900267973574869188916898200795990111065008878815333729179214937996646495852784883698591027255166736443038004395574418572899294370967551529143179055369802934328561669594406191593608936964899070486635648836640763029576597160034720166645043990534279613912479497024231544925793613084992394121484803964852738532840786244112636713504212176390740168740010064318423771759800182571206639184134636335947786714976994584189825206727396176883875524645479643946415113644023798932248203117158653341801005086972304051184189910711151723320637594773150678911124405222765005192822545537671036184314807662167004590802562833162356684840697492521011525880952899271472039977820122616771265024357322419282091459744940443106332422973501916691938329374288973886386034592918524051364182398592764975688780001997803671401869838010577270717330444418407603271989346719916686888680593245148354943447462721033986270080485900155124951082963992792987842114837857821508811758170325737210523836242819698681325151023148163454095321894993683800138795128096101389801313982043237028325779746911915430218574372464407978667515942327600656822134915485630059582718562671520698991302473350312566427091102259532338314893989689756822401425548363478786325343080669902177859287335109626530228527804055908960006937280662896796945405843803882948848124047942281965182397536936457929889578255794210593948378679524919234465908033421164868438416051929819069131125432441300566879775210550054157419483806784214653243093753518480506741715472803332755990227351462034161722520909347730060870649660727422118067613395865270827693082504392270738618254811116949038529595723094576904555387646766194045214126185045174967881222625225420294995105078164391170749628652025184869718810057932904459780474128600044356721564987537843310493494303165385746459512014483412377153293124606805820556680644340261399666836315845102022850213187298338640077707077917127911385849411484173150612304233608674207467083445888214784873006838124326048603420520398039994672066938235732542051375164474479235433550682373983123832947238416282024613236150041949833072908669815550674617589673248615861702017780769184080195436695753443836861503161723295315725658560497271219460777837509040504799004521018029935893811387189517865310399566336628995254428616900954602946642481835104052723177763215261081807631624720322398654828944688261281379543513838399159096503176110145561673340859375841223007298962049354231684731456119013370627451653372101952784150843366485718683154707759266001380413461198030059470241851889381598790912932175523398760753164627792920260871619044331651516812323419790246774100510382849642369445921137356415332559100571402192386504324237600586223716858020906861290616574468722975254000616033200134525382789948233703766721713913420053378522189534440356774167756989838340371683053339160303712468122195094451323769643603060107933336317574884600660754013122975875644836292687447653875456366671633406699749727233770775602930171119873713327502029649301339157436902586985805804661850651842865010512710599579744907900725568864758808468315496153957143231085273655909832339900927873362328571917762632399121621719422136842073993822309314300099352877919729663183063706089857543103711226019781257589533875565388292807852373328379571498654743595708116126805997489585227762613411374287400898540454081729983600454020975504859445623078574230082737441934713309411334435977095406278491948107490251001075326160260816166141665828764940536675366409103075438140950942363295087616474038594568300076749067398262609892149434246290522082284867369996747369036618212558758764999033240531377456820933035653514739288807506785309262157018155354164246038618753605910751171596544451629138375154996561231768056352944122861796274432731602355764359001440423701221314110232709724507824830537580539309136187075390125804621374052404104186962215577145031687226391307500214048177954438873320863455884008371509806523844996560156955171721235083443685969318160004631899389556155154887502954567874337030723431693153231859698126685897895105095148228879264170688790144046095670747756454596689425959992788755978477536636909986217025002679023725302120269168121827137745844016745136986531559713305374725826662884442853078675832269357444922580319812405402267749674742781956841448786497782251691834976002692470785895021703704858388868515265760165621177267080605919982230358195653707487049616510340265334858744325169430110779016508192911580225932171227930158137898121057272065802163804143176177861748042060613560746270301387882517734888125466322091023046199189071897531864764481596203251883661383342557380251629906535720631765398761130171689454545284542849138949012752571883712193005628020569517371873637657312815325305329151583778151502917902733190305271744684958622121010306471264222608732792916887491000707158866999254047913786054611810141366817747429490945735777114365311619138196776056638249387208249599690279274158972264263533482913699417066232424301052566108557105882321860415953995261011470246610385777123349945013365720795738329033328267790338461440694253915947579607200765511873466671258279119860920470033646635678259287228565899281046026195224102321794080074560857019502214981683804045378001236533286039783959384004974440166902266486137702679291194779601542349226685477920055280270194687371379891364308309741325341794454848006333434887621180433722346253849620431677039433650809755697980501277777113845268685091187424823340812151151597036955214920274705302810590187488774145471376334439641472564400585203279952036644952915857362994275837591364735007137899752917263254850243740999519067606448557348572716000678300808919766778877206053237007230414810898261174192999230284869838903138569158526989803738366062311867394482801934669491046627645436363276196627877141926295125717141746847349260139498229621952941926164899210479487462540920845674239802557539445478424605466878288948565437238163965174286067026364536764787585857086934460845630429301475483163588819083876568053843919529815202317165149427461863268394120150501380274794164226549074722497966714770269857429653319371853947557581888330894630187929986442821810999712432279880515190220225825103925627914262396261528127570244033580516736900703944157759769468332776781478170997801067263584947564578699956407063202560483281763769954234650000264770866320237533750709170825618178829121555348484981912976077434644897683103996518259302203185739168355670343119920701453229307854524542846194775780342354148147108371829689841186079764946697999961540609342917861302618236089580266302442813911419612144783451058076754515595931540231562270809029227064151150119300956423560999465999653837045524948746983692965835699733590149297182040483811117450935081926236794221159650071490425720958495747811724299488339537170111127932294679341722267132041146536871343639598304001759956917134651127380387343487435851780856522271135939193895628494326974660699269244961652914573600667083355775273620390457210060853612580746188269631693582473145445281407145308991224674238036221680829298174220621860798197137043727200723464659535963188623974496505669454742056367794214902540739842325758539378897401139581409478646694538433617227363033864822552034428500528123827744206093078356383899501146590774355751444444996321829960061275708179358728977432374068967803416414619266061210292307970707626315000351235693107429383685067164757433404492504794750614444438344268104672144761836840853236978233062403887482344558895359341454623603202631096561293380806547311399902028110050717415339231618537126224678146138703245509801626065686426890214790932004293128602116907695945906954418031458955572518471438409956497985277462584714340876550751083482988783963757153324906662143577507370210340928704211200056560771784033654183722097707039082998185723278388513255915407843806226096942825934133693270436473297298053131414410673096167498440524501223865224580163159731941779290670475905774711449587324396052040903560867749633607269786383362511207050385233066787151038662750888189396417820848864094163550696516989046092304161178546471108800040333177562861096097669402728598019472317127433242097596374209926949769666919449022650020469268773013778291584111777734801678122336199306707466885245484440238800072649836711310342917062136424156843313918053232383983078468123706545170731937525394324743353102231318881796761219340335058271096924509959581007125101692341639032718526132731465816895432810824251550267187134476525004805214087356728063163982776436973281937480367061490759085981747339946738833819701910602521740453589700326016152713271589647731441404281010739627169860256321696918143984628976348066263640404724742103943068890300262217919407490294185056643193778672788621514872444857040570417491743083668801820211916799180279149123365031855739327527333088498161734020418254440569737292101091210357772958736197407944977294083500388828156900799618885648926774368028577963627085062949536784319273455247935719907179765485929514896555210085742609479677331538755145823312735881427161972974752998566400151194369472948682330746237551435896015230533986496331433897402923227963168267620139539062424101002664413774030587496049713880031234957424411170400692461605233008783471512801605298659812776385852174133626209981186918938358345653057146829280758503052663152684412143145572569203330345681676854169401128235623310323455220016266200412727026684927816836926266791942439320137398200185642991418955464718939675339859727226028984577768619596135554459532721055935991298244358265061294663738057242475692460861527669477565237601695691691877575077509877316632375206719112645395824232996123929118615660776830180353162751919847202804452994454045882395557025233387374545070083797953533868365884599308144877121224106120864464121937933917213846371733319958318928844743660588628753216510072394367819660276153579065026923320200465135622260332133326790916912968206896304595976989601528304064458567050884821874068569327242388967568172502936668476374070466511317019575209348088040354641188892289787348206240433877593443377351012788990782745082720418094253843066182615519009334935552955266684858475485494938494967552976557793389120050509603720244080853334662123762719793723288604484467147679471941170534997419483368784944658587229478672681938138968282221403428105437551913127361355898698289624008368882129842599996702944503383544658955991070462640172667935141602759653551368815776369942044583995137647829628663131001221231534965839399461463026651772976511526811468953158755101980388687271069507127424565908828648868313976235679953426838583195080029733092861157150407331246858177025938607115915623640069410010572713698395553642613995001507855911638582456822041072917198751686674415946936002316231579585375014210379780938502025242931562025826376153063786386677390155167472847163910141829719442198145128316851168493735526463730798576431768575701484236408740789352058681668788075735862455978596131420928977008662021317085139495607926794154839643638696960646064044825882368579418247614851405354060662705787252435746949859486068833695557311397454945200620586897382572493191047700347322661176946901552848619336843851237375520485128070259328150932433696874607136164590619330725124114051944408510453107152694912451523749776692224397142477111739160271001055661493257893822390736623648614862400268263497424561751004005831896928283068703198441436303294281620983292409389164251515600756093175861284494043497224235994824226709698917461917863787094372023594255212399834252267422936777442893986231106470680422080051493723415218391429320112757538538152722308570014027075530844822501991820874404857371262082276060042328948543302599518455335980198371870313013246335949291371848114991467063678242040592349751000085649630969728832751513083136617133164475700823575348532001183443076306074233894249336445788755808856138636225218959783400429992989436381421511961005832721133631275549113641226868484408007284898058005197058362236770869886182300061523332360237274414046733500673667538411330822614792668451105454556192218178234854687567453892043600237068992115945877699734273688549462432595826857808760858752097166448743979126536642225144766853882164897991219139703135886522295432375281686953025665774373025556138491930286406006798907600465458206946206559399603295541764326024991786904949110480071204024813493511561562807263177679249625023722645669629485182963500555510003335448887796367378236138310691157566684115092107052582867873880273394459968866636536467871590867185180009580075210563577153824342282110770314631151974145511413151112232582017775144045997964536000603811954043472225003066247455557263394762082853850116658090037261991247692211882538771190182621125886615683314903791497925118251236601408921425321372440272474308166026376566103285492314773620130839791355348313991833920577761293186161487443714546368334266843700926550269914013363603933096481736261401808646916666943053625645047277738712426916089523675260346358278950869126866196618323149946519669426092399385520071822088538968327620951347854373933736478358464833341988758379440954439546160099695643379929492941368487698245794174994884303415895408845403336262531882986477376183597159377008643623592744228955744851179963996057437998203792488734880620325546390780235577360282627691738879284350348303931706658969021190228577090613214548879403331887319146436620250981113501638403068994314100847127956423998146619152481508119331358228736762915421760355153676599027887866998088313007968660592865811707769576845589411213031205772873869932186264820028102066026067911651743403664004162278364920630216801991357759335718017897355535376875992900410463543711577972110530813339952464979263630750562505388948802268679332820101592290211794529137334659869207531837711768969445037532706728557894994806768360107989358484976663557718022193801196136210942917405780671537338138341560189293146145018854550800490363261289124650531215691866178661123946688832836387910091158318626391704067701909442417173700506691173895530421379380710863913241518828902128499464067152291584149084550831801244343608041746464087808753602870085445324097573012361069010422206760722613567966626449015641' ) ; +test( macro , '-51676101935731' , 5678 , '114598568890558892351277519655251349170512457301108169122918046980237508383487307624081510756564677550336178477302154205298849988621620086922824241203952845169587118918761676702275886803533985126048599159621880798222780212304246817740927997329598603522333259993676023070883723250177300932925278631685866750044996349161018487418710787156824698743699059007370890842841419231416436426583294134280327799008795618556337681789763639042135318458712688112601941846586049438371804926113126508996078777819094310659599757182791807946793330068376689258887811689995072195331087218152210579989587318167100041773383622122477291943850218476496927044272842237554951357422835645664516760841149829622887677523325405719345978782256416220091760753375551941881093250856520343277787117543740369641738849743550250267305042707228709682744788048246753481687183391246480490101912653586013524077299683599506874945043746289984496657526568247754108757916023746860823651106704947454023630829841108532968959604789557821034558282678387782274892400435740522133769190575725840235412871894976415960900858952703549298673487135436478720837173606603965003749202465844411925396601850697464037386444381718980799446621464654550821206321596000370929647608427450678602369409467488634567676260749990886237210425012278562172533337907188794399372225626872733254924000975445679212294865582779159284739536067574648674948637306603357526281158214867606477582551408107503527328338793768794019922917887582376894908153461450324195019808790951956266885107461973925559489970262966079308484289377245650607102408136209843678657317031621605407118233165024507780188477008776626376774732469991901945525053633560386998290497433245057356518070213620275700745654781100039839338506451450577013486892471483552928409289830016271158248107951963293890564868178813169793288638609421552999187733984144553406615257602536512368045676140620190929856992488533649322354718067519310329366233012095782513367770623099210385145306068882019668219811962909945944938303357412007436455159207921731034641005985972731076872404481351411053559046816512985501762256787820371273853296301441525251524961854980951466415757745095790408750111233498938399843328976884101167576106332111369898329073992906185716431137905217592404057225277504661400556077285374257237710751164948498254228336520906926692000699164318088485138209956632046211769172737818805518350576876409911238994857621609965737246540747228915599832803850235006646505920161663461782710578007459880127628658300436718162035702759857413264686037450843066618529962777161180564480610570194083990996868348589497339967832525631952114004244381394862686005465286457021469621822619867151692227701982207711240403754089139160258204655040380941387512320543125847873280531581254727837191059980870831091122923417959861596435814654220789276907248261882603123131749272763005899889970210586720440187361168097472073369327028087807891921073775186041480435653913681928394558065224090076679384591070891307475995293653429635959202548503686994214508788450093243004124213718944072946348546273490462900925735733454594192759136002496877104912413694566063277128709834235803795521599955020375102449787917179385948650401410782450535088196592336719230363010532216782360997264383385827672744353408971592600267691136637128647179666091641390767353626655629610767925329336924814212570169908132079298822259312790776336192539171954812142459076936946385158760440753962659197081868092892356974717649297318187816581273710002222637822422625907248946609177471022616696078166962638903351786881559353388016022793559059422611570772104441502159519678683680896440534678482697361220573057326321241467487140124612227021769519132788278891261578500937493023431494800715316974572061757711388338850673314696559686053949631600706217179936149359062760652855148968218517603478406764660079773518392515740066557654365463358812116383920109518376511927056859803872276659655935142427958378419267026204993883734671725916631060714088945987606306190400841739343960163767980632636951807150346899488246361701225858275512527213850024197265932454942520600005445974264278700061722886358112352180245501375011619481895903494024525948428278732709789878138429844599672738323876521649110855277792436882821166942741738868002576408435397753753580116182952236210916267829966145925028378437875898705477022525397608430772386789943421906088726337517286361167325374608638664447743003669920203279685500192102212678244500280945163720924806258942015670529098264965727843346426114488713290334508104318728502382771728945872501553223396187212916235118458655838036585541800475260873636577479118287025217430116350907433315459696137904514955307303089701947453368286386613774098275500676250943657017383834720061347722825211956235385743059349300184053076658159489552304525616565099968774334572359425467321345729237028949216589829910496148348266399952259506966453084807497614865786568010359718381755280552030450357482091573325492727231276923993244258612115652943501643076670607096916922788985244717748167425031600866371091539018747314619844176434458885344303041217826099156483212620631712885522804065144269853819342281878739269471469710167419263261298426536005724710899328976253518828717132656525336398408521558604682092666618949049723934689800847063844761671282296978918952554214898709123610631472079549040944065036271515445762211638184670207178784047672153843595557392899022269520772862968918684932700339559357972321385437515253951979000296108897236060608128673387896445773358382692008138068938089087965375939805087660261553154170365883140110004255362850999174312472258828659845801114248663995523535651080385407122403810220614699534394862199070170516370529573724426277383249873364882798357333666601674798052228774948816335992020369901620508453181317972153011582161807177844672456985443467954652113777013601630746866436183732233279064589871750135148960495813527709288884229866780850817394534670003825516127760071436525331020214654659944097612888206044199184355427079633744822550780458499778237357353947422296038656940932241020563615278249555508480330508674120678052089502789507188213274173100770916834969313508824784364056056402134407244119638598785990062688861144654163575302227468770905464187883181134822725915136640612107272892247282302709032318098895359710245013039285473099721463792717954735326941637258027020359449474131956608190956922971406645107469617185652049606430376373658432400056414731724407005001708692411063413271177513212657905468790370163043951258130982778875673922295809518571866979572550249035569072335930443175450876647946083312614092963535991789686984682545283358632371449413497269427928750522476008103850277182197862744717478903974777451339726925492684847344667201465331748104805481572363883196797787778153950751138898727728375184289353676704124928349416752637531102490310279351764714073405197836749014690395282266606472002997382187295402889448513435174099451342568509159453242120888320839737697049616714431772174331671258229322246266889685257316038839337528724509464509575560371587287218382144584572419703181295877602278221106570930586664027065311454892200273818659381311150404756262029418161040565111664447264252108585981706307591881047374954123445586938599411011096620619274323216164888259706949545584064116931697419880810232135950719390350713062967911958144149654637677624682217905237402682589189689936992002791828405957862158911334297099480655817390013698092780805866900709190383307511190456176470564094830491741371514412781382471608566016857542175626271815830825751173841300134557318244910059728166314923856198690466209098544666893459074761870150034083238014245526074209050076925214228138545561830243367680472907455390358950492305796631316420731434125187536810546887612854361525903826549660077385607201642040850831267699276814362171286190066768458981549632902853741404667094999899553250446338548089645534133891269993883172431804704263925215719942166060373843805638153594804487097561950457231382850176704556278355177741960834256932103041468108431421024565688930277277827204256767781041934083737995080790793709338041932760953129953324240749245316117068345243350389721646548464456799564122538803508302280206449283869830911336778221946967418555187670963441198271217790496259964780654563445592505556519078267175564184094236772289072470230033320640614537275025449633888698376301092731992965463666856043698716302806693885087426713749261988769556429463390046244837567904659070225420983410009710978888428520162826187731324371494738964988237894717677430862117281326863913479208553025891950712021033737482821762882285969238709814995624715621242460823465809517565513365312665098952226387532971101201851401611211767107556328808562154195909528062579532668678860849786353548436978596941540803973584469644923040177756384343881496136104278613378924581962143710807219315022833887527431763513942927784402594506818541221504288809623165972198540933669494785758163834650407164355749575134198337788610507044159766150241794499149571096051559220223878817602912552525929282957515181558545301005606558272154807998739024160863626434649314036466134847629318039975100093407373104577388406981878656175843258194717523909092875616040477453623785051493436611595002796440848161148666254022016142475461311658387441335732482745839024940608008050016971556249565896984096952364713943123112125591933258703693851493005494192677788993225349131525711396145903045479052901233399936977821783416065979989065328839546014013831203847910851373499087681269273873808794681827032455802487324933071462267161585550348497079770547563318071210788547323150873537668915925365865275006606032948938992420253484030285899801624037645490546643734003092212092762896778094831579400704783040331797648705647138803684988666221643282949518185294231209149700862655885675685742587977247470742881671606128975518282142621174602709267031158360580359120233235473997243785917055987801766020914435512416873713285800875063783960692674329948345063193713090346106430960233900220471049512359484540660252000207287048940904649627356855235310748631701290142334022573624657571685050543054539462593343925120666965564304346218619573761401243630815566172421336337019044921825132743027076074431860266381081919439461501518228192067428154599552061956522454587058878725629423271121973055948964177586675025613775553459402756099732937841164187693906160490012428728615553281749083877569856034002578003805619108603440019554292851568931421048023066958052204343883372931130679073105823557408875100214126784759475874110505599354169570696609784560599958215019928598013718187402289676120592754363058386217976480889644579627120147953445090187876503616327911008391800184735093377883625195033462470489375923507822652512086242908850264792687042789386655227831819214938281104644932640292609019834942621395608142214243559409841197661527772521605594271433534022197568992584336382425215293816118135415822763659169694051345319875623274091939751368133997813845916207449451701850545644437368283792955041875417825002650183812267921554071554148141810545261132326348765749042696757503149872630966032411848943742788719959766685423336348908720532382273782455044811025224688005258724128117375301877446615463103917254847301569577217661986908844517236064250159012321706048888909681124601158873187553237768719599661206118675972473809098983711387501122615038573963236084013215429847727184258992906237874964751406104681742937670985077393504140518585378445945934961441800684055554038233956351167210957484786967705794592308352175762541752214854817124986107384580167149061884866946918670005168162259392927744148326558953622056499756057865517495516987090419182627739373939985152189775038553115538646471075934221909696916621433427020321907211290750366847722032569885358324304825748519823761695735069483610277833391784268305687555417321060681254063601376044472764727209479821068239831947119222642427588604524821548797463869612449236554848366936415329635310834448639523331032214535561193061625240491292472959421415693842751590387163835477828542899873873355067539845115993799752754206275423338217062076744831694087595991582736550683224860678822779524670167708708091493709146151122212285091313848566637581973054913102622054948327816252692080182215324465447499805634653027067312991605368041127365270645100770232874469104024167016075695806268258050422993127312933128697504418653934394765893583568834878949604860449521880438659616802122657499696711371950669696088698654540203231615696906652300496120780993861295366389568887602126999373711575248980111463126737434199999923186123228140458802135764964497499211839068795147064258579583962890520656631190772155927073711649314137404718303647113380977808317817846980386481066453326264620161085488324738434460460038866634635020866393862469381723564361661779993116516911788408702482058657042742027085322886734485737469665890653383965527251028179320635401480247183169549776451102905415564180956069929150480364980253864993561144620337603341026450280648329108363155941423746477676441226330763778143302558927254074511454873470596647216773968167693426794670205504808306963783432036244979681725783341795616208450760202661124160076951242290485270351100016293179519729579532961953093883990623843703845911016699084294413469034800124849706899721051849479889146370628964206263232509984714695180238067877770898591308982070720120248367443358203058594410980465031081259361282748294276045466637842578800793537425693971319078319720309483472991281827652766395632559627448449322724455935973458554816112349560437316476772468508305512367513982203113683319867051472957794682903830326933115041030819168485955295547194534592544854770444190167625774242882339856600323988117721872329621119307065210242378471925603855682602511342933926964022027574473668074767250277614350240898114804833628233917590283331643902799593247663848733995782588708639967040765878261594144333897235212151312166170400673009191876880782817897642797305674083214304116001846541558880139343876729547122660589815784784823845573389037426438950965231475933765920983976255357185318394294462939870923725191627253724661104724674152692069584822984507668895796308777450228162744501914688617738288423774855905509153854844523303840957562160021954437904572106375782764718235463296636952021626993854683250625366396838736958893686683145675963239492023700157535671554883718959215653559018684790556050406047348053882167970909777535677010769091602244371438842557331819164644414366880048931933080199464775719509620992644091954275270680288884109813652088838217429569522796724565190899510248605280475710488565214118916127660760240741412774854958523464875335791354333554221114105991785983393823020076734058183927249261932463022507518378417531613595367008713063568456526553921055526758039628801741635831559596552015920057728581873824235567176123583511244661921620535917294970250780006254560913313662765305807933366774232072453360650960008438817118037078045098657774617616105096015011390156583453754385678396291801322575711617682706241038506687001234836301806498523163010650449912433471614658213754184557683081702691883198005157762869533426985772871548066409461102566074482585186196172527568428897050456306066648582770036459460511184764057517774896339386592062506459252579461592560474665528416239792702809524368229823156443879848127098290936890568640344899841675398255520835326531345996368545121081712559676548972073976307843066272299578779899750067849171423314509815187548244077378329796193933542997364333804995452518983295374300579841041477430234285996531274115737469223410436044734098218596575261885585549688086844423068789246324166549747789727265524050455962780001580710226770900533745079189013929659478693513587745539578848213377469358275467176678200951122297705749503306698574297410712427125825591862363276134686251235055301972061105661224639007183964902695034424436437936253659197166818614429825626676264111882581783852335169138950280191270126993381055654149481441296522956835357856587690439122868336488948939918429473181311497573245935858058048846043815567877289011167331444931953925754671240134069623866836792786186011879777990158691547401988209088233436138946304596662211246080716963940999419458347032733075551690030530582476791228961785738428344668271954394260631144673445131619681560910288236163257493867850591921101601774216283724826035337528992934585854238509545972201306935022486046021526186153884783616668536070352766884410433501411997774544944294529752318683967218547747054919125920723787453768874396140732374376069661038491913390225584336932342777315761255948878551294079902768864779706744004767497971699010857817837320331732586562556917485670513125539936647354410777628785488698349835379591475098154799827267570479952391820096174179651670850574284042676840011853046780858800494312309921469703542619592726263073590976462669364922795234207666005686292826903212848877481605826947453296687451059719061958356539720636942722901955175023641714596609837815361932183405821894237560762724700527878714340752426908901818205438166928697623647899633610409766731686872645318577714032460894835086863906305213902132263709453953046543560314104677422693777305934218298526734878837051106284119542143667788585456657142746665427084921846682769309335227479860142774263718482271045462438363768361342074577613689416306245388036366588228918750297891553343601271116018104061166106299788463499404576467234680999408128685491495431444663757432415240164158488210900819745907723117930120695685024585064625587827493034169505631321361629073305032453650015121172416455507667013522455054423012824659556913170191784272134013229862167933357870440372597009868509136667331096909772244774497523425649971713882182557907497459362685468864499900443106554956344003403877683026526745408126870149084364211072799881433860076306106247851979718211066568293397639539451283955573658564108776175764110532523449193170074167594375276229899521780717952518583208904105756371686598266057406647087463129407379439591678526118563375375353708424759178126712588851088358543556455828259242229752207982655534691287505400579846562914613465114055818872346386918363454946173595045963724905520868541270473697264250446046089642748190999453356935960747546554692305385529475044104740895111094053981210797991140570926872891670773814468169522981197767273686316613791050298552624472953601064874491619431515581298483094974434200152544999972253615705670333910064258013397051190672327809649449512231521002044431168670777665701194943318920142732683570462533039523306263620225871545457775764770604929953997570625951936899909518438534435970611071611463871839879758260799824991623563429811928499039440771973070864273967278618870976632376075488071575461144561219935848976261991995743418626824010282377472581361028454622921441883252823380473535980635040675347266665813701114359254871281962513087998501938848746260785427396775049514168562612073137570353309933421182587431285208099490235882059772793358564991437202016800963518589761455026124188003465061263343783842908952238749299315855490241309786950824004062760976904187502795945035840704763791629996479207882802190639214588281672075545825412562820832491492193486742631064101780835395570244051743402738881730159768458032350492340983945389655058528481715594070179000970782625156057915320413986266019990172337946416918557063800133747641604183437713060443142402624891881249459030992935793527950409840201343706778667031036382270368309922120727685173156943536928765918297523291556499898745165164935596868942828843358938043957961029987646769997740718353298902113509786945580718208991358463177836638025806577481206139581029605232343390118748079783839195843230044920030000293609262840245610181309358224141510030238251805707053062432073731984040628183721390347726139606685474826304883630174052769377584217789247910727483325946473633314792666461326212634921565119552168762472730204002086252124424937891781185484626212876955436221477165360031020231430386214870054108295007899715254119071513260472470230202533983791307938408960011206611455326096801350655243853398472597807466586200601253211741913149771316966742972424796953362829778527691461619646698652901365907319538496395153314189223850326377266970571724729299225616643375250610943592593231827466075999846471798767809815413033084807935411432143738782707086800700249890892016781300755462774204025643372850935993536835930431474211275360661334909180169369108705004893833932685971810039967903674985151600881858004723253102936206563045825118090129751111068119272073957023228117535946104197559484455044224813743551400684035958704844910240433782794543523046179137502988175588334343929604010655262873143788409800103840149709367769678272389350632655653061526909944375166865821226676124073718040169866120459345622225584107723626981527594409083885799002170436455111357966813110193233521883524236223930189338177788877617266977925443568413998134839137304794431773484057275907471161083605792371548269896511232018878269590877998951467990708359705970388117405757636229559483770009754679879169950634139569036627493168743252032958240435946744381139249473095508589299567208080597578309780705860706366590038525752672682617991285144702659613402563158938705017883355247903759797019472262560188954212310667319942679244018502332473572330860141285275142567616352011441717389434820775671752035498192835097210704346762871785843394366619830754655068315068021943501597109761283722605580646118265029950836645428880355482809418017207519930746525482467660956501946286248673803148678778320154527985484392151772657071003568822396992334569447439518931797472794360893625913323930637936123592307936959744134660419379541520223856359015281561124867120268443532762202836358157067397969523277941814805842994278790015196862449348685333746940835406048087120468705315737810814851006986239662973395622981892417635797361552255577200093154926399160041205233526050099942113585424767102462092543693848903032320176365611859456909911464662553394222492702361972492589328743134628042819438985147526265136537852840491772207661691558509954371067469519662258250666590165226871146827599529979187274127942586949484821499948977145043677342942737229631023377843981185400933835831423767351371476191843662990866109519730716132126804072070640870780628344547744782396291260010070383315973397408134147633405837121702299828479485082965001168058308660534087429710071643832112134185681191355797031035640660674171124608581811772720944526748929882880981531600483484334329258782080131950152990379792064594496526209604646130807483497903997981366660814109367081501493013317987778423970445235345262451162417303194219408843842138074967028470582769901836866713822445861935378961772248421345450181825317803057793865331808243999032870740776976064805740571853847337064834310551096634478336669042763136704807586517365797136211624710257953267355206084531695186978286706442628626395149607414222118992574163280333685823680906473269108560879550907146951083501973652650163620691173614434376022074343663278172616794365354028350879611668170977299413329242853102242731460245981931645393086566419168095714547735636341109457537424127013466092829987029469225005609148935719219627886553517060926819156103842061184103249786722102357857380363966877195050686029417164805540813780785634440605334896258106006438094052913691329158675367290141201254618676773332219794175088755775479718673883939486154200593603203954816323103020616423867397093710839615897871898114553682658447075458783118190023366087506978374367440207438924966819405213686487476793825253259734471325657957108673156552118127808366008364042860528540535034950176612182005881123405988511608306144849231503055132715499943836726775291396811671741107037864808220275570128503090451498085660993674239141408137294509508916040084880385126052374726220832131130118877249390053885190862016620304127338330822376885177520007162660545308168910551027048206864259306643403258146047122775364888620470370521404458837255123240697440311548296630455328683555320575028845668660604051631191978861891344050450146706574218145025744150912515431643639763471496084616921691588906643318094161772942444267813744245201380387655455570994259537781139991672727963630401572633729986361556875282295744688790419550042115325815066901167830915280249317272239032336428833326465165088029450553351265755331884109528200193953474902952152924946185562536338925534826199411100653632718279533909714213316643228976513653756607679272611930525331509533360676882289504637968260788530354999017751472236832783844855905587554729452514767314824700008649155270346776891167316609312798908304391728180382885705826358462049930067611387677311125159653938052767644809094689360554558540305110248935812740648171186350593122648008331898865084081910232912772214306873277181550887217911939282490833562582253824958566304651212513938680716752798136384903060676496603824306844521424474974798402169651179277198301900928835877874551786318031213157816266052352420958386807745919890178528945692073978829824318254828803767836945769264370965570278955420236563465318633087533589358061430931666035989509802975402163642667940061694906307745403336415888401856273908779094219374541395289779919505811512398727811277052044628889676576204347887155453152137381991361998780634451422237710883316724087265275331735893833197129258839234716392342611646952816033259950054307629463527993424446629554718055401467323011537168845330459671616005062986429892433717372769708986976311304603813694466876866558852113339228482279288771725065980107614730689732508546319518769065056680957782914367866215918590112732510471009325001837807792226514983632349787121937850873634795369167442047937893608233634609666703704587131733723929085811244615783860405178507877859666805690049528538712275243036223309707838878743093968440740186365488240924198311296922550429467362803938321202544305084030232602891812533837834720169281029831388109862088373636124595410033526477352125408960443495710872004466944740504181430539375974997235191384764262912442475167562557149784655839519095519656973612676149775555468394211684073546313305136429488931374979941004482067517955299494545191338214275004688648850080625425657255697031851628472826812878438128524708409359692881087063253264481220907184058301090967458080899506347453532002995200234316121374098161410900539135981863658581370995732911051446451138998982787447971905437800015184192194998890428219996377737564767442914336298428740825412724669981656100409516386221832151219625497417581073077338087294189592180026420910118672014596652061567734369839911877944565035730463100962767041999720431147498003871428186236484743508773318443952371300988256662194348824041466733754460943324754187692906063468991068425866078952725816706806990970194721942596702352590797837064926809786719427373172154689565613653917663261933894602724198203854026358029130198575484449317765398657516813791597967078843130547339469073783524497382496877243498441684162650928487855937959542776542381517702580219111410239373945791463335216468817891797159897821504141336134011961229585863213744116868341898479921270173994357042490280766042368231306294592305816034402114190442648210070915119128632526643207927399206403270502196136290923785508894091611892797999732479898770027343898906937912932694388260729491337611804903421576030209232881941209677305990236485778758568570909511203847749727139447140750017842138051158739164470079822994287470311711455580863809119499634431231542924995363573544534166199416944524373140000391672173343392584556167540657516390123765234814227550308964579212558077778186821292704585207362004093356520798803551721188807088087772466898440741018646115406804612936758076828507023774182209672664449988128724902414993501219401001765370672317191401925997949428670713449531376719892790107292559315329271665439517184073930078672355080717529913180235718999452728793715874798090520042529997304171394608223665519403070588265928559013346665409955899514815287087015895503845612331949334663867288844709249699760870154746576067740617109411671360905733205915721144812868914282146396418963599623786016511558301453135637971753217719122740923575115844689612181585533098056418282958853896584799967463642188879073429673984966106974767322904274930921304431241275791867912140260586098638979591977302253507591795249943499668854219091401728091291240324419097106670936334674554710470587846998580373319693822832186125663563662227300196033318571309952940878063796339388257833300085483835132481959803926226375922877243938995147684343099551037900344498227926589430544888103232468580078181742899166208452521226468017225770159292796370494628221608659705311860880457610945893698767024912686130786102451619763311388742213622180967440266735615377707064630432362851346787104938266503146626301826386009911001332410273267944348625003805191824863507525729321246269404084347151934903222130472688695181142909993054528914728385212132736819895913661164653395636100392775995046821116359166052147490259673545652512579506858292074086966566678148092233349090670531856554153436180220853767903100802098585062424675371471614926784976597351943926464759004842764683915776120276735116378854746819555607095002547606392301607456201613727812460712017149291083250455836242558225613747332670029560146313664626625184108408526435551075760616558918639998468694149252839714828173433759651731790585540238768981676874286013596872690278563046650509425213768568600827027602310874261454666959825912534982207381304504165906647669730083754622626706293980961379228599568320787109947615111949624856762702790577996604294851650710262744819536909560241872405354015195815901368973088718316821955357398270458847336192054118678494760800661846422575105028339264471032443221584848296622560987616922442031578568960816859233700095456702725652471996634621805360039904773049493081061117890447026080993179208164914084001561137279717964474457910822698800571370948730739574958519456023949553713352403879552609629342711187222946890885571493932420920963889812746152759211771233710658321471894667865836881256359416902697886305637566565270511589302949804123378578009588741245234061360202559864224187793107140310370774238991415782896268860247160087221743398632360201329490179060521461387097002495616922113269135683217341549840373435949057182322394943783472872058473593126858273723016989321497958715693848778260916053432892608850153974019086350180056263354802687994169752296797729166187979142462997664638545934162928193655800594073599868087694021711982073641040542199591089911339670166122773835431930957664741772458832249655277342309784943306925485650386363310465509184262852528967556488981679969063781668502292160178629319257109918089175245793016717386236635810518592787953993726687773744355504320944066168920405278890106620954397703842075409790585293639502140471672275176364054469159930595251498121123000632836929940035415174800963695560911591519351305097536056757497122738733247223334299439795964416272756974788281452938919543919179780495830578105176873022791010237618749182041436120814538747344362413981166492880532981408473122438956024899704764414827372680888359069383203084252482710559799658759140471216458496005546408675587772142479513233766094809931909320095433919996718551768358151589619518928107632509757299346855803242881198506144473507763036827161335579895814696687756797267492473907511129330448610059311031697081944370716803795577518487360501045579868709621241757229741722143091970632237708849516805918096189012758100919518522581134272755075309636666228932838080599671285408828093511202116961319849653073610668505654418211025373854469615185587420505700575888261495326807192713148159720874106763838858514416282535260626452514445199386144279460790374332488395321942092245696971633409779711403667148196791467370350138794216664252879537117245964416540374786812119366723571213640039312537831206990870490421854920889257491088284125753811729442672269609411252776690642554159109624124410614773690847589962809481591267437473683970316925645103066449528952833136986667526561057302938060806717705640347372758940854559438090824022934117904362128241289781935585414469223058188520370422811243860774239667131292667503614480954661643166021094263565562954650536478763836171348484291106790718789951482491353812912872996022446709005369204478525205413817559888660494002070759867343020833304262695786258762182090471108517478008062047916158342858928375981008630590361530730991533337103005007767024431048399846363323604547570763844498393678827412313502948266613097046593733067129592808782764829082779540513431895899823748129703286439371900576065601753249715130145551395611158446136282331860450878473803949375391163105048460542796053348711044126190850489694720890621885113977651566300965967733708467656571181095189043634361442938460620424892828907311518705548399259321673290854432989232402033427695505537391672297800738391325014683049620765825976502001490715724896015980764535931939727448433948695121642423627605318724132757699110767075442641487063525797598420578507881625322631258275225375353312907827229233991901973469958877318300954825891826980150082560409853023435179352929576326184297304876469260675852353214336752697472278921785590185472893192209568387192363535612736411827177789230687431274148917049359515220791900149954463891144855694570764248287491511795465355571647974077067810042898359708679406723077456168802915159985106685165278844446272185418039624433414989676529360733224196806303027701699401813246007448367635711560091194638564196215462750260469722895057683130186655197563435087042456745552261726792507936708788382778795714813046436130676422706429620437824366040216140317789120666296561961817276627472468337572371444709160465057566385526105800512406353089397311243525990809771719833722278531018522388436675146455281597431804631523542433155277652876622739675563673188640006742892639445098465242739506308240042149149884627632749060858136523029010127328467486160496136970964099609404485275485587599287991078550382891153951255006778605902787210807236763823509705570383045418472207043091603551691808413012509993628114628175790641442073599128028234496708954756607086944124895421408720862402696781696349037884497396953950073338348468396830752927901597524196430868111165262332019170855492271790130827789573109557139053285109689778332545958693287355659898640515042491550628028917049986801903913280115785942913725572192146862247809512151632511954616445305241282672393782775249991259990268401573895663033422145829424653742257468572830795144571447217172170344390171558138444299290663385049414552445567639181283014510290419785983701505834195674761038613042562189128641343318579288380854262613061171426518448419053079528551126733990801837900708461500681574188884795165426161291709564074295450881956626201918302402436945381093124745577171671312225963759197527876184346331791160454187021677119481282452140937671112699410475067112269611894574476316058950214818972540215691086743676782333339834793090049695579827352673705992602098532938745690406929370454895121406852644336817988310511018606485003687435377377880357687101549923752753870842331086890020957072110482921078203892582825430743853678938678845171550824421056075012746445684719777935620199933697201020688921671515732288023709159460020579281422206200660770662136186411119039464511246972567849083853953974560152919983727889703872145059312940206651954534823197197456037124574320069154489362428152384518561176908584188017896443196497458965211081852296712793505164224540578823521427317961999439433840947679261853070347008183355600509419881301091737467053884095017880299752423221585377626802533750299111687354685486159204618103044084872599593910681436894070175869895284548114007698177881132942381244912110629421844127353550884486951712261822154242410334674508400867284003116207597789041715421899510712174705598161680472160639854366218120520371025267080822589762082721234822899143897023722519527191182967187424707516302075467248142839624551051489916072253973677889265488627584976956960720624875569085896430625668405496389507310955276293395519901278703982054295957616190481642061914557057918641411590376116837069898283627310675729905679075315341752230316326873798944842338809064711121830318844994995728478247554519759647479833188840882272330805936564717875937759645466235877959356774680757359186747964855850779950002190153225827761646716858046423788030255771497227479049063699882556523239832981578690856832572914858098641904135700095112492548076201483334658215008902573568715728628589777880228112444674918240096125221488915805020859677852091654966635145651388632847300280396301961059638194991615057652714347324569091348372183877979671140165075401908204991585820352573960135268809787675490861799359172749390316567281411205233112473050152264568898538213889610052662413601412411722965122929820314537969307515359259003169193350947717065852529386538881686267170773291846400688708486999155003104663586382344290816318064759978010654953537866623711446364570626969502173544423423074929404208942616624720195343641583097741467031833905383231234374060924479894152342878888888587110637396276339544946001358888192005723471164751936785560384570786894012343324076324959874814196843505410918926079285183879707107430170210495856306080442455608822862122117572876456630741312672784076158322593594055019414285422443235678980565689755317999308802910505961137210498567710018536735289083212063487672806707334546206404814261141369706196328862821461886994687577175390043169221020130498162026839862458973943014519368318441838195560100295968496734198518495996314945289548715598718870583552621401683863581183106851205684154635910380524563847117217821212106128722162524253763046827147151974918777923681784807700970624766909477312166760595507462337125669968044357089923070482883709634106122062070766308810712735710624862438926613157497959226806833188459480017662980172063360634178971275611314406393895211433271861436947760659023345158492960047345295499295662853340265551685535599800744092303711269544719828803680436916119091632263364533324661266862974434455516831152632639373435575795104537875888710518410020589958339879959822445451353658029443025792509752253551525308255741984775779270729019138683637750829888081844708006890211552146344622614088468708319389319850769307851285942767252474785352358559267431807815209013706262561029595478897605034763527896789052350336340918526657057958081872287341591904736173950725836194473696707391163580393299902911848791441413850082003693596935427471422729646162077763129389201152696915172964938281148555040979580355711393742641390964747263809506784813646753925737960500015999521599040534422500550634111212967036120707920863177566166569229503234057262633077041307108981897403699595707664375223053442154801646621952674073998016018204114207792322619912823001873411899291943544289433976296710950251614937569204757779765928995747738757818760854802038762304982286305288261345463881107741394409631520373874750233139799838650413255743318875470620818472533845161123753583328874495241216906348859022307736592331867789432771689184631548324581181882547915784645287665908939251778029107639157159289196176127518723121751560070469290085609343869257334092947393223315517614003002467048702184847384690761234900833286623358455281883757151812237381345516686955628191314036123519539678665398336254286303408505084714763392222044018726750547293413234050365413766358316654410953551281819431995257295975108311779909520303889212337450841246936324792672921730951765343962514538205080555856311467242150053436496567701001851431642012883560394627048117888153808553859689392563362831101945847612823435569999360628749362849396263121141428978393706694610773760753498445233988754224335605409426064724465150571453306140168263830877100622522054887364455754048830624591098148199844437954318671983054725473714673721746781284214097106750134651020281137856143339404661336097397401255849460415338500002693898912492847012546892053061780546003055285372933509996259190318553322495887219489025100141803027682285498654701158621266627181173588718688738389808332699617026792423659913858117693296106288197971001919395880629554677187346338125838160292486198360147729979871273120571322032028504575690735750011778046083231651989085708906682400875964848727543577767320694907469192930438894927009743546491436041357955549348300042338360759281377236265892227047663620196806664771980284507347099402902967733697999621184233818138249990684015970535495278317959125975524991795957531505015611136002871680310533093786875108515066706678620823077849432976257275439747172137699295045174649617946011443989552460583705965135899024689374640564101925298778186797415025378969912635036062934209463477387146111182074864014263939109691429255035354418183096283089143643718609144817465350868728368487526110304341902202363658329806583404243426301929038999413811963719928900533075863880385638026377355762024440421846082611952343954020299294254318741900205024128317877368328956627168050002516703106370642969704283772358296461093955291187494644342390316988195849776128675653911509104542124861217280772932996221537953310962029452657975182251689107870392012504852892547316032463597681300089847160255250462914104176616050444245028613939373851574524967337186933259018554428928015559462061881262235852459856089108099770130466183985887436588873773243601088860550229426153384432008657567689985229925644560273502542282381742604579927654137058837459574794972575192961456785170540640531904771432931209781137337286211239818317844041106915878514399961654100374566986719879295231727712111771772229486027185802483882395198074790128622402561348121667919956756920273231028898988580958707002246439749981244065925735360676364733954118132106641155299199544857249592009103053430934913609249297653361487158248749289098935130229734152531034647060511392685477854761239602786254479061019382441139667288410559126176759142054940087896465268370081054931187899275164499441058030518288371926823323313797222058155222896466033422597096415435116962085378815549492184638325958401951721290473197241670371516491881467203347875585007359331254528344449459950467758875267278189820752127439854852566552803870490438503143232653957782922118685816688148722781734903296936610500471173522177161064283024894888579788472305995091180282414062431445897622125893030305492825543169066044111330888912781754024348338736557326750833574402747013630048297404805583748083230530028596408741040030162350741781079342392865246051725408625341045214944667618371021284914091497257188761924767939637028534628334759882175770670772289957481292738316309937728650022513231422234754422579929841855985946451468684350390314845273621075639131390824319325380971724618039332427557919436402942528867210146505840229198062530002639445641553444719681044247172959043190866680070064196331063863914130249071095131248563606711066426848149947420902504927075034868938069205285471610210028557331474791661084008529287736898562988280474609439222101768158060840395982029394044056801641541171538945243610104322534200730204315260865284828953604535787727385628812968114791370986014951254706844185451923929072881468774586758820306110885474794911532141074138864914763733541384283976740191875378571118515523438069807588777000827782446489266182050245346558837361947434377809680600377844482788019840369988901856492040146378437457195604765771763497148753529247674438388594397093126205511452264943420149474713408497012302647389453439359384872233770236640360026013633256865164883566645637992031106481526435623633931034222232355213509370961371765010288817762179693552242379775216656260241135497573014130795564397554787053584387187656853711857623431937857471939579985035081848718829777316272176681052612968630380592713032967004361608181691291430592912818088530249261471767125961629681696763811424116391066373303384993152768280740948118781184558104319987675542498579919858166065158389793255707776743744116436672753184816598112104831674522931550279998771106215597545399479437343520773636597563675211447481439779932609623982600338971268883683768790803057118303171340769493891379059633504014432705976380151918797310743478564409243233539718255459610193420711760557630156927018163410042030919328901263062660290810416055096762283837210531454115711704392214764971534200239720890924410613605239216073127851967270391325506751978212863009614699353698989489629129966825662563519386134716961129383146386288035146250197315211925553022512173302931962094722039477374774504846268505683930350343868458784422880640500784492844169201589431927903016379662303396527872095562568156390966362645360971925681857871968341995483947410283964766743270092620340260322997257237091573993613689320984290367200247030533720027280038417097783212839273035096338938542591727622575162362022599685496500554429222347884038006453190248400027743775341348801335215989938742326080054254247170602001952079080816650302245176710604093355842163642360723052540350943441654273802237051128416322439426475234583967057527446258480482041840231234842602058417412378587528062618463131988655226053150118765238820025342051914431270624521243139110536045516721557341224477691444072542250943379523540914610979701581620559268793412031737790984636977046879757487332724442490312397606565039366925463662967999702808542773925468580692839991293056392310917374429934951347005612307226284322964209030221618750098429366099194983439477136694496857689442264881224914039910670322116288372730289047738573108522450033816672394101565965048622910696973855813020101016596778492150524524163597858951412311844796147364899117621449468760602813472330721658608635506930727103404682194935368589333167590774588214751222713377251630553526943871411102693132298087279434996411605103626921829523837922181308665640485185328298412378683376130991261907022373866335460773339455678784703129263634716537532090282547777127534019418852120934212233684269568396133976431366342292873151938449479967788561358899533463702974267094796359284987637751201598974404152475871775040728557820818028482149140963098586410453529806961657287735738138755712151598174425380024951275335199558910669206209576113284903353418478945780694878129790034895748753362050781539824584920892084749347087235642519520452342493927793799776786136198617469969693126983224168201909587877154725998407004749212713544394340278146389166186340477628969995703328593195001704673717058025352438357468612946242018587325606773986648467186870072551528951891526255461310771157406650956757785133396326012890387635813591423184033135516070805571730845080137132045429491261012978403015641430817512666681469843066257060720964098086648402611312090715751833710679060879766494555066896257649913350023260836668751637428823100349524601403601892419159189925922959275820633937990644299249271169988339019515965180613573895432999894831577608592304848155696364198541694025900829134781366210991417472495148139315405572913400497872095116583163635740301688579861226084476006780263453790933289131487409161550962668826089637489553038837859879843790532691421980575061315224117692153481092599586056471601215629186621130434664996556516932298784329307022398027011414332176083277481254566740985113591763468957331875643736921355329794098131053487627474682120881562550550881428255655602726301461818701211939805917586146895437388795911816068375606614039394049767168461259001949273538210144048916666534903327280258028482616623798309398413700586176634115625829647911232227507375334923375588614078459209835676422299267049663923396700676273951091983057302624288416865668362779855525365118686744053391254580621393591196711448438077488551738236403307762952589858684493455657463478117126363062783121291423235729455410918637867035685633113782220139687642412165249598360509878714727491849673012334378180463831584187354582895646400179807708658382550667724914138565820039682009987745157792741850123714960764039841065734298623591290702110380779922504349890524389320347890308828719589040376100679017864219311467557598930026491189345663675214233027772264878374490381972865809240289051249348258334250741010764402699448241367513588990261100526633287903176928198197677117933055092254550168988385755711184604062724032969041641602920344983239296376314963817502741923901882100981471281443446703980599875657083621988880973620719138197772524100421922113549246894114245414372112090493791692600291606869049421927806267868540149608572744342888343192125058473363971742076638014712200975997813876869820888826654477230072783335769094726343439363924451093740799160365246814221521418251509165560016088242931176476666040166149409617751387959304000667838298475779617451435521971107542909535756971647840211114967059219572740619358273317825413217697042690085081762346191097822496311788562562031626726216116215298679994354658456828777010935958029126216060917819707341303406969946319555176649237050902062556966761241375058739571292436871898013175671381669805507508696910381959470264039318613075638568464398580077833659887720496385166104378193365458881086843156468468523490854549529450710965680147266392003581831969193933659362316072852675420800357125522249098898054570353965505168107882852864529840652677935931955087124815626428567901773577880059003707684993021595642820310207853594456286754132723969857923337469252202259735727997751116848764487235601899102596111514927141978064206334037406646670461524244267294399389563489619484717324536636445719285643430736881017478756148754273773852289888136125549801175894395271495950395640707601607104562785797592351715554623869028246265577155348990843423689483732331337719099850118433499218006218421240299027208453829439559447186342420117431465432792072288988488740343057267417723708067738577852233243672319230819937439683915440649582059516544561598623280971773789120893086121672269536624083598033868209624720281605641588278852741452020860395156344376951038233934553306218241725396467724828107444994633708693546367123495314361476105770109803860472148239644683473596101653816933207579295804239795231250209707489881769264862491580478053842336543358337010193843107143139943833585292436929169794827683225645488250493758065708204332690153429283252246824483410972045997105029219491200004356064388873493046364077650981091839516620395962650712687713049420813661020164790060026130112716818875580888149422706314230708204130100772098049184062203228041362580051800921206280742731510572822623376036459787961780882292249221002031736456366826421727834687640584814053632480791830200948413810861443283626261692032040972578925220311877455650049930685081104107394628130349553352694618261578823385706710078304466022726537115509158412710129375703385879757237284539292895988728180490390220496139617988669206437315385861127520716472864870732451423836516235084903022716386874198709556735053670824221685660220728278626961642949943462735737024852061880916852346905339456156753923289238892045090888056432159120268216479709411830925161705073727852182241843774144994444796800812422381396128011433956107925125566938292728894518495205656479288798467478295768971565046605743380817683675039276816505508751212423949926029841364819217401250701049413854705548216151519699389827283019852789171293382302732747354572335967904262121679778835809536307205684993347760735860485162352359870983946965085935681532501893160966722375508805057199214927917795853333092263437505359039352967087492413012955087698529172665198805420638824693085516459299213503601188841365820793247308338096862952405825957815923600207308796364681882565126559078649360912095932577475791841991368526488425858095470521872452183848155746479635949126054100759873565047420408657908196467861088860745823440200596937137469726554619440021533471197651802029945746028546114454400341137146234850866902640999835474619226352406181906965593958219260459751945218547186010136586725824330239183847055787095688060314095111184685688138832308190665361771520893357047382326528633906357935617076387165550366027262811769099959556389802647692621844549401990735569529998624105286253926755935055719547875890932694340554447107616689228089562066086569944905859544518038840788528630069102190204691632172591973746465885214629803758001818354722671577554377946458675180639189931170900056297193465314174724380797003889515935304761631926385152267377564862725712122407042606969044731545405432011544768262989326191733481446407893297863327714256422001628622845256022926722039032858852550966980793417370766719350671793803838423609435455646884754065033709502751899071375163169890856762230034353248802768786910964565926739703092124666704198303948460691736963253713870119591703313690617965257847769243951364137415307103859326650169756472734611428216414046385745227023184773573317555077165126936736741629792481292498743205155835997683268172359371347012456091212295887484642867877578646795751622965835785463864395557880638259410281317519825410588466995700288346083450655637106260214808311406178732561340081016232526189760751886271379564740782676263559705973541667456189291443581212424404676011914816089260905831619643542553993402039798670408163878137967461241701829503692199517679672763486035252098113450580438489510602779967538406778194913724886699243032503589895316658938365078639346817966446042366971598315102456226149656515684119923736039138700680083951001771224019777161575827820297993227494571953532246936982900599366416589787251517727463895146269431106027269854190552230633092628014821482309609635823553388474087969696520047538050162437487064672959995402543841470139970706134643073875937981889199695346910796106300932889981171735045657785459463379515938396509980647441968924682241853711106019941292568600206670508573236766497716210397782410983939914467015508129203700417353471801331728912556922317624644415889241609181001149181985321743941473620491460989210711065194784149182976559106558188134333708873913801535240126355571162155611895528080568951526554987444334536731499537753528195430833779794624656681766785270140096283044140898051247012255419499146558168259139756529674323772834587323355629868317816780292113528663119722680719024978280040818470547128362669379424806012577422038887191868631883448040020015452134369307399895551088373207616043579965759272959559449403269879855598910900010706024392636484042799046911831117069348975342142583017574911456602802451624070688915906429274072763654290623835166951367071267497654861627881666298541483065726588427718084629534053816735134742365841971731795029103239286268275708328610899135163422402889934113026131852180686527150505983759002779807773566223011788941689719454712179344607326254690287120395766024482256671418388078554228023784784496201187429256077058990150435615351155216101657438309215090638315321592936537200580321910657657215666815341247654573083731344740394722638474346512544521661792980002338816800181577838361703000507770721899400195844878004251805255464724701063911083619487594713834381627924257067711581105282570735802353540652641183829634997288735297250112282208477996416073074851093528870765045321232820222921439911099170191434612580973635919820391541809473112124075733876951153040686421981760730940392248786343513079856829965044538757787037942418740284997136502228750221662928279924265870962201635314064803827203966095428887928130337192039410759247169242739168498523247197273121591784250520458251462557288339313896397732661534729027052493515404201580059981956608905079272892706164790429218771081619749768508639849339364643058661360212160610191272076371006352322980097730083536900596908930188252920677441148336565335213544052062940677350237569694340838070570449158815512736492862139779132213211843388066176862669989419112198876291824452684702959605871999341982491423024679580081630979799600019718579349756991631102855467872079017699044841433689138792070082691245858860091100747333527615921285623074522312582760989162946865573374037829302178739225575289042659045727978291390647109321424303936944279972788242891964130377157310772605953533486292992603361085012572105175885943335595705321341456889458117518989992036681091968371021602143621382567898278967201088486661538826229576844449884230327889089656416829054301277201456616051237734474662164978054102538036494621644430726212087953103526033051131027386921359383088225533719150606934884972757665515341103897402690521343519506346008077717938429482549626794547576980199283223676534407717065157853712801659521185640516453515871565192484321804442962765733972699330046829989406888341627015358639514826801677079021155478293962619923778866000228101968771938334162366469804573202014667190358534377215482330962923275262634963671825984637003914633619143396330500521755888969843386922843589872134400996113166528653861650963770197465796117647298541079103250256973646631652580593033941058305941438443670583302078961092385000096028004387250797639227058729182855207638716095753795885220489180587608501087576665670950961102068748473102397688480068745397125317899151900803171836227422289946173194639475472087332607221032204172993718739866807063991965434685529724874290316386815414750536825089647609755324478912829208542640630837182428790314967707466436030120046677693513719304754091874591925748831794738661935209325972784637836372417065832634101495661541702552237720067651495419730409007777535110394473910436455762333458257497687020560780560125766474028996604483310845299656108458520836187635944075062965164082259016665860024741824447869072154938884824126520956717610359345956570059031363334002503160837760160190522749970822199550294007333039256459130986258366814988498652039570467430857270936255566922917138875176546035640770701881537448577626102002317298447304080275355918518719943682484835725447927289531637629163866387981244986227932821777092957191598008618007108755043196577493390795743913791435300045489842318803840629056604453508622889454329052961581308249435966212373719648882667006349214657094779879673766929203239990406226893937690672818422017388165317029813987140416820890222156353954178254095413385973580442456560445558499420284582912636669611387427404451225546415356155838383066957787260635657953616728518750757252485659572480629089199805995107320554322842323926689320663451184520268687258689886344606068388694479162354509096941490038433598847203104301976611951445601852362544266638679678290075412941302729162013553313728522646010957992606699109069616544863135068561276755095781547242671190932783722064505309964908887877840158912914910105346231151775487613772792899879678519963830591786250997836698271218528501056595898076691114631296567610559849673121473718916782416581126344147631655121086933981180869415987776601838722614534041581254100451763340221780549086746753938766610289735053241990894606197687789239665605165716452187952517064149162738755920000811374455502914943892262459729586085538415828908694331245193074260696566568387741004970586046250406779678496790295648201386486985620162529677519187045200318621917855086482423481330608007219543743506802384438536607353392218691697424857241893460152387618386782325153321432760552484142145781862136735387766492081605376589501268788700420050453317070218115339201229440765302660291694287227700950440380765107112761096963572158992801291875003909086676778623232366690994533299491222168137364267573039455654289904047646814229327801683590630142563153751747079457858925522910205111288353935603204598220411265610249301465496049605100661153637159888807908902323782288115917266030548928229073591717694655741521631460966838791102199409138425309485441867582737071365301751525547942825571779776968661573074132570848279551828767121886018701878619280272422103259889312657193875315049837541388659071098765055026282156387486107899591956053135772784100496825157507016394803644582281562465844931202245768097460360009083034532364442320183540873202417639221501463884395812838717474792815470457888288508076821945174144028105860328866061726727674515030087857289847427613927570162848467465868388369591904690837471560863827694337872032073339132310877824074716599328692954368440290176778939622098606562704309952427724800739407743083724696349092602202149637692306858199125713600548864386864010917928499351492615039593355117890366131905372145092198636688161883816483303851872238717415106454350355132051773548989777552757443255371566372474534435441848412809716879074979241665690375961387244267989469704939164542096816857631992943353367922943450974577981735513285980794037989658748077626750133198955052583318759656463244526191339847597578899938757558196148864075073244250467261088756301070340776077937405119970413498591233848696140017565253179511771575795275131945857256304538740165986955527162558693404651982237870681250364694679537863190584566503257017428760056979496904352580609209111103053294614675377385059624280899965796306324467850909780831489026318753391745970785291441580820547774726329434556660527022852038096530229629083381153469692319673185432212788337117250065774907249107252485740348419082835779774814914168825271376969001094340761377648487418731698243293622743693716904170881810872101742928109037100000977309557903344136643273367808231025012640831073700517532261466072965558652756539975841935786806116867047742157426598876286995997384905698693761028030005126905217313490141907445119240485586174004947125072513293761190201760157186724092851713785477603552145995848354307689575140731563893520272232436224697297570996577403366115446408204985059861276880231146593632332116664047060124406837360322379955207563026996917043872020612169132773506149751543096030902910862068818208029741138639192386867608762741997860087946363183791825619263211533747157596191757134157369834295405013020010499759058170439698811648143980733751968237686573164454534211394206136959587926718539689642312494935570859665860568612537475919659068040072420100618936747953737753705749383127291409003383837688855841053309435892404414955527379658360309647135313289366129538476897703162917189354281206164435348255552192776966124707287270272355902245433955885751207009741227994192134495378305063561634794407295832195458144059625112222238732508215922805408792621363851812950739715101715283572373388069309775291979566994423956314498349376967149231461962778062765502443563061034611737001968423504862603967799669087117588804859019639157112753414649335925988454052986607957770870482923146856099244325494894435569370404603972409346620158075409396512099348903782562196646067345376443663877635728814318418090231549113721533373625163581574526840997161673119389664334579356556456354401159515864788956168788481450985197215201467974181561001940631241149619657961920795580250374263473722428593232378725810430245637202518132904531251551627240821059617789024316527079137041828262423203999027718050493278416463558083739015666535614730630528564883352138943172947828201962484672894006650945217851258824311228840838756059704734974004156889921429014908926432337401389537678225680966329782263719847506238362967059541391051250329777158461686302483375117714795942380458251770588312881492313634727768589869682161697321291504228940601873619348996292388777724630285389255078462577634963779959329989151426153404562174906613363783607243267517210079578320766293154362152207280832251485579899573303194771526628078798007578233062417352061348072159821545393566054519332770028296707118564344742106657936278687268732675617734737178056510690046607762220209746122648008510436643666435541902320142352415694782992027493364828745928747851672282706320889132159909846882540327746849007379809382050344297894224907120550708900023237802233950487712523780018161507312354618054223609497536035163494093928091032767640336242711088275287685948003533785270118743240118979225026796544540327468208658559416238357927216565224536669218251472645443651889081645564816245005362169954201386198950135410692688457725430323102706392241999820836165265276591679465060858160505568568712438796347024605304900308450966553605733042168429732916370172195896437974642297090857585959129744911909686268599809774528624601994610190665878857027337811884181381233078873788158373359983366672234669655911799888726805731249876450737363254821569278028649052801255401131062341913855820271583117070719273865683054999663069013111249121297160457447041240423061246140642426490959698720730873511722072350750404737742430572024048268685119133667530568425561907620950064557291163632179554525056907363270277399640559645834440273363853661188000047234146519397763559239145260412600704968936012028106894549688440479900267973574869188916898200795990111065008878815333729179214937996646495852784883698591027255166736443038004395574418572899294370967551529143179055369802934328561669594406191593608936964899070486635648836640763029576597160034720166645043990534279613912479497024231544925793613084992394121484803964852738532840786244112636713504212176390740168740010064318423771759800182571206639184134636335947786714976994584189825206727396176883875524645479643946415113644023798932248203117158653341801005086972304051184189910711151723320637594773150678911124405222765005192822545537671036184314807662167004590802562833162356684840697492521011525880952899271472039977820122616771265024357322419282091459744940443106332422973501916691938329374288973886386034592918524051364182398592764975688780001997803671401869838010577270717330444418407603271989346719916686888680593245148354943447462721033986270080485900155124951082963992792987842114837857821508811758170325737210523836242819698681325151023148163454095321894993683800138795128096101389801313982043237028325779746911915430218574372464407978667515942327600656822134915485630059582718562671520698991302473350312566427091102259532338314893989689756822401425548363478786325343080669902177859287335109626530228527804055908960006937280662896796945405843803882948848124047942281965182397536936457929889578255794210593948378679524919234465908033421164868438416051929819069131125432441300566879775210550054157419483806784214653243093753518480506741715472803332755990227351462034161722520909347730060870649660727422118067613395865270827693082504392270738618254811116949038529595723094576904555387646766194045214126185045174967881222625225420294995105078164391170749628652025184869718810057932904459780474128600044356721564987537843310493494303165385746459512014483412377153293124606805820556680644340261399666836315845102022850213187298338640077707077917127911385849411484173150612304233608674207467083445888214784873006838124326048603420520398039994672066938235732542051375164474479235433550682373983123832947238416282024613236150041949833072908669815550674617589673248615861702017780769184080195436695753443836861503161723295315725658560497271219460777837509040504799004521018029935893811387189517865310399566336628995254428616900954602946642481835104052723177763215261081807631624720322398654828944688261281379543513838399159096503176110145561673340859375841223007298962049354231684731456119013370627451653372101952784150843366485718683154707759266001380413461198030059470241851889381598790912932175523398760753164627792920260871619044331651516812323419790246774100510382849642369445921137356415332559100571402192386504324237600586223716858020906861290616574468722975254000616033200134525382789948233703766721713913420053378522189534440356774167756989838340371683053339160303712468122195094451323769643603060107933336317574884600660754013122975875644836292687447653875456366671633406699749727233770775602930171119873713327502029649301339157436902586985805804661850651842865010512710599579744907900725568864758808468315496153957143231085273655909832339900927873362328571917762632399121621719422136842073993822309314300099352877919729663183063706089857543103711226019781257589533875565388292807852373328379571498654743595708116126805997489585227762613411374287400898540454081729983600454020975504859445623078574230082737441934713309411334435977095406278491948107490251001075326160260816166141665828764940536675366409103075438140950942363295087616474038594568300076749067398262609892149434246290522082284867369996747369036618212558758764999033240531377456820933035653514739288807506785309262157018155354164246038618753605910751171596544451629138375154996561231768056352944122861796274432731602355764359001440423701221314110232709724507824830537580539309136187075390125804621374052404104186962215577145031687226391307500214048177954438873320863455884008371509806523844996560156955171721235083443685969318160004631899389556155154887502954567874337030723431693153231859698126685897895105095148228879264170688790144046095670747756454596689425959992788755978477536636909986217025002679023725302120269168121827137745844016745136986531559713305374725826662884442853078675832269357444922580319812405402267749674742781956841448786497782251691834976002692470785895021703704858388868515265760165621177267080605919982230358195653707487049616510340265334858744325169430110779016508192911580225932171227930158137898121057272065802163804143176177861748042060613560746270301387882517734888125466322091023046199189071897531864764481596203251883661383342557380251629906535720631765398761130171689454545284542849138949012752571883712193005628020569517371873637657312815325305329151583778151502917902733190305271744684958622121010306471264222608732792916887491000707158866999254047913786054611810141366817747429490945735777114365311619138196776056638249387208249599690279274158972264263533482913699417066232424301052566108557105882321860415953995261011470246610385777123349945013365720795738329033328267790338461440694253915947579607200765511873466671258279119860920470033646635678259287228565899281046026195224102321794080074560857019502214981683804045378001236533286039783959384004974440166902266486137702679291194779601542349226685477920055280270194687371379891364308309741325341794454848006333434887621180433722346253849620431677039433650809755697980501277777113845268685091187424823340812151151597036955214920274705302810590187488774145471376334439641472564400585203279952036644952915857362994275837591364735007137899752917263254850243740999519067606448557348572716000678300808919766778877206053237007230414810898261174192999230284869838903138569158526989803738366062311867394482801934669491046627645436363276196627877141926295125717141746847349260139498229621952941926164899210479487462540920845674239802557539445478424605466878288948565437238163965174286067026364536764787585857086934460845630429301475483163588819083876568053843919529815202317165149427461863268394120150501380274794164226549074722497966714770269857429653319371853947557581888330894630187929986442821810999712432279880515190220225825103925627914262396261528127570244033580516736900703944157759769468332776781478170997801067263584947564578699956407063202560483281763769954234650000264770866320237533750709170825618178829121555348484981912976077434644897683103996518259302203185739168355670343119920701453229307854524542846194775780342354148147108371829689841186079764946697999961540609342917861302618236089580266302442813911419612144783451058076754515595931540231562270809029227064151150119300956423560999465999653837045524948746983692965835699733590149297182040483811117450935081926236794221159650071490425720958495747811724299488339537170111127932294679341722267132041146536871343639598304001759956917134651127380387343487435851780856522271135939193895628494326974660699269244961652914573600667083355775273620390457210060853612580746188269631693582473145445281407145308991224674238036221680829298174220621860798197137043727200723464659535963188623974496505669454742056367794214902540739842325758539378897401139581409478646694538433617227363033864822552034428500528123827744206093078356383899501146590774355751444444996321829960061275708179358728977432374068967803416414619266061210292307970707626315000351235693107429383685067164757433404492504794750614444438344268104672144761836840853236978233062403887482344558895359341454623603202631096561293380806547311399902028110050717415339231618537126224678146138703245509801626065686426890214790932004293128602116907695945906954418031458955572518471438409956497985277462584714340876550751083482988783963757153324906662143577507370210340928704211200056560771784033654183722097707039082998185723278388513255915407843806226096942825934133693270436473297298053131414410673096167498440524501223865224580163159731941779290670475905774711449587324396052040903560867749633607269786383362511207050385233066787151038662750888189396417820848864094163550696516989046092304161178546471108800040333177562861096097669402728598019472317127433242097596374209926949769666919449022650020469268773013778291584111777734801678122336199306707466885245484440238800072649836711310342917062136424156843313918053232383983078468123706545170731937525394324743353102231318881796761219340335058271096924509959581007125101692341639032718526132731465816895432810824251550267187134476525004805214087356728063163982776436973281937480367061490759085981747339946738833819701910602521740453589700326016152713271589647731441404281010739627169860256321696918143984628976348066263640404724742103943068890300262217919407490294185056643193778672788621514872444857040570417491743083668801820211916799180279149123365031855739327527333088498161734020418254440569737292101091210357772958736197407944977294083500388828156900799618885648926774368028577963627085062949536784319273455247935719907179765485929514896555210085742609479677331538755145823312735881427161972974752998566400151194369472948682330746237551435896015230533986496331433897402923227963168267620139539062424101002664413774030587496049713880031234957424411170400692461605233008783471512801605298659812776385852174133626209981186918938358345653057146829280758503052663152684412143145572569203330345681676854169401128235623310323455220016266200412727026684927816836926266791942439320137398200185642991418955464718939675339859727226028984577768619596135554459532721055935991298244358265061294663738057242475692460861527669477565237601695691691877575077509877316632375206719112645395824232996123929118615660776830180353162751919847202804452994454045882395557025233387374545070083797953533868365884599308144877121224106120864464121937933917213846371733319958318928844743660588628753216510072394367819660276153579065026923320200465135622260332133326790916912968206896304595976989601528304064458567050884821874068569327242388967568172502936668476374070466511317019575209348088040354641188892289787348206240433877593443377351012788990782745082720418094253843066182615519009334935552955266684858475485494938494967552976557793389120050509603720244080853334662123762719793723288604484467147679471941170534997419483368784944658587229478672681938138968282221403428105437551913127361355898698289624008368882129842599996702944503383544658955991070462640172667935141602759653551368815776369942044583995137647829628663131001221231534965839399461463026651772976511526811468953158755101980388687271069507127424565908828648868313976235679953426838583195080029733092861157150407331246858177025938607115915623640069410010572713698395553642613995001507855911638582456822041072917198751686674415946936002316231579585375014210379780938502025242931562025826376153063786386677390155167472847163910141829719442198145128316851168493735526463730798576431768575701484236408740789352058681668788075735862455978596131420928977008662021317085139495607926794154839643638696960646064044825882368579418247614851405354060662705787252435746949859486068833695557311397454945200620586897382572493191047700347322661176946901552848619336843851237375520485128070259328150932433696874607136164590619330725124114051944408510453107152694912451523749776692224397142477111739160271001055661493257893822390736623648614862400268263497424561751004005831896928283068703198441436303294281620983292409389164251515600756093175861284494043497224235994824226709698917461917863787094372023594255212399834252267422936777442893986231106470680422080051493723415218391429320112757538538152722308570014027075530844822501991820874404857371262082276060042328948543302599518455335980198371870313013246335949291371848114991467063678242040592349751000085649630969728832751513083136617133164475700823575348532001183443076306074233894249336445788755808856138636225218959783400429992989436381421511961005832721133631275549113641226868484408007284898058005197058362236770869886182300061523332360237274414046733500673667538411330822614792668451105454556192218178234854687567453892043600237068992115945877699734273688549462432595826857808760858752097166448743979126536642225144766853882164897991219139703135886522295432375281686953025665774373025556138491930286406006798907600465458206946206559399603295541764326024991786904949110480071204024813493511561562807263177679249625023722645669629485182963500555510003335448887796367378236138310691157566684115092107052582867873880273394459968866636536467871590867185180009580075210563577153824342282110770314631151974145511413151112232582017775144045997964536000603811954043472225003066247455557263394762082853850116658090037261991247692211882538771190182621125886615683314903791497925118251236601408921425321372440272474308166026376566103285492314773620130839791355348313991833920577761293186161487443714546368334266843700926550269914013363603933096481736261401808646916666943053625645047277738712426916089523675260346358278950869126866196618323149946519669426092399385520071822088538968327620951347854373933736478358464833341988758379440954439546160099695643379929492941368487698245794174994884303415895408845403336262531882986477376183597159377008643623592744228955744851179963996057437998203792488734880620325546390780235577360282627691738879284350348303931706658969021190228577090613214548879403331887319146436620250981113501638403068994314100847127956423998146619152481508119331358228736762915421760355153676599027887866998088313007968660592865811707769576845589411213031205772873869932186264820028102066026067911651743403664004162278364920630216801991357759335718017897355535376875992900410463543711577972110530813339952464979263630750562505388948802268679332820101592290211794529137334659869207531837711768969445037532706728557894994806768360107989358484976663557718022193801196136210942917405780671537338138341560189293146145018854550800490363261289124650531215691866178661123946688832836387910091158318626391704067701909442417173700506691173895530421379380710863913241518828902128499464067152291584149084550831801244343608041746464087808753602870085445324097573012361069010422206760722613567966626449015641' ) ; +test( macro , '717897987691852588770249' , 0 , '1' ) ; +test( macro , '-717897987691852588770249' , 0 , '1' ) ; +test( macro , '717897987691852588770249' , 1 , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , 3 , '369988485035126972924700782451696644186473100389722973815184405301748249' ) ; +test( macro , '-717897987691852588770249' , 3 , '-369988485035126972924700782451696644186473100389722973815184405301748249' ) ; +test( macro , '717897987691852588770249' , 7 , '98274117348321974353044780928022697503543794108996224149902690255438168118107927224939057895356483251830948245334782867413814443266637838233302304694183773324275704249' ) ; +test( macro , '-717897987691852588770249' , 7 , '-98274117348321974353044780928022697503543794108996224149902690255438168118107927224939057895356483251830948245334782867413814443266637838233302304694183773324275704249' ) ; +test( macro , '717897987691852588770249' , 9 , '50648270951104922750154368051586870571131493195253277558448154467572398239992609359412793847046346201052022004762903721738077206909720257557511103348958535839847634617934011064335949101435909492826285656394536682249' ) ; +test( macro , '-717897987691852588770249' , 9 , '-50648270951104922750154368051586870571131493195253277558448154467572398239992609359412793847046346201052022004762903721738077206909720257557511103348958535839847634617934011064335949101435909492826285656394536682249' ) ; +test( macro , '717897987691852588770249' , 11 , '26102980312143604580379781426139335779091260301758026221495303393196039344305009624874488017227324790317412920525253886011853217074287636537729904547128731845728160914486066244742089352609334182138245049106257642108402738856230144495829015803277090696341313660249' ) ; +test( macro , '-717897987691852588770249' , 11 , '-26102980312143604580379781426139335779091260301758026221495303393196039344305009624874488017227324790317412920525253886011853217074287636537729904547128731845728160914486066244742089352609334182138245049106257642108402738856230144495829015803277090696341313660249' ) ; +test( macro , '717897987691852588770249' , 17 , '3573275582766550916421412995798134382789703709314385104884818112662852238582986404829924618616654726489613490560634610856652852433199412781955936605818387336430363300497297843489165805533270350826963139013723342117143973258213022730407788251463239302985363622895194233407234360656339752537037204386160966863282760795179386609783329264325715584866656109211813856395434440166721187549981532749010960740594249' ) ; +test( macro , '-717897987691852588770249' , 17 , '-3573275582766550916421412995798134382789703709314385104884818112662852238582986404829924618616654726489613490560634610856652852433199412781955936605818387336430363300497297843489165805533270350826963139013723342117143973258213022730407788251463239302985363622895194233407234360656339752537037204386160966863282760795179386609783329264325715584866656109211813856395434440166721187549981532749010960740594249' ) ; +test( macro , '717897987691852588770249' , 22 , '681365581176156632412753534374262781125282012419825049087724194682872335055219639396310501297264530289064963157507569861612948673702326507540305843556830845144470742979453946547899015520738361534628988759199748641145113940154534539818775453262688963129311220968303038658465790258784846759677427047794151246302947777449489906933250186470399660798890218035218608642881019130459098257182422713814006185934129977355115289444874704561056766143547053999767907222964203241196702396756209771576441224761301925355900901280569802742001' ) ; +test( macro , '-717897987691852588770249' , 22 , '681365581176156632412753534374262781125282012419825049087724194682872335055219639396310501297264530289064963157507569861612948673702326507540305843556830845144470742979453946547899015520738361534628988759199748641145113940154534539818775453262688963129311220968303038658465790258784846759677427047794151246302947777449489906933250186470399660798890218035218608642881019130459098257182422713814006185934129977355115289444874704561056766143547053999767907222964203241196702396756209771576441224761301925355900901280569802742001' ) ; +test( macro , '717897987691852588770249' , 24 , '351160503938693614343626853747071562171016188034295260095490111881784318374960146045355120758560422119505624375491533176393589903573845466689382216842197981277867514717013259791763929689440964343969395781792087124646063583944648684169111729145300510135702655848244592583122673432949987979858826614906829469635537237525614665196540272658828569629679791428934101079072719564710584542576589075082850692588439679596816834818341802539921621995225917260921044846812391894365530686773081140839348912145464664288336497209664739248364322768319800659209785240272285297767697234264001' ) ; +test( macro , '-717897987691852588770249' , 24 , '351160503938693614343626853747071562171016188034295260095490111881784318374960146045355120758560422119505624375491533176393589903573845466689382216842197981277867514717013259791763929689440964343969395781792087124646063583944648684169111729145300510135702655848244592583122673432949987979858826614906829469635537237525614665196540272658828569629679791428934101079072719564710584542576589075082850692588439679596816834818341802539921621995225917260921044846812391894365530686773081140839348912145464664288336497209664739248364322768319800659209785240272285297767697234264001' ) ; +test( macro , '717897987691852588770249' , 27 , '129925342856448988764251542089065045786155911790890516647657119087489042404899060228369392822075223183739765014052360206502536732276242266222695367972367328452765284427361172142362321443004910207800039177476242301577150613859831776093328430566500496443594413224371824361420410550048411417760224137393585174427565041635390932623375118187728586008978789234310569306311929614122033949249592316841971560046372431039697669234018577505272948749285774218193495971402810317470288145379703055809020802321420732619980008200661347545521210303094880943536506460031092224160192777095197322219385161928995729071382072812239062743558406558464517305710105484249' ) ; +test( macro , '-717897987691852588770249' , 27 , '-129925342856448988764251542089065045786155911790890516647657119087489042404899060228369392822075223183739765014052360206502536732276242266222695367972367328452765284427361172142362321443004910207800039177476242301577150613859831776093328430566500496443594413224371824361420410550048411417760224137393585174427565041635390932623375118187728586008978789234310569306311929614122033949249592316841971560046372431039697669234018577505272948749285774218193495971402810317470288145379703055809020802321420732619980008200661347545521210303094880943536506460031092224160192777095197322219385161928995729071382072812239062743558406558464517305710105484249' ) ; +test( macro , '717897987691852588770249' , 29 , '66960601081613218995545615402693600374639583627057873894478996761235534940521876203825851640372285281121028022306706156922783036648760227593129124026972625933013798555768937762460772142044797003957960219229519539565564116948220691395428662251667454449762970671596782912888080349684772071024984546225188460055852555657228531306371662448557023517396895942248714935653633379580289509781187157995620922388883890668691615375469973820302219060616733583757178470584754927697520205194864258128911605585342110346435691476086856952623133602717988980966508297658793357400697431392332924229866368079543112854041068400435054566433206423406557876970185985505776428441038078323222858222598473938385526462249' ) ; +test( macro , '-717897987691852588770249' , 29 , '-66960601081613218995545615402693600374639583627057873894478996761235534940521876203825851640372285281121028022306706156922783036648760227593129124026972625933013798555768937762460772142044797003957960219229519539565564116948220691395428662251667454449762970671596782912888080349684772071024984546225188460055852555657228531306371662448557023517396895942248714935653633379580289509781187157995620922388883890668691615375469973820302219060616733583757178470584754927697520205194864258128911605585342110346435691476086856952623133602717988980966508297658793357400697431392332924229866368079543112854041068400435054566433206423406557876970185985505776428441038078323222858222598473938385526462249' ) ; +test( macro , '717897987691852588770249' , 1234 , '240666810925796631497300464125793793876153875629096662520743987128655138300518806793333863505002370424150325835897522997035758513508393749421313311380386678245885529902936330574270897824424068780701595312024191583797781168159472099893770860328570371993646844140203799118143686616439077080118602046330501107174223757814456182746333086177504034894868587120939461313455507702811247120286468199645215838215144781536578745753923838005482894245501661797497042343390617151204343021554518498735362447358070369090432988690834865403291509113944458407089222159417866640525805032080821319406442026747974929325112928921447323232212274973452975883062343094212146738595192633791120734889354763869347495932575155161944862722200405955280366430399276362677049013925041871227530264219143440107033389736110114624783260190579707152045014476353193813168715289380838132597179842738854542064339183902073367485289715584943627672587668112192162491400086760878390153498140343600949752356890781346460139220027272654766196351251998753435700609187724419282733374517073505387635776141937057086008339977487598351396266355557385114078610220987097361567756363195532914764004598634407992908600646589647778700597919884751054929681098369460031512377150901578312180257824087931889292083387179002094560172630492173743471238348161722683402811331621904068461649853237649098667186022410987655766907338482317060412259815938817187300402820360378490149991171370482329371650505043884192332467954232225473438096361196485730615702706338896803459544893784510590248023379843299267561024474106199710926586300140256218142748793677805122624858592543944305974549597571554026676016225109087448889480206990407910658105566060532854331549685512672824252906121631110818833232354043403137418311925998804066986754875440423240222092764003746250623404175411263344414954113517360947070716557546634100780648355973690014553189027477234402720353402501541699079073208241754265407813302554719501911786154879576504690648777330790234360752380718909924776795870591070461878764685781345393089291677007084060723076292423331888969906994889802559722805557544432185305096822014262735051471669354024897723343139333199330147964590265703488059466191857192410897868609291384108526636429139154008874646743040881795937998168293882623621583556584500036772108578773075747899050834512563302362032542587715210166387236382275419681547020073143476402676839032589356933008399060939093631291937107000000043323532799137849647405096232083364392703455257640562906669605316805575467472071569944146598547468221559924113348400144610716847685364347467929073894879899123491301645104075537984420168183636199226629624957989433534137128744185230344994592856898029628268331117744171243766865397230810342464227680605486409079213386036803957679866952104779315664126405241076356017313310476722815126991777729855840510871727519397893209033487330193378894526790670497601404262388611693537246084432220039998668497909914891728825779959838738394310285580938434539221810042937887451215631212371491462951157863268559393019049906492412696634901678674798328369463166268199126370427527431576741235550771195727247585539256417952853329478914515539806021976444112084626581019338193239617668568672517993467174255845823702683834750228698628538106052353376750716489661771727612994518487692989696065706319916267876683157185246663635313221904866416368381426519462074273529104434353847460205734702566140847713395645548499357551950806690743433954202058581687009317012817649884159064284249335591683480037524895848927954651846952405664224327697084573143825212146169786019851375852570935645324673501437526819689862546523710166522763874255457046134768878318504847569562740775920029079242062671507739909787305724552670012633097279820790400444955953186180036141498111027556284782611831968632960254971585279229009517389124640521071182508552930150093115185298823230740659868195268121798981841121508518238922062146832778512233130516701388382270437021078314304384358232872632935033731255504313450018207186652992855974803423357233611324893304082721355054709451741004386686923054310723261481499154665026674935888222845457736324171023246366147102994195305848085588996476494973007973902151008585594112156233214360569556745482837925015827621067498561246812344514749188513286706401554080345967322077722072126008109427433431070325726521163012868148649582784383995723396360310319509595957738338411942892357400728388524308685812413893999404967999249813865349937751377717926369301101787921984260122186159989136656801540380770978320766045936205592959488163833618604355519117056970124007977963289037930079739906574432060855963578944486246793175242282673514112660912407087562188397053739993885193130818225601480302627529684348527769410385079008546741019828845532655444621234451156249631617457720152180989156738006670404506338571918208165921758803413253593685587469101580701192606017766650438994704981870117413061535622136601016979952697317238276873256779729419028069631432675219491767318800339045855442030264560075159056776340091166641523596359578961807101748144945138318607039052076486075699577782685718970588115246184745849474239861848227033647872319200256588719967644217877454602724612457063846122996574940120482768446762101146242787977449369937867250832112867230692912468970042855717280755106531667961937332446742078258774278002352847604203619178315262206430766732415004556722421674647346648829974839968356832918027747760706008251337997576672550889603071310089578634747901944072670071985016123486885045817879153495396347705516599056944513760289619758242073133217108261158438678792867348399912643882264938522086425924074531699941057823129668543509614970599670225949760759593973290456515031451150061095408009491932533974765354150005121720734711745252878859000575558573436139695813170049848899622852245653141171375285116196880631468001421360473881187149476805269342296424485310215470494796178401944348619754324798206578015187379609260920882768561974442771209643829629212007051116346637625763873106848673476948458383017883010996340518563860345530523780019175023658557801658436627673907676975971882109751635784820139654624656191522441490775749907596367211611579452627181067685977845460985237049896675479606151704752856005151770161591738112961723993454693092539303522485285732895462643804740701516376964927670122135657823916458074535855817547513841507607015010962514867231406668733574660708546812140757605323461188423370665178218323843285796646737709047020502755313516962625148241570458025214707284812497971943815765595261077725596928727447148413360293693704268976245064190940961850889245136042407154085469838297857292187347035492359540055492227822512458140269037567546119976309595685267059328503097802601274596051953728897555043442182432638912118214086596792857025735173692744450906559633901069848611000152694981799908562674080212673483483714535683816021391478836663467848746594481778215255545090822995407416235269774848665232107297962031453869358953402040347982467139283098108055610285820589613275368865515242210501491361858362122708451547647239066214844062386833772040444917284525202881555120247439897055373293814403955325754500816079489668326796664509455821614956472480002144936394671934338050270783459361214210050599756870439116283220868124998006625761895550396584389321270476762755086709308051601531689562716830791751872883137993455070471233464948461931211369790177531373113631239997994291418256714478265196669753238257830553539691807842745455955136875773828554605336260805640377757640862870194935776092004134130289520896834858656317913097532957724133151945092000859020920237096913664009534675855229755344172129957141641791984538395100720317980525185769142781585509930975604069100811643163009360481907738801078884830886276286316858755498443168347068032348883021378746194698784811802339515331441830238719175466597762050420975691354490653471436861965025398816127746666639354864324232964949049300538005293308845940271700888627199662903120034287206034687813252949705816491402178398645719387809539644872118409461401883654312922279080211009210189799876128819902719937084606802972639337531957278291820852311932551591955350790335928152884811433450537315845604917323956883583239480347219971438941586085711934485815121967398164101784083619826265891401802416571741345090544188799381856839432343498457496360597455526238460117589115787753968612657150077978004530794321967803330389249425352563744925321708518378671586645666604614530902858059020840074105043307623670946950043194604176031013849727052783428735689851667778432798381033674827978887751236650974118849759189503239625343304532523005839417475498961072873029640889256489519703706344292253527801297251124450502273288023521577486079679697498402526688946738210589004011833446500132651961861200853340654900269802660034733678942996167533210265105504648979731317667399933165040919109758988751189548962159739945527299915654716346246041095050960741515495587998776985363865506374140224005340645853795347072152325663672271845064723399857372941894460100333264447275387920605177410030429482678126703784114018103844023345892034742213333395468046660012665242882251447818527188389084106839211601891516465629590896364692175169015105701572123182161899801710734441225139364024469426754491100056297212476895075865513734972712990677136692220035091504362225897411284355159962673082264518469172649285965322881981348609178818294743174542244219819932183490365756919330710479957613508601495497295676950329757448944977362883166111823279769434700959568955927643656859063742327008267599164937006804048910677286568538933031439840564237461535941197796390759052457284051017778672694027120426633268111056448896881308374127555545225553090822535510692077989067554686838662757792829768851773704480230259292642841141429771977100764471997993102274545765814837384547498350869645999651843659166200886176115555346289903469340446739207010577645167542297460407137062960215028382415884570633157792532691792641314278905490923087079766067798937780659109451731519734592939579025164926515523248807352103381305168229367358321432773551392789398713507962778942820119469523225162863178680183911570348027961700553229115316563272964376101119188825605514991804081027954389921141273219285131032169547368944389824308436381941175515798111830481000043636844809228835704445068305252750582078049987152297826581119584963878880864201441342341314647264252390676175707582693479476352854352886370525502607349886832362596404647139600857534060227964743860211405500060294329186630176879724051222152101141867575359408008501674175606199047463432213378831599134528934108281929480497040842200684432006775368915613194065693056672838195707429303679749464784054705434213357415294902116744802057352193718342238545126703326661042546563491168121691269341550977021406438785288342043569889077634089317033122541296230748114388665029044499469546397108299753200706114193470635536895967048169021873576306364846257373205822028138269759764442484817509279075026743603019509097159849066563284407999202539936119877761212471543147933987133791650432393675308321559611393751092509456575599446737432047081189236910050329727334141146991725988700140584975269036834508080148636316737184199462112708124889925362377529178344014590919552819769657577672702978011641143673156015114065926314546589192090878523676668017033871729579063980669673546335286849239147941679867288782496042348838505520661208416542384402601836938516863582808398758530009389050063886699985783925267497452701039388970042411071173551559121683897134217799905956381777617760035612136975496448360169358472611166991247066660361258257792717955895802886807621142240955311727190733860080248699104145339409596193747533219052958194006816842395395133815227958447183027408201887154248055155515252489593725880002915429087346780489686173993006485543412786317161927405570384085201230519902078033355645726810161924247926196020315576428292022629241922920330634879366713250236205513546588717366123436426532878032863695637071735051269224304497931038322951508526569846253683590423751042200651378810558188601895181845187598166177418938407685219535673829472096697071612870362277436920342738049215807079089141509386167010651751786772439419974350420945450780317330425760939076658378846814831229353170269675745570687143370733413098798744099031911520221044007327256897909622230050896081391104380973572938318409605238511264413423963577109959485446578175113776603615777667633293449071495602382745493460804765597670064823587149295646560929042625803334777303751883329502685780494009410515987822344496036156411290474009548223625232450188758230491801781290987433426377664288677071271225318178134265723090953908487368210301890173799337794414289839164334384499838476694064042562380923392170814007209797114936223969923288492450317383650369779029731134714434936391643766311336738629884184770965675076449262359336759950385687723231779915621937147640435620959355327348891883061403815008875737737458441613654230046515389312374996035407943181440498220354304355266414125515658969508581407533490313522890987856883087879602650008064327529989955508937331955239874722401238624800305487314538069958888480061378318398494570408743929545890698144755401436645575305635886766888309290821752239252465276109182753977002117165726763101082508643896734872331680782581238479701159334042497390606376542941582331808271248759018721187949059390620081627947668715490802983617888543466920624132979650708704245244736734577571335364024219584348266021595514151130896017976378599765662306270194051912298827281348333359149495872248207397081180112660679500488646194492335713944553578485524340274065812575443967506816413669283541021458439360404721464264498869630723885583385346819805722244341238149657763492548458459521747402931332148061021522859079768700468052335856043104242388423745990751764752080395046941015982884875151539581000878641435603583824562615084914225729901628394177372130985466208762313918008648944381048427957163858317218102829834343833633544901126931143569398807905684970202348964194612275298885061923925145525774876352222523781858372282001957198274173098329010279847291113009852613678253123199322917136025127117154756978089704874006129913373888341731677935563427208491533468982839070555222905600716758864558055015455443368534003989339266991496574749087456141207063618250411241902141164015442390891110956633395370303166431966298954503533779086717784121585666343471909838926386599682823714314774096149220614537617503626682222182615668880281733598355987215201453863347388340090921698878129884976286937514133684565405410347549261471700192037533086493793953508999824708254409983739425082813111045769624535087578645427477116700686622592971553298713236705554924227547844058030634294043977065066654988266829751374105278390824121371044031181008428048205223923243651098135005092948487395324912456217052331950187603567228183420265978222659169332375919592362911152011838702189535847577763714114425190514299564739774757564037598485982927812147173140747827430978393017504243724684098500167685714749941846120533181791178220367836024729909146669128836477415610531307171288054524223649506374655503312084693854015857030163886937766181098823169023181572231477404931598733389102380674704591127778547890467262756173574558080654790642471369332640892203135294330237246272074631760017202872694312963325722611729402358297429077465902624984852437593479190867737167006749083009854670384065327519801302083242691293439616132893416660268947919201637739258769771607084518793369204312869826490193716352930819450570212844033786667236068075375941453964216107149779664323628747272497685794971849040594638565097670630010455310220514277785818284186463200618441748478788591987616681646033755321959251953987293706031605827100615706433378711983560088154239750803537349035070283423517350889381534886372817293834165533055835445256823942303051891255521175486827650886133221071633589921707722114526609240665260264492305806982431844042679579783582551609283040246523428581845720374540737897789979786180180579009825935175015723992444590406056732840128165816199908483281974729283159640149821021618151095300252407271226953926728439712096665201813821962143089789720545389677608391629805852569311950851389264151131224953921752017840922075938093985062781184787646406285721393870539756657767030925030053022461302204093227393963491255643017235236360807076699601286868224950349231983608760919780584266842953210668067889511328397050532424837545546721403509681669483144282692231815703147470176852156718005759125673967988457229048839619145997585270368102435074595029990094324102493737818970275642575407600875588537013441673454455861497898836728065291478392070865090189959309947742444986923526745948057899128034232868017159368271694223700039666236730894705407231009389857561190687139334624948051152611495443371208819706799382667564652218904459544669746954713753183826624347921466724650586905939136598547335012617702607014113794591546834254696563524548343500981096958481191991323022742758572702244370470464413665803392605126994943740602380225661619992335366449312159389272554547255369597536289533017879667844179574297853538262473990737634615419535991688218597561417950967595509116168022993443293531295365421530990278428579503023488689022645550899786226625323338180515144059213727584521215321722089993299184212218054163465777614637889378688685803879328452385390951350548924489120271418100487678768868428228212387228503799518279495595264908243662176970443975028752029355061454695157141184819938299926947437018478957044395662391617808375468649007600370172940115843761412592237460566795143736348519450988859101853660296226210668299394693230720927858276964586740548558363904065214488088226818002415057852903743836014126022876012254536312345404960062753442098036019060443237049994545797682297235099797863438436593216207403158412477892107575374686442179451430350704320791891708254315536860892520182634206456725864813704568320562591782038671811141093425946482688159934297090882997856490197026962532578625837338928755211465291529523683918247460452910194710972484675179153177104097104259910518268539520304289744878391349554947980543388976876106090112798575825073980240911865137171222653996955929253877954855333315507869969643594964229605539468134884245036416894025484737992830203554155653978459691014928198149428959910752989307071317377965664300905553289327994588549850950284644007080706241112418494862133916539297959029131158062514264923394985650739154621700845808120916284537924609624030443114218948985698358239949762635499673659005627824880546112922811671183977198549908295009183673236341667156736650377361061056737332063403410177715559814144656394550604447538215779823278536104712565326761405690441339115296210030702222989203489845948281369398678770779363415632864910236794328437692624022552548328392842615492736782204301768665965365930746241254165608754964908497067499545759985298460945344650446835792542841082131510112938961881927693248231120221756864036707731726487325938077272576650743798183544800139162905157445216386915371613768879264078891644381253089581539609558090983181521395649500355526541811118635730569046931361684921810261207373485062516626873625896376115969793729107031511621422445382850451172374270682693053568648031104008891817274572963359437128249991844891468313131004074851541435190896882353764875480896554449408432067645595533709041759932190996007431454089967656531249566609171679862639011907239936167049017771581006836981063193553563613522749187290893357797646951653930745484252566662895227296365515537656517639786730623586151975310765480540289532531601949395336304927562830700960037825411985561643821347883034995939999815320371904489018486314948455952559263146409710068471713259502647267478001977847611896061825935753950424233795977832748562746151379388667659849662204204370582406208836832264614999774576849343391530101628342373099807709619251009982948420174200692400576186926512032915961194241973580587141742017725523177905799155980685544702998175691236820149021743148908860959473955326805004843786317283255788228027783973963775307044681831745418957729607897287660450576165731690039127804414511168095180765758455897687743007250305015608713824106966239837615772559788333446260389735144551194566097856159222619045281993121036130544888850748533209105902290817972040683491743672438537427407555076754103740470470519996488106893988963679893402926779777315510136748292964498716616387480928391333727613516511458687653975670170800714203116160576633121381876444223289818335512535646590900478008372238152919598466400554972447258395277820369798167170321756327919408066285581702239995204777287480387161536727459448442509762680258106041535327214632697312513497219121039425133532472242095253942361432227842877340347922588175651734262339738440446492272637919578131157514237627203984698773116783796765212222546280365874311759355831644675241116934493294688108999510961605213084570721687715849450396639049106141887860856148954550750471455629931627105000620532269066137825781316017603220973433261333991034567108467510498624962642488699169465874363399488868154638948242465984577292633553735556852420099382096738662832127104872725881996505036610995572650123609241043781086883738614012464955179446535377004978611118562176293167638027449612637695085975726247778121052711332364566219200112876185845464416120363602708440087210524126961712756204182189211477418943839212507448032291316566737926226650207942465800405168687099249273393069060646360798873617365864441322829730079901581793477840461467290903920089953743513557150545457465001493281676469801544541444627173505187869563691796834575745981341826378231855942604285683577230974772727095310465725871392788376171498988325165587658459242478209763818343931715246275249033847544355256625769712507232847344158590312425822454135201105768865080501413412277647350979797597165322409320114702032426981288520271353130012171484594553991124856728942246176555811779216453894275972582641573921036716718553318429096852951098778309232081644343337035691135410384601765183315931601762146264393426528312050751636769212945201832547953844492774251628393141343106226795356284876139469403273284444586014152400694986734961594079272858809061960949904448174959103909564433761703907276125412354892775335876415272646526126192989549857858930065881045254576136386486138517438556555308338685607210816131204906145887848650892144421256413442786428159719389978047391109134257790046140655520758094636923303925473166438103154754510983147606737926330885845999568999353851276202586739695128035976057952375907156376600975164048300965313860942704588148212587962879654957903805340177854247259711308541551603503567837780970461451995771047865665783511661730311276567901518165972850520986636796137347177492175264790310493561351654339295597668712467832251955744640272444007155359474048804304065788982945928352532307632627576930665303670890426050955025688528627309916477125616012512925234970728304675990574496468777227069085170298364495254489068034897491392933909636369331527636742699013284766902371352506091776350995292002731244023865757006858780469293597018620342571723772179977093125789699475496105523743724832176529540068144093345882387953940656084217900519955099464578748726508611651485516665622261135808230656113185935758123090731435124996047414425279597354359574378856570913306377601759010157157490619551740940998388274502844305091669547119876233489292751989516078837544062423667004292912251992330172087279616497346882233046859736081564275972335625958254887035338484716664189318473872485695845339136606272315059741608927734938768821670382249825317380542046557829438761966527834167384855716224439462405323266438326536377961771823507569459750423103138290848070089339750740358977330113970497456562209782789816756431729085281442325129945131381329920983439892601873489278892739994343671536564003094063601168102358102060511646184488836555280866265439572865577916493719868641514516664261116535122724396782278955528978764063014169535540654859120299172230842177436210545014476071475600058330214022044195137271228882609806962913480150447375885450575324750279251402851061941914287093134507336790423199888450218824466412490267199774666086468918833734387337497335144015840693004008549890781493464193192460097751739334161380017888359443004786038046374825235310856409598367802175188078401652900630883502414596986630872311085261238505708931003788068325087199867279768495262956883650359670743609352716895125122349956601558456299500231541599105539315180746997839621279353395686142155700423447977269222089468138684489318419154262504409821198761325705465328527695537157420782082354078175035903462010430134986159387812646272750962009925857083492829567970790332465325289206689049063764087436241829439763284627544144883357167770069639466367471860398862788075053410539365200406384307372970511564096399841314435051459484946899992507044444836354985269418541366246616097379154763081470481918007310765539689731840724466167823996718641044946480569623102013135147003272739284086213587006083417239308558779132947952435879189833909533561483821067431049890268359556509392353401539333788301678145208658937272723188794578112686709909491108016192828130703303524780820687044001344046854958188080136806595303293237463476504011920463204562731540166037081435695648333493988584792808470211132901764592133330530980096778425332932212735837577215893864016217901368345444882023496497506785629435246203379531538457462340173890359032774939687844147198184957025212849427638320378720167398909916718917724985900920192030214246493573397230398365110417352778733527631095124650992710118667623539554692566783429394136221716928121159143717386855853984409631021985053790618629812165917024946228153251349408767853192940114553370189242241369551007994010028856078603666746043453656590118761983375709654169884658816846754918144899815282484040063735003947309015844941305847294632029009712335365639096408778574091927109550299652681981479767150215206743081866358869114610816772333138477417708074433283279303532825808874057642839515755856791048739006988848065926839028819778433988669939558066650036824490486884666934262276513630175045822348774690095228540301868104997197326328212569850060274724529767914857676420841256961349265084840795236300841400994212367633572991161913691050780025455347823394988202788101768864502813390202856859126972599856839543990159365234030538827346354126800097285185924007284964690706128142631879645458992663766048427439769100788649351932617465546902567125707865370814068813860587244367746419075848390538678832569432671471062986454254204755506074801888029161552920066319891531957945773273477214975812022453730709392776469844678661783580960787047698418293376308118134867752848112612486402593064704496634807094220104296663754040709636340404817455410880891536467187831977983640996849951650389805873899168181319390054320789631028913388232046260307268390249991322854583613804193446810865918674501358892715568404694072865540886401726893184784714501860380117604550931574048136798023258513596201002070068810852653249151000051456727886861808962487581377647552163976398924881561622659417081146106665646072744668498044426052522804636851043773834785399184804744620318835737108437901882030516095623037578335280017150548691261342926746197516595593226496924022045173580598481046504353473187019615999528239277638114058438415735028254220037867803763085393466530484468108461280119649653140359265924176687880191882252356096667279055875924399802049955390469540917907333623282921659561338713671919571784854447264751582461161121608220632552535539574811239491907977080055351867435082725503419467499187011802283659752233542349669207811280081047966667824818523441274660618920625130919101015888482026053951969439894711895548441586107366790258898741612638693297959237922447608589158095992135723952461923994687823650465896764883667052137155194576002906847524103760645387180490146865124538922972372819826875923731390254431637342915817358546048808767134126047097505431381328118991195760134187889545091844395783645096128280496313025953970498006602276712809536127205652543720418045709969402565206329936420465311999349099261495766939883753463147455929093001269063984253071712863023553747896664603639453734132845027589712104259060427174009223665700657893713650553018587778453891754253151543028835750947685193000377825566600933648482508779760768199662372049766387638985631992100720003474151721375703211133912952407983355924232680111677587187241552829353741946423917448296404338549819202048685814597880693735805572741960307139515943152276365487150482922514045581253293812970267225644349179074560531877646062461313500613224648092931335926366379056886844623491593907009953911828052093623916145953431995773150699039217050325951921320241782503621522257361377451082489605564890402097866814491505081488150019983296575499211151451554027366425864934924114301930078755148355932268605394003602081353485970925801149654213968714040128138987924299507789192344817388231539104117379617054404077042219865132840948934920651343894411168095993753287475595036673571212995962900134686846347787877484062299240326083529798662229832353356661104190733708040289237334415143318464007457016765783370725688178760684007631997290723697308539152704845065598303686071945621892934023531809446634995403272958391058435649685487542623361855343322082521933633876027950702259029069185899906864695622617535870612593631958372152800863964775616329570345552185613467025464216600056930056849030169878244758163240995914072907600096163507820815348734058513665059114508068178367617804243332753749239571295040855080590873111579164335770288383740923440579367884707497712423043388562508100574697765074001' ) ; +test( macro , '-717897987691852588770249' , 1234 , '240666810925796631497300464125793793876153875629096662520743987128655138300518806793333863505002370424150325835897522997035758513508393749421313311380386678245885529902936330574270897824424068780701595312024191583797781168159472099893770860328570371993646844140203799118143686616439077080118602046330501107174223757814456182746333086177504034894868587120939461313455507702811247120286468199645215838215144781536578745753923838005482894245501661797497042343390617151204343021554518498735362447358070369090432988690834865403291509113944458407089222159417866640525805032080821319406442026747974929325112928921447323232212274973452975883062343094212146738595192633791120734889354763869347495932575155161944862722200405955280366430399276362677049013925041871227530264219143440107033389736110114624783260190579707152045014476353193813168715289380838132597179842738854542064339183902073367485289715584943627672587668112192162491400086760878390153498140343600949752356890781346460139220027272654766196351251998753435700609187724419282733374517073505387635776141937057086008339977487598351396266355557385114078610220987097361567756363195532914764004598634407992908600646589647778700597919884751054929681098369460031512377150901578312180257824087931889292083387179002094560172630492173743471238348161722683402811331621904068461649853237649098667186022410987655766907338482317060412259815938817187300402820360378490149991171370482329371650505043884192332467954232225473438096361196485730615702706338896803459544893784510590248023379843299267561024474106199710926586300140256218142748793677805122624858592543944305974549597571554026676016225109087448889480206990407910658105566060532854331549685512672824252906121631110818833232354043403137418311925998804066986754875440423240222092764003746250623404175411263344414954113517360947070716557546634100780648355973690014553189027477234402720353402501541699079073208241754265407813302554719501911786154879576504690648777330790234360752380718909924776795870591070461878764685781345393089291677007084060723076292423331888969906994889802559722805557544432185305096822014262735051471669354024897723343139333199330147964590265703488059466191857192410897868609291384108526636429139154008874646743040881795937998168293882623621583556584500036772108578773075747899050834512563302362032542587715210166387236382275419681547020073143476402676839032589356933008399060939093631291937107000000043323532799137849647405096232083364392703455257640562906669605316805575467472071569944146598547468221559924113348400144610716847685364347467929073894879899123491301645104075537984420168183636199226629624957989433534137128744185230344994592856898029628268331117744171243766865397230810342464227680605486409079213386036803957679866952104779315664126405241076356017313310476722815126991777729855840510871727519397893209033487330193378894526790670497601404262388611693537246084432220039998668497909914891728825779959838738394310285580938434539221810042937887451215631212371491462951157863268559393019049906492412696634901678674798328369463166268199126370427527431576741235550771195727247585539256417952853329478914515539806021976444112084626581019338193239617668568672517993467174255845823702683834750228698628538106052353376750716489661771727612994518487692989696065706319916267876683157185246663635313221904866416368381426519462074273529104434353847460205734702566140847713395645548499357551950806690743433954202058581687009317012817649884159064284249335591683480037524895848927954651846952405664224327697084573143825212146169786019851375852570935645324673501437526819689862546523710166522763874255457046134768878318504847569562740775920029079242062671507739909787305724552670012633097279820790400444955953186180036141498111027556284782611831968632960254971585279229009517389124640521071182508552930150093115185298823230740659868195268121798981841121508518238922062146832778512233130516701388382270437021078314304384358232872632935033731255504313450018207186652992855974803423357233611324893304082721355054709451741004386686923054310723261481499154665026674935888222845457736324171023246366147102994195305848085588996476494973007973902151008585594112156233214360569556745482837925015827621067498561246812344514749188513286706401554080345967322077722072126008109427433431070325726521163012868148649582784383995723396360310319509595957738338411942892357400728388524308685812413893999404967999249813865349937751377717926369301101787921984260122186159989136656801540380770978320766045936205592959488163833618604355519117056970124007977963289037930079739906574432060855963578944486246793175242282673514112660912407087562188397053739993885193130818225601480302627529684348527769410385079008546741019828845532655444621234451156249631617457720152180989156738006670404506338571918208165921758803413253593685587469101580701192606017766650438994704981870117413061535622136601016979952697317238276873256779729419028069631432675219491767318800339045855442030264560075159056776340091166641523596359578961807101748144945138318607039052076486075699577782685718970588115246184745849474239861848227033647872319200256588719967644217877454602724612457063846122996574940120482768446762101146242787977449369937867250832112867230692912468970042855717280755106531667961937332446742078258774278002352847604203619178315262206430766732415004556722421674647346648829974839968356832918027747760706008251337997576672550889603071310089578634747901944072670071985016123486885045817879153495396347705516599056944513760289619758242073133217108261158438678792867348399912643882264938522086425924074531699941057823129668543509614970599670225949760759593973290456515031451150061095408009491932533974765354150005121720734711745252878859000575558573436139695813170049848899622852245653141171375285116196880631468001421360473881187149476805269342296424485310215470494796178401944348619754324798206578015187379609260920882768561974442771209643829629212007051116346637625763873106848673476948458383017883010996340518563860345530523780019175023658557801658436627673907676975971882109751635784820139654624656191522441490775749907596367211611579452627181067685977845460985237049896675479606151704752856005151770161591738112961723993454693092539303522485285732895462643804740701516376964927670122135657823916458074535855817547513841507607015010962514867231406668733574660708546812140757605323461188423370665178218323843285796646737709047020502755313516962625148241570458025214707284812497971943815765595261077725596928727447148413360293693704268976245064190940961850889245136042407154085469838297857292187347035492359540055492227822512458140269037567546119976309595685267059328503097802601274596051953728897555043442182432638912118214086596792857025735173692744450906559633901069848611000152694981799908562674080212673483483714535683816021391478836663467848746594481778215255545090822995407416235269774848665232107297962031453869358953402040347982467139283098108055610285820589613275368865515242210501491361858362122708451547647239066214844062386833772040444917284525202881555120247439897055373293814403955325754500816079489668326796664509455821614956472480002144936394671934338050270783459361214210050599756870439116283220868124998006625761895550396584389321270476762755086709308051601531689562716830791751872883137993455070471233464948461931211369790177531373113631239997994291418256714478265196669753238257830553539691807842745455955136875773828554605336260805640377757640862870194935776092004134130289520896834858656317913097532957724133151945092000859020920237096913664009534675855229755344172129957141641791984538395100720317980525185769142781585509930975604069100811643163009360481907738801078884830886276286316858755498443168347068032348883021378746194698784811802339515331441830238719175466597762050420975691354490653471436861965025398816127746666639354864324232964949049300538005293308845940271700888627199662903120034287206034687813252949705816491402178398645719387809539644872118409461401883654312922279080211009210189799876128819902719937084606802972639337531957278291820852311932551591955350790335928152884811433450537315845604917323956883583239480347219971438941586085711934485815121967398164101784083619826265891401802416571741345090544188799381856839432343498457496360597455526238460117589115787753968612657150077978004530794321967803330389249425352563744925321708518378671586645666604614530902858059020840074105043307623670946950043194604176031013849727052783428735689851667778432798381033674827978887751236650974118849759189503239625343304532523005839417475498961072873029640889256489519703706344292253527801297251124450502273288023521577486079679697498402526688946738210589004011833446500132651961861200853340654900269802660034733678942996167533210265105504648979731317667399933165040919109758988751189548962159739945527299915654716346246041095050960741515495587998776985363865506374140224005340645853795347072152325663672271845064723399857372941894460100333264447275387920605177410030429482678126703784114018103844023345892034742213333395468046660012665242882251447818527188389084106839211601891516465629590896364692175169015105701572123182161899801710734441225139364024469426754491100056297212476895075865513734972712990677136692220035091504362225897411284355159962673082264518469172649285965322881981348609178818294743174542244219819932183490365756919330710479957613508601495497295676950329757448944977362883166111823279769434700959568955927643656859063742327008267599164937006804048910677286568538933031439840564237461535941197796390759052457284051017778672694027120426633268111056448896881308374127555545225553090822535510692077989067554686838662757792829768851773704480230259292642841141429771977100764471997993102274545765814837384547498350869645999651843659166200886176115555346289903469340446739207010577645167542297460407137062960215028382415884570633157792532691792641314278905490923087079766067798937780659109451731519734592939579025164926515523248807352103381305168229367358321432773551392789398713507962778942820119469523225162863178680183911570348027961700553229115316563272964376101119188825605514991804081027954389921141273219285131032169547368944389824308436381941175515798111830481000043636844809228835704445068305252750582078049987152297826581119584963878880864201441342341314647264252390676175707582693479476352854352886370525502607349886832362596404647139600857534060227964743860211405500060294329186630176879724051222152101141867575359408008501674175606199047463432213378831599134528934108281929480497040842200684432006775368915613194065693056672838195707429303679749464784054705434213357415294902116744802057352193718342238545126703326661042546563491168121691269341550977021406438785288342043569889077634089317033122541296230748114388665029044499469546397108299753200706114193470635536895967048169021873576306364846257373205822028138269759764442484817509279075026743603019509097159849066563284407999202539936119877761212471543147933987133791650432393675308321559611393751092509456575599446737432047081189236910050329727334141146991725988700140584975269036834508080148636316737184199462112708124889925362377529178344014590919552819769657577672702978011641143673156015114065926314546589192090878523676668017033871729579063980669673546335286849239147941679867288782496042348838505520661208416542384402601836938516863582808398758530009389050063886699985783925267497452701039388970042411071173551559121683897134217799905956381777617760035612136975496448360169358472611166991247066660361258257792717955895802886807621142240955311727190733860080248699104145339409596193747533219052958194006816842395395133815227958447183027408201887154248055155515252489593725880002915429087346780489686173993006485543412786317161927405570384085201230519902078033355645726810161924247926196020315576428292022629241922920330634879366713250236205513546588717366123436426532878032863695637071735051269224304497931038322951508526569846253683590423751042200651378810558188601895181845187598166177418938407685219535673829472096697071612870362277436920342738049215807079089141509386167010651751786772439419974350420945450780317330425760939076658378846814831229353170269675745570687143370733413098798744099031911520221044007327256897909622230050896081391104380973572938318409605238511264413423963577109959485446578175113776603615777667633293449071495602382745493460804765597670064823587149295646560929042625803334777303751883329502685780494009410515987822344496036156411290474009548223625232450188758230491801781290987433426377664288677071271225318178134265723090953908487368210301890173799337794414289839164334384499838476694064042562380923392170814007209797114936223969923288492450317383650369779029731134714434936391643766311336738629884184770965675076449262359336759950385687723231779915621937147640435620959355327348891883061403815008875737737458441613654230046515389312374996035407943181440498220354304355266414125515658969508581407533490313522890987856883087879602650008064327529989955508937331955239874722401238624800305487314538069958888480061378318398494570408743929545890698144755401436645575305635886766888309290821752239252465276109182753977002117165726763101082508643896734872331680782581238479701159334042497390606376542941582331808271248759018721187949059390620081627947668715490802983617888543466920624132979650708704245244736734577571335364024219584348266021595514151130896017976378599765662306270194051912298827281348333359149495872248207397081180112660679500488646194492335713944553578485524340274065812575443967506816413669283541021458439360404721464264498869630723885583385346819805722244341238149657763492548458459521747402931332148061021522859079768700468052335856043104242388423745990751764752080395046941015982884875151539581000878641435603583824562615084914225729901628394177372130985466208762313918008648944381048427957163858317218102829834343833633544901126931143569398807905684970202348964194612275298885061923925145525774876352222523781858372282001957198274173098329010279847291113009852613678253123199322917136025127117154756978089704874006129913373888341731677935563427208491533468982839070555222905600716758864558055015455443368534003989339266991496574749087456141207063618250411241902141164015442390891110956633395370303166431966298954503533779086717784121585666343471909838926386599682823714314774096149220614537617503626682222182615668880281733598355987215201453863347388340090921698878129884976286937514133684565405410347549261471700192037533086493793953508999824708254409983739425082813111045769624535087578645427477116700686622592971553298713236705554924227547844058030634294043977065066654988266829751374105278390824121371044031181008428048205223923243651098135005092948487395324912456217052331950187603567228183420265978222659169332375919592362911152011838702189535847577763714114425190514299564739774757564037598485982927812147173140747827430978393017504243724684098500167685714749941846120533181791178220367836024729909146669128836477415610531307171288054524223649506374655503312084693854015857030163886937766181098823169023181572231477404931598733389102380674704591127778547890467262756173574558080654790642471369332640892203135294330237246272074631760017202872694312963325722611729402358297429077465902624984852437593479190867737167006749083009854670384065327519801302083242691293439616132893416660268947919201637739258769771607084518793369204312869826490193716352930819450570212844033786667236068075375941453964216107149779664323628747272497685794971849040594638565097670630010455310220514277785818284186463200618441748478788591987616681646033755321959251953987293706031605827100615706433378711983560088154239750803537349035070283423517350889381534886372817293834165533055835445256823942303051891255521175486827650886133221071633589921707722114526609240665260264492305806982431844042679579783582551609283040246523428581845720374540737897789979786180180579009825935175015723992444590406056732840128165816199908483281974729283159640149821021618151095300252407271226953926728439712096665201813821962143089789720545389677608391629805852569311950851389264151131224953921752017840922075938093985062781184787646406285721393870539756657767030925030053022461302204093227393963491255643017235236360807076699601286868224950349231983608760919780584266842953210668067889511328397050532424837545546721403509681669483144282692231815703147470176852156718005759125673967988457229048839619145997585270368102435074595029990094324102493737818970275642575407600875588537013441673454455861497898836728065291478392070865090189959309947742444986923526745948057899128034232868017159368271694223700039666236730894705407231009389857561190687139334624948051152611495443371208819706799382667564652218904459544669746954713753183826624347921466724650586905939136598547335012617702607014113794591546834254696563524548343500981096958481191991323022742758572702244370470464413665803392605126994943740602380225661619992335366449312159389272554547255369597536289533017879667844179574297853538262473990737634615419535991688218597561417950967595509116168022993443293531295365421530990278428579503023488689022645550899786226625323338180515144059213727584521215321722089993299184212218054163465777614637889378688685803879328452385390951350548924489120271418100487678768868428228212387228503799518279495595264908243662176970443975028752029355061454695157141184819938299926947437018478957044395662391617808375468649007600370172940115843761412592237460566795143736348519450988859101853660296226210668299394693230720927858276964586740548558363904065214488088226818002415057852903743836014126022876012254536312345404960062753442098036019060443237049994545797682297235099797863438436593216207403158412477892107575374686442179451430350704320791891708254315536860892520182634206456725864813704568320562591782038671811141093425946482688159934297090882997856490197026962532578625837338928755211465291529523683918247460452910194710972484675179153177104097104259910518268539520304289744878391349554947980543388976876106090112798575825073980240911865137171222653996955929253877954855333315507869969643594964229605539468134884245036416894025484737992830203554155653978459691014928198149428959910752989307071317377965664300905553289327994588549850950284644007080706241112418494862133916539297959029131158062514264923394985650739154621700845808120916284537924609624030443114218948985698358239949762635499673659005627824880546112922811671183977198549908295009183673236341667156736650377361061056737332063403410177715559814144656394550604447538215779823278536104712565326761405690441339115296210030702222989203489845948281369398678770779363415632864910236794328437692624022552548328392842615492736782204301768665965365930746241254165608754964908497067499545759985298460945344650446835792542841082131510112938961881927693248231120221756864036707731726487325938077272576650743798183544800139162905157445216386915371613768879264078891644381253089581539609558090983181521395649500355526541811118635730569046931361684921810261207373485062516626873625896376115969793729107031511621422445382850451172374270682693053568648031104008891817274572963359437128249991844891468313131004074851541435190896882353764875480896554449408432067645595533709041759932190996007431454089967656531249566609171679862639011907239936167049017771581006836981063193553563613522749187290893357797646951653930745484252566662895227296365515537656517639786730623586151975310765480540289532531601949395336304927562830700960037825411985561643821347883034995939999815320371904489018486314948455952559263146409710068471713259502647267478001977847611896061825935753950424233795977832748562746151379388667659849662204204370582406208836832264614999774576849343391530101628342373099807709619251009982948420174200692400576186926512032915961194241973580587141742017725523177905799155980685544702998175691236820149021743148908860959473955326805004843786317283255788228027783973963775307044681831745418957729607897287660450576165731690039127804414511168095180765758455897687743007250305015608713824106966239837615772559788333446260389735144551194566097856159222619045281993121036130544888850748533209105902290817972040683491743672438537427407555076754103740470470519996488106893988963679893402926779777315510136748292964498716616387480928391333727613516511458687653975670170800714203116160576633121381876444223289818335512535646590900478008372238152919598466400554972447258395277820369798167170321756327919408066285581702239995204777287480387161536727459448442509762680258106041535327214632697312513497219121039425133532472242095253942361432227842877340347922588175651734262339738440446492272637919578131157514237627203984698773116783796765212222546280365874311759355831644675241116934493294688108999510961605213084570721687715849450396639049106141887860856148954550750471455629931627105000620532269066137825781316017603220973433261333991034567108467510498624962642488699169465874363399488868154638948242465984577292633553735556852420099382096738662832127104872725881996505036610995572650123609241043781086883738614012464955179446535377004978611118562176293167638027449612637695085975726247778121052711332364566219200112876185845464416120363602708440087210524126961712756204182189211477418943839212507448032291316566737926226650207942465800405168687099249273393069060646360798873617365864441322829730079901581793477840461467290903920089953743513557150545457465001493281676469801544541444627173505187869563691796834575745981341826378231855942604285683577230974772727095310465725871392788376171498988325165587658459242478209763818343931715246275249033847544355256625769712507232847344158590312425822454135201105768865080501413412277647350979797597165322409320114702032426981288520271353130012171484594553991124856728942246176555811779216453894275972582641573921036716718553318429096852951098778309232081644343337035691135410384601765183315931601762146264393426528312050751636769212945201832547953844492774251628393141343106226795356284876139469403273284444586014152400694986734961594079272858809061960949904448174959103909564433761703907276125412354892775335876415272646526126192989549857858930065881045254576136386486138517438556555308338685607210816131204906145887848650892144421256413442786428159719389978047391109134257790046140655520758094636923303925473166438103154754510983147606737926330885845999568999353851276202586739695128035976057952375907156376600975164048300965313860942704588148212587962879654957903805340177854247259711308541551603503567837780970461451995771047865665783511661730311276567901518165972850520986636796137347177492175264790310493561351654339295597668712467832251955744640272444007155359474048804304065788982945928352532307632627576930665303670890426050955025688528627309916477125616012512925234970728304675990574496468777227069085170298364495254489068034897491392933909636369331527636742699013284766902371352506091776350995292002731244023865757006858780469293597018620342571723772179977093125789699475496105523743724832176529540068144093345882387953940656084217900519955099464578748726508611651485516665622261135808230656113185935758123090731435124996047414425279597354359574378856570913306377601759010157157490619551740940998388274502844305091669547119876233489292751989516078837544062423667004292912251992330172087279616497346882233046859736081564275972335625958254887035338484716664189318473872485695845339136606272315059741608927734938768821670382249825317380542046557829438761966527834167384855716224439462405323266438326536377961771823507569459750423103138290848070089339750740358977330113970497456562209782789816756431729085281442325129945131381329920983439892601873489278892739994343671536564003094063601168102358102060511646184488836555280866265439572865577916493719868641514516664261116535122724396782278955528978764063014169535540654859120299172230842177436210545014476071475600058330214022044195137271228882609806962913480150447375885450575324750279251402851061941914287093134507336790423199888450218824466412490267199774666086468918833734387337497335144015840693004008549890781493464193192460097751739334161380017888359443004786038046374825235310856409598367802175188078401652900630883502414596986630872311085261238505708931003788068325087199867279768495262956883650359670743609352716895125122349956601558456299500231541599105539315180746997839621279353395686142155700423447977269222089468138684489318419154262504409821198761325705465328527695537157420782082354078175035903462010430134986159387812646272750962009925857083492829567970790332465325289206689049063764087436241829439763284627544144883357167770069639466367471860398862788075053410539365200406384307372970511564096399841314435051459484946899992507044444836354985269418541366246616097379154763081470481918007310765539689731840724466167823996718641044946480569623102013135147003272739284086213587006083417239308558779132947952435879189833909533561483821067431049890268359556509392353401539333788301678145208658937272723188794578112686709909491108016192828130703303524780820687044001344046854958188080136806595303293237463476504011920463204562731540166037081435695648333493988584792808470211132901764592133330530980096778425332932212735837577215893864016217901368345444882023496497506785629435246203379531538457462340173890359032774939687844147198184957025212849427638320378720167398909916718917724985900920192030214246493573397230398365110417352778733527631095124650992710118667623539554692566783429394136221716928121159143717386855853984409631021985053790618629812165917024946228153251349408767853192940114553370189242241369551007994010028856078603666746043453656590118761983375709654169884658816846754918144899815282484040063735003947309015844941305847294632029009712335365639096408778574091927109550299652681981479767150215206743081866358869114610816772333138477417708074433283279303532825808874057642839515755856791048739006988848065926839028819778433988669939558066650036824490486884666934262276513630175045822348774690095228540301868104997197326328212569850060274724529767914857676420841256961349265084840795236300841400994212367633572991161913691050780025455347823394988202788101768864502813390202856859126972599856839543990159365234030538827346354126800097285185924007284964690706128142631879645458992663766048427439769100788649351932617465546902567125707865370814068813860587244367746419075848390538678832569432671471062986454254204755506074801888029161552920066319891531957945773273477214975812022453730709392776469844678661783580960787047698418293376308118134867752848112612486402593064704496634807094220104296663754040709636340404817455410880891536467187831977983640996849951650389805873899168181319390054320789631028913388232046260307268390249991322854583613804193446810865918674501358892715568404694072865540886401726893184784714501860380117604550931574048136798023258513596201002070068810852653249151000051456727886861808962487581377647552163976398924881561622659417081146106665646072744668498044426052522804636851043773834785399184804744620318835737108437901882030516095623037578335280017150548691261342926746197516595593226496924022045173580598481046504353473187019615999528239277638114058438415735028254220037867803763085393466530484468108461280119649653140359265924176687880191882252356096667279055875924399802049955390469540917907333623282921659561338713671919571784854447264751582461161121608220632552535539574811239491907977080055351867435082725503419467499187011802283659752233542349669207811280081047966667824818523441274660618920625130919101015888482026053951969439894711895548441586107366790258898741612638693297959237922447608589158095992135723952461923994687823650465896764883667052137155194576002906847524103760645387180490146865124538922972372819826875923731390254431637342915817358546048808767134126047097505431381328118991195760134187889545091844395783645096128280496313025953970498006602276712809536127205652543720418045709969402565206329936420465311999349099261495766939883753463147455929093001269063984253071712863023553747896664603639453734132845027589712104259060427174009223665700657893713650553018587778453891754253151543028835750947685193000377825566600933648482508779760768199662372049766387638985631992100720003474151721375703211133912952407983355924232680111677587187241552829353741946423917448296404338549819202048685814597880693735805572741960307139515943152276365487150482922514045581253293812970267225644349179074560531877646062461313500613224648092931335926366379056886844623491593907009953911828052093623916145953431995773150699039217050325951921320241782503621522257361377451082489605564890402097866814491505081488150019983296575499211151451554027366425864934924114301930078755148355932268605394003602081353485970925801149654213968714040128138987924299507789192344817388231539104117379617054404077042219865132840948934920651343894411168095993753287475595036673571212995962900134686846347787877484062299240326083529798662229832353356661104190733708040289237334415143318464007457016765783370725688178760684007631997290723697308539152704845065598303686071945621892934023531809446634995403272958391058435649685487542623361855343322082521933633876027950702259029069185899906864695622617535870612593631958372152800863964775616329570345552185613467025464216600056930056849030169878244758163240995914072907600096163507820815348734058513665059114508068178367617804243332753749239571295040855080590873111579164335770288383740923440579367884707497712423043388562508100574697765074001' ) ; +test( macro , '717897987691852588770249' , 5678 , '52992561458966917842048333229403244806917799627848421877881735070477262881098520765035249624964340882038688516377409835187369665592703958080735736766945912536313709777389461793817187662953548213601180992839097018162700540199444811234129652849225410276267930982552729151588039493817422762367215695837880393501083343614940195379176805915010804690716402053261575165097342342740863670719437568773682027047862479103787981449864557595411550480691451690239227939258640148661525627569354056573032574365819474479753874049318092332197860174730296445988139873008708564407683788184545625049358109338930604072043506368501486476015294370204931967091112231708457059830732539826223797283205277978138098770871113585235612923319080860928191126542635460138797782729492896291235430456696065935768220494159845006073392139110350323314505384289055017134916876163400462621881373937156047111273516233295024171469513762593244072341275620852077848874899582624269495895402815765777547424606219477655639449216632626280672365511304216574465048481409555551898153578798780997838187598030296504499299634026846370222734083675507056188173301287819190008251323703160735842279757966250463716342218905187576189745969039286653568566712245083192424309450098888181155360995569923237384829100088794333552637537227162177479701619093609870600007097257152299648831715938521942096231520452892461541884420652580871321292450318548928985510277252222535133365388202103209163165539197901552072608710284236732915850819518113234646115533291363606803403675185089565146698511010652775061073223214261491866092146057590474879116664838288380912194992229955697790523281474198511681898554287250127257584177956384808694445714111240128709963424475982531545945446204678284012510035965008794769324049843450109531060002528540713991395046933182699881232634176242677648962206607631738502280973898290005462656772264590786129579181328545465308696435762205327818322165386961509403474972525469518547542068305372202808432048462319049469153118249646785678722142597199696100956128198604501655682922926268156814400446792306656470188135722009834179368221149303323894575881803165080171867765138413350984666824885942458943042705023835971675031330773162756179573615771369921528023990741381103617964140627847781113773752668975380722356219881474606884340999916287255829002765995657643610750292167091336372823055491725335254964911991918866523018470993631691434109295300263601212125887194770564215757107756618621927605011672982388667069376436126257785256735035080395442838012293011886480858182971214107329249888540878170831338663664497081571648293369670697492303978168090750719696674347255594774732019346186950722015778265861706529434650218922964570378758677250144083322218433388621419998372158607084870550629095764769864396578302522198678754554607834625544465903300910375218946617943281021263817868702534903565965515996857490410905151194367951674404671401634726316031502775424938708095480058006939655833612970659151929020021108105677362480187576212239598103259569657352323481949129023622185672875961306339733885857708982104417776147428446169851035372923120375171782152648094932708525562623063044339202972582525453779487351603066880013958145443211731768489287736596200008852460116803737486674746320357688425959700168747470090109849460232048475582033235140686903423628462653109627172118888613705624945389644912331260448674882803772456442287538433120812454253132443354729068891796527676701606716457913622114298779919239138678095658602599035272101050540631199171079787674726148712746094500511958909309383648848324958153313684693020237870128517588375127269029825997693115614438073154312047924340357482412336581044347428383345931096734448615207346214924813291025243318597445591410601657643923497289883965796840775243249869681469920755474682727417587202159996646531840273727959008935890037688256043389201553466973472089962210203795891910446649680901883560841094031991763415446185012636385884139521383390919645656949585657311438685339885917614078799309904047978363483036838818577158746493373606130783588041171423001575976326332942068212106971788178296357879590268289870554895714998398477383074091612380803534549439364991095989289183083877933651758973534265032552397343750530201088858666516716202042806877592785968359618297523122663345711107589355569471982996246008945010788125903082708965247233856493295495884971617005159683177020951059046089360849718770603433176136962787644988761679786793574894146198596283619577589492917433648008790154607904592377489003959969338300144125428308936896784361334723137983098924994947562038207668868190447389976840741447171621269619747614678405424544476952607756858007392925674149003932269670585532289548230838340609191813200074864347826444440499651323577336653937195827618989214774650052553204749548153719625554328240930029474674929792915810450109353297164695948404332144143911830336116561122587580838323433271508758381427202886466864203006769876629040113309536126898286439306875888068434906684986109839807912211044229574073513385256008653277622489509139402265793326372569157760069106457217990235011506430988742050031863394618171218562494463476850191629255740324446363242993320648668718706796758945218459365076583628726166585648610786131608405727805072734696605117814467304269584486848714577856278821187639674139091420868276683680482402061170964129020179849417226407523345979683703744990934601753619379872634811616761518185857620947821097797023780246814812679446740501132957939033231020697754175111520932341860938863741889626558269454453009814222388294592392173794599397585978687451892813356296473121549635013676249164244665043044957101593039072361182135678926932958876432422873012810178205318591023576753916592920079031115341838800740563121977641772239560122596720253059357199257880604788460448454541912874334474110048318114397597184518307140986163690693584548192536813827180198436161154497288570678489493883807773676094581689577716104059811574599177659911227887188217401978474514757553745261264218832355099235158560242297233406180137292308698109610071281861640728221129462482399191931254988997403297870669677165754913546299432301037504530872073067858354779137558761312187986108590108671713663509463849235645441069025317032282653619885664511756487047824929057588473863132476505639554060087119089853326292527491890156165208813193528270287317866931952302862861082174087615226626147432099575255480389022327072418068332438673738233637882790315683455450464590709105784350178739780127964769969011026088597219619472341103459382289201174496483005244865985320414773065969458214373055466663167449827644842719260068316989039810368349530823214414315840300587086860582920441160086337872788129994593466901398749881456816893076117420457023093235142704769500472838381750950452685686468352355934718793080770041896266326591193598230038726258131382339638465090689033062834104050137121528398579502285618016610064410178458485780348478662846002089852720537701136965653853259363332024728436379986256649234691293765971251875100216741285408346246009343410757983483597963489740851123818712786795291798837714819930591978286010640687992692756495314962784887224591285887831740631885066445063662149099404455330521550962587381135521874864351037529468684827186997370955447481995887639571571525702373403403761671748587109161571183805369675426792116895119621582920253789699657615500011890976403807282199844302806272514657032217062946033211042074109494896045803992953473587506222506781346147810525891832442558813747914920938494195556975736956239077078403047716108873401240720217398379985768790248880164667538691286461771920136462983631359473029704858507306794650707316446091278308009089124701630706210560168792994743974642056525288870381921514176601924996181921908722977903765494032218635205563065562888264623205077967964252752702442201464476030020851153648989654374063092609825139716406169830702732441666788603492696815334157061439959989046789065423318960712201089688946540796678378497252260148940700296093007934347669870770800342086190913566676064617891161093655936605836899446861184700094847166382869925437304928565010472625277681782787551544062045311275114543518096882812611825710549053207666530027825046311534181156975603474991929909024388711945463808425263464957653237271591373069179547100808683091655216330416092310214397175383390044315163696300849781070219134615015219064302516596226701912265613020932966925428815092790344445459519486710818501491744578229686083894654498423852571127489975219254353172438337650602238280223597768220243105815348527252142824365262184240072688609964102457657199429178311502128276669149947703560777240739423309436247534508874804401314162274740915591635435183346939875420896409168143366133287003880010386186641170364265028042141513465453408101841921842528837600797310807883817569665409313593668849776576983790985321325237847569765650823790815463692017963395752927945155773792906513914253930342695948572439951274479143533256050317996678589637630517043566370062714774155238038673228364852986154012293796986173903941816772421914136811088242656279247112124439226958945034478877984596864873339798554814421219750181744221681578059062457004925780474249073437168128231790400216332672320703915847426463055894401088311795843457416623717000078714687159781995749578194250354449880164141903126715398601118555657753088212238422071158309996360998060316430904776007237664213238747361809842176066931627956726802459178808505394046664002938285314488362839317461527679372532822934704704470253690263875879702240062788026418261529389183596155698524599722228817999108140672748144745689714554812265041175714545225389990781353970530998752805250297945973556929670870774946985404265424068777800150897438843100570165412465536409965604362377295700424297999045416603027704210682281919437502308628718607989662408388051610908664802514940396058178295301888644151245892936386802507105326053427738255325180381762764389027620113283759653480743839809992357496074117200755535328327778239627950809058337055235742086687019858930046083297050726069315089882694837254737886800564117843966144822575643639731768343937069600705061564770014386059309401600994691145418984296800446891914436526504588487235668560512126375658106759961423238985938919327850368124270203404746108520903433047821070462173699752058768991623911437121303926263567247275258743101051399711951304774969904872170431870967998534905416515742768485058006433022048620528364549739197129869684349063800961670793383545725472346808561542828191153302612521938569967207547584404136442698715207952729855421979521420559878331433668100753209636435675712543276009510142074799136997641192447567079334735530723873493925022491212344710076896739154338361999719913499831623432329457641993249784570344228676317925346610689759322653659928903365020471696174639950909615303515965200146660518282411647170608800939660621685552950249611706475325198479518423077155301209371280575534360462938867984963297040183736104969929190183531952577283379234782953108926401989267488044466794228043770347285979888837421775091151607628072534183685174245345816369526145717126891495096063726823540297588186575358585981265343937095373338996442251138594460569709569806492449609367188654079820152455364920624125030761646597005088999711445807387895998396475835641806955712083403146532371590752368935420985233735695950492134965346564198873831201899225738635547303457400703163201429850285547082772143821844313238723456259228759115534200528631507109400219431734564426566942208047195491924187286616903223592310617985108600082628611087567285767001840566153820546701939593194433998024938689773662808625697973543664837705457336677737765607746286815865891347597385126417092248398027369133671804532615511954414419259304523253807140857494548560843072982788068686101289767274829556337961469578050554176149354133487258534215364379154660461310427570189912699705529950514413147328168458631103249872388038937376864265012237965847164952284836681545396080247290559401291604967701175723121502236181093388323626875423056619719092568232717945805103108385877791944344245670750247392343384296108323807858305055418400741553693700502565024106126585636797090774279356316370509236531508263353733878156923208632989404619022265962263865918260332262005803614050713268964027332085964017902372988449905870060050221522451244273428597501098201640739856281753377806262510621286335117441922221183997764738785835690806964058090618523209727153455617620262903964419882379089412045613968114570967614290250244897455062121766814873521607883867929237291112681395681208806316115052463955424369530957702703335301336133507196464013784297392355963686577412082487656646900727164897539211910515592015131790757084187802478999731058868779493827694303480414208944059771372285831516411891131036856120211199256880755033121745020506905940385581282403448035169726911436826243069847201133079363947969342361067328363441956715292529385906162072082866885762473853872136917177105248829462003088491198093528321254844293731158494353309329359943621539173472646030822664165537362617032785562181639419716789150739604369299294852110605262082459555983084488041202822751327819978152651961662242916641572040409255879415966668785223872853617095739101441693844227787889967257101619837706529517298805962370005920305999407921230127760675120172113782634335023130691310728800481538764425860624015422603351785485421993634219805565282967254634644843789616543323341653341146495092459321686531162492849751882105121323719768549112911144880654693888232614646653956763580397332567522797083319499426431434148243989859609258432804222067142397999063441042035277929314828603521084355742771233471852499158339778603981017500121847933601889420815095445410655577708991650898864592139988828909325847690688265292963327637387564935819554712076627813142907683346250203958929989323689935059457421263112380235019472983111424135581186825910973214910699149667710959563181536691099143613233601161732666745012245211307688622118221683809456064734882630698593204467656990257941572412614139802715394281994293120883156362501711873082011731962032490574884682131178885924065895059613017568119400856466320056952350332528728576467215637026738604714597593759418177681274482897193349099377791845071840865476390482509958300517175834887188010180465835340333367167368967646066303894894949259012937252758312734808329709232360933894530979086189948266744307651572635781288044544893571461370440118431167905294073527312254045244808871450613885567599305888413740007585647252065620950569327491405356998305146429471623136661921767554001049077582559141269075807726942292324962879195004849835063558899374919319497877100701211206496709025329275359077524423372451805882088092879051313263439053059246113586757853983808973560033255079821096458791208111949975520419973969738539460358523519982416915144979569986992658895580772468544281855421641228395656106360926287526507440986113241371749929933626943002948875469110027470912266294656790428857661799285796092963253692751518091473958954584426686863281912392953724819538676197544419608647219428371546066604565530829571887668487791705473466987941636508397417037367030291035726974209122929822977256282776129310660064280234827050717329256768834139633843952427070535536323343517859928713869623513480175609016408364304241592622958594443056559986989106563619631715224662514109451710877519669377700137922914878226108875076080968720985553774478319079858681651339801277697214672775772710298769965771899451131005224958432124257866462047576738776398467445567954900257927297206412032651048753538257470550748950042956467383856098326990699095531754983730997777376855850204059808381527746257418211558497066091371508074576455448794073221457106194028764995140574406949894779285509688637508122002763143590113564857465357157613251821223444359965532981305922833468097064802147367022534931051008695237039566704201353988540866088741667038552935423161581934287462404348346959712557410094417500120546248110357270320222372208679677188804508939856387875484398668973720610306440393165985553874361652311139176073072642232364301455756578533325673397255829115802632064375030488532724282480941523096056375612516691335273199076868478063949077979981834693199226789642526467313758886727034664155374708233413052241176017997770755357925454917422006910044558649830410441042783912087181440912216816911418077643846400706686847762348581058766312240711484387486718123588654129529313123730637305855816034535443508751239517641963906747738873083589048844951039924094554710311263734798500241327075231542378920749258310205825922008644493121370590192760015148501273427214461014155067372554805948839297269789248975606338557054691632614937241901458805041012227038978979812168094150773239740200926858206670986309560725257896194349092782159293694188307081347049188661030610107456715733073715420873434056971119630761658470234370438116245797515154771525887334083368102698399109278569996061959700658346646955565093203139925211068688479012109279872461395639869548120204532938913593022473786111209373901721432107297071448742770742412159279076830118439645403061943303917551223288001014702113659615663577592748103708841776873178445568235386839518530066675979433748005530615064885650866749177914061788524262808081456736332733040493983863214714692393115801670972860894965741349096171975727706157112301169070137414347667759125039407153467452265210719726714985635420293189470049637210766042254751512445609291095350283495503549502917353512206358756772848829158151755615008365723008445582823523075844725615067686956618810366284960890688672135540705475984841760373827462101875128799270857413282580082072800739904057148821354442778410810970050701431502851594089320392059591004827037030949407048303186582849254894900004175510461919883551638536839489510245449220044773071872011316439740663014720019722095387628672305811492191697738078092246616407460689410223935009608878423391167281114435298028095665936771603627090834937282850979762786426899134362341889415374040340896380252725754909908018401107333556100522040895675585460969780799009744922983914153517048037312468584877909733205649413029335540211297879068656419387807383048842494215387689331649844934805491180381285929557990551329032335758734597115389529509449814729908343459195813101027114347572133759851590325554983005153111501432758813072569701126690781490951740575825405497526335840722010023321789428374242548378889836216282253171286247053640123351326348638420215428018887341486150219038345363430704186782773219435948195386840643853198799818242098668338179745226151996534978279230096399308636037991368814207217507069935928147009785676785160027497317009001777550195024132691150567507011354412329032340603521157466518995650811670602491853174280204852628446269615787322879786482369408633164257134657023953228812362587592950746528121453810577970418765900895068401958324820738606431245080063027400254319882177028368653741793457795068935169938691425211024828792631933230877447721276360612404169065676636411366175986321744222814400246758586497722397143948714428396712767471630538898122410697568130170950184011778819880862316215372642601335542980464853249009026580690749759635033913834129498173805649521698922073038683841857811453879318495594875910979538327284780569733959417673964124812143583018523970514641401891081019284489763221082086325354879697385907787761049442665031058490028534622149846137905767487116029644971254430227080575349336243717394801443483839458265798732710051462772605466482812641037899172879970734427748668316293777647496909333662168116654868712457269032630974156741200422999141171874097340818602076458352626593605494845936264195396202806647904404677157734745652872270210704027405978135714048673747336292778720101960923698684395527092073172044177213818544969591585627238532808299570223371536372799012875224234778370905326852914976423861886454350497565400489482872955448045615907842220173649212448684979945647349079756570932865476086046458864652043811750235877344393220429343034415180297212581588145608747445493372426999318493938150343775786331056194752510426503166230913186538526760445807413799806204051029905931303093836872257279463684631738363832006044614840509662858475110814261755496445327276173263161251358809092006580985277059802629992110919876640778599238851224190806234298093499859897877945279235571464696627205637879325947667945367188005248720580469836926696939939415121732586533901411675573681854304269524168392617282088535658385037701299391440541334384518081022468387518749703363096233963804922423094068395126707285054702218861778016173542392815212283678372323848563282862826760297013819812339131493327915541965803998097384090951244169643369018641096219195430772492922432677413755019687006516340030964660067215342977430274756427296622985672207880091256161463966745535322513359262081324439248033434926360421216544044746832762555450035219016309931057323669695525075977196214861598745789848117118689974917406963326147153664733948922010644259043986576126492884735748201429479293157327397169116086340829373474447532461009810536262731597451754627874681161347317493618449699664690398390949643587566379695090443777568885944452505841199312483422475407319328641366974092114345516068535284073079980141067468263817385977308228962318323609469322490263507101669512786080642752319574742157425134152748843756299008728152305538809501024125010339213159780735824709099108882350824446352596024291069384003047531175618027373859127640704478972526885889432610483189753615050833681837753536005311543749368107499347315534545941713644730273702333948596900145557971505509367959108594407502948243020888234056853650963187076323765146652614211207546354464881645918117204811380635728429776867963381852884230518246631190131825530206787122927542913920281579736988824992521073962274953252144927376468933425658712672597384028057932228407070530265731165980966598601076506604289064934821557949717410539761505040873308406110474412692271216992858783788017692940669126619626790274625702146919817133167454141020585503777417647004018422961010432475942591656281157554753543866527442721860074055221343919493702427083052905183704806054896861313080853192781874338774353472175893928663360488609634784890485560515252214309637081204987618424027884591397424067625820413547165571090593288097729180898304860943714385424978418160835850877717027658521907629768814727424695191227358428401962885565649381238098204936255938797308193040643227676416950981533713051600283871175312807406414172316740879617172963584690587789848239482341701897688268557616992035582225306531638164023604262595670103263609695362798739463036593927714273709560324792380672245014432684528132529510597382659551239028729153767533108869546101650464606517031212471681999067256252173869702628620955732415793090541749027540473718940312552425322149119344958406002437705982398992267252296771928467559404038212669370252790729353944780711661881552113249584403769083480856475063987837244029373948596829428019040641426569984762280646821052726889241697080032561970596779105934595957656757479131467410030344286211442477923310898646446342650046369081113562118381113974544065289731235914381813526415129034466320886690781519982064571162447720218016309577515552126698701486349767343461948090842618080712299219097673966015228424172663889427342731020122066675346414052340618598182609249461329861211149036514914521730088889300616712047373574894553971526437268977130623792336839865094059220733603108966045443149552683777916379609517221061627320405151444134819286421255392382822364134687682168786843209394288411699746863444889434411414485519234492407599434325668997799101520066221602884158226756336984242409440361323534712903377984364440121709955882861088033253565408769726596294534478786779815095706073686709431442168829090896416212535563746063403950198043478906364003836786350526095004964058916984298874819382063723661497266846181942426357905013650755458667314604787157987764491101741899567408074361392569794087507924311908229702294763769391197478812554522186741135262551897352184690374471893073000220162512552332060179402611785987981834888043869118074160633762440696320006275857520907876405364367283599977809702429809327633774811777287837997929063319088643981288504577794563897734368357724456507233435413578168544122187905557510349163877892031860938380863700212457499941173051991635044055263541028899765559085615828388330183855986870987907204189354310066588413218192874980402116441641033329112521433352585269389744561428992772734752313702102338324264613628379476243754122969786509425444725576325781027140066964089023790292891876331352393285001370386695304261889280274262043056322796927733119572711356326685350484589411334123538058781520196877872573359539914258371620972518600167848136853804940166949001046871343046124149316149555200621260500187812862150026333455832936133319251080100944562462138196424435420637124060278270301200807655723626316279314677989720701526760643271100348145148124820564605091911779855169535418882307665289900355017573800822546237397396616805582194694056466899912723329771183008166619132092740342879643527581402206500436271851742975104495236263710329645094452343102310844177958838929699065716898974352408381283451421410089914102753296005962431058406067303947323833242313152680641247938380343115958860199956778403253209323348645070739497071952928327376353617380302386451510499726403590049039220125741769453186556766459550919922603305625386150812873799214104365798370292908598658060494523919882837028108696230018764525326479800889430827403509641329404504108584175416299778457550149516420306914056180810908889377149438217925739822836731498632998974190671944437651733816831832102819701452336948218481443109835371939006988086201718924066189320116586181314358289815550824203560990687366887222969587068618783822844334383574224286655847585666103020816988760101669647856537819653647348642372860462072094399934119806713804526340303858796726062832597308487962786568628209393365116177313500258916696602298504935899488231886983956122931761650910471751605728341369214793135444893690581825560582275170663803345907902656817500959962305071703161844221586272436733043463590790972533783408461905472360665984339275927320721268991984362793905235237928358401214308908599626975869024433459897721710178957512745942114341723971665941816834394308329806825884356070709685761638881841811423881417063972638317949761209293108884169157244310554120522091867059525129565074635172821024753666469843554970503238670636464476697226613787178875812109508162171406085559173637604564435642338746751084270357452547638347056148137732031656248286326291618903398185758507933313960978162364875292581607458217158798787916676003226916398811579605403809873107421485543087852003080885632791018542669430381491298441535109732809291308440227122322919323520142248717203062944396531767516101348669545805257723994808980312479264837725492136882355862941108451810186385271944727323937476421051113190387402775727960536639091788137833258176311969569961943551611853786770670960071652604792541940305956411115347733415222667549394453865233071674925052111317188727005402659672862870124353044134138940763586559553241714723475928344653659170671048092842027797901483049343811224941954463977298856433740106969036666079845988063391903825032855950193013788243789490182350376071702678007109765795706678377357340602031572982332824123773826221420577356000773691991307382149359100536109508425616929397580550980381697733400694828091467008203408893560621735626409474184799062207420684997475127497499271462600004670205579497645152495972389782480775949584706612600406180867943792941868858006175201936307008047616757589672523735789473093905193759863364945186628110590148829061593580057092925835363208545182849585868221368570360897560213869098865474255930740671657540215219483723251702391679084671148858456387364281103663462079699683913175189821329916045361853985054542513239589981629807348515391518514157410480876717317086568995965776721883816029400496479881361209069153709752129572198334892249502748191465310837081561861610032985534309285339681126580547626611304860810381677502832262489332934346926301205586228829998320869739620904253982155600321208706995102261899336727019317570934776614228279624359270351092121785581627705454815208145814747270980169200427592287264446298455337451867154675225312599671885696403119745068812877999940157697775260282173718338630223097905166067171605705202669147542203111329964484204150252769374041699642264247344682780556183768647043088086067328086717187740722470761010716276890826844033820289730485347275758989422619495961781370981845507287224106646612891699787304991489991450237892608587094959507431025121524157532996055387813931382902218941327406937104535120623519125622928074921413343511233341463048114587623180196119633871033128642353961758736942162376474650866446500486254254052378915783117942846877531394483736296707763850427149576406806692201719207270711640436539293214966734241103817572475879693972994529271225318511005262619518630808170022848370992692989178376091827819432746605823278836088860098280229785555789098175025591438486997677754831517943543494195444780421155712600231315338591816992539029327290383750279259408507030866894281949592643856951856970260492648859191372445722757560829643128598473999963495915365217562729260899176033339914368657427490270587754614627221314473523385599772728811860813438436363568535104917622395452899623639754284218650275206353695145264760567105459178562491882032831507849731082780751290549815090526014153248389638366562779197588704003763886554458980922773564631738946671358670002437792609926532640853858166371833689910006342371227521888985462256616595134913448753896321572610914451983732905554764025205460856114907835462908762361867725808829101494129427887010484807824575634192790958596192835856035642229775443466803753619433447559913956011510527564464490362903893004175699539657818550413774129471722988670400259357614877806334270973688298172787849219764510531270431348031231230366988119457069574129982095326123736732280724513806554712464556176030636815599985296475879329526942793809334154537286409720616279737748877805830625972559290659320870467177007699656878854930950374408662534796671508779289654115928497876570228294960433889385643701335793908755514074473749964759488535101951927148371376246782141759279753146527867175256859600371220723263087493647651934107824747038684956089218459994098442077055339542213286639575013424597339692639209982667429839922996745194919443742101455841754629560994904267305390310619195510596711795233359996984129886409644969307626193230100243445176341224116774838302230433293550887983785529668376917774923810049977020766265752226119147869678480128953266773825987624533026602499804124858105127910152228288680919984865137490347059505127939634012785058380116016158201512139929087364709693014634031763687342662706605079791983804043837557045973734575431521833043317763655587404678815578341748648519218701877257148921016285162472607623283323249556573753034374795565710904057626708068152251494257423269988884212986826103841847235290434753139713588793284927733100788323782464581521308771041340355123219181562733669769963813626654980259896667571531426558561083021853772568029181635433012078770849834446674149991209906653073314199262005928322117392615818629566430413616987317922057832297584265671398209566291140412705971275976266486649851786135002249020062965980087138574535447132363958635609925366757622786251073626356537120620726163351028366500669047752276806994698670175421508941444055686927449826465211114309355867990655881671257209904683585254426503206543491199687267119577128778582396178926678946290201534745035364519018795390246746811766723584255073984715970376061829082762752016704470773798620997166862372135899943680412430608608549449361762094538339329299440793971638832722944360033468293012144165093312313114839006029476318874961592758500904627465226488109581697907382066846687530136534632837946481815741937620620154295350284380932563345904144633726510177800611951790431250878298814044606538474701064227373555412349001233072133083235347487459787376279403703807888154514448002202951245397248869293062600560134295500105008538576207064629412523316530627112626565186270777090318018659291403078286535004079092813364057772695524445708298445548622123608796436695854008220295952906804796979613002284502190226292523908476214322919392774132723010892233879221455324852691358984021386299602980995708394090452538155116048679915227979809152112372669411580872195011069091512211098837265014358497390191374862378298332979828589280675262431318918898318225215446376722107524363251975033827569456312898080064881381141772242054225493451609900958323016634712370823083984626439009976816172490877077263224311036942854664827302424290250141379316709351675690520061130683735321311996496187247021962293994184343787870574057794627801215642399757391689423643087425702078241032082171429850853657783936393491748921202257137973536585938902448803265913705675751505623829853836767351048275120136814974429359820277661179090491547020218952518317240856799497902090061811729297871492235273099451994560780849999017077268810932708025581118347013333023449244901948116998051103180964193421409328454794534892399934923614215588057091032039363419930676743779898364001040849687155406279816603303339546771517073573996877517822995705129876831722490952428194724842099930819145094619254525540759400392691443317175946185255495513754986746278892496030387565394365588879946177842768690923727638413659745835806393996818031833024802300235446835796085570745553032228525815450531967652475109305456596317989530038989405999117072923810555284059845086948523349452739911967441605727895585516463617479813514316281381343200540684480647554584918667587044879862223471871709991329936110666394849738825285286263958437079344497666129723469849274424451217808101012327262154782486868475696579972204483320055712556519479118501769492253109282648803982799956007070413969057766641895108542980107519788443327966941933926975271423626274088356029953637857404994029785121788713172223066847502903458085949291823486875993171596694026412513484348659991282842807440540512919421580435830982886747148859097314781713081716943137837514388166635564093209988083853631966764152001236937201021272205337526464980001923248970935051413391014325982735295720169702781387326630373314301750994939700432204266441734849243617137063200743900861763556953331088533375662647974513214949950360582587461449318953013746171392411021921268719401083870455409243782703438717812520258803044022398736843362885510789738025682748439023460396397947226212022325837892155810227799539254487217780142395057860256227526753652355653439544898392544874518721260751136602267606533517775781758994893256983747903520154900084664232199826595227499066488170533660614570516974168882282194703476740231831764399346962406995812197194307712384356275327126581811963829857081764545583491933201665655011341750864389214260118093942175688349922926371415338795911538883608650663492494285079393689588623801351274317524162255546872032205137602055977698588526953067919577657802157230724010580762546282119676770146073279290190567417587379003247680752947289021207629278566655115192835788767007491592173561216460960732338187214850961468821550647703718319006714895171928841330718580062654702438419600965779600185378625085906358134551760230035403561105143710833508540322391028617424456041890440768192600260326521458091222064446938238524580192166531189004653013760970323476986163112729146041847368155310536930201842388100514907989986285028152232579121250243087183900990150304104081116859121286448239243348357354426439332087091013606470363706785376906184268755539296047766065167508797445567080041967876599818349026917276210630616917313061541554664359090008971749776374922888008224470479856127371383520079697079481864438879042548335953589849253380664920899400066389165030020576281747877494368823642902286149859757979430259416772186621524014692936483589683321666232231917198657382422968512537393374246432506459315712945887280161525313402564412785562279688402776014658097920177207595566191984505720566032171980817248093432499471573407422741267535537792190907867772310470192246974486242409294991646564339659296311172821487691415387361518368358002232126427175348186260983285915013630462489800994709039714768490653776139921591148425560513222581914691269099627882433950238366744049435126864696551517102338574990439051014288641107331775276925590557112123848552944123712559927798767656060604001870745831020943534367217710806627918743824819528778901432361132400874522503036881964803363227725213671319249255588338379558944373081448848288914340029381563870874199421074704225053940653263054076372331153673021564933861085136777463657122583608153245145603654759564012552343708794221112376282396672216677067893583529685387362866085958575144207549201885063634649664356022770450599025073193635589697904649689742659731140870664049705909529992131119908451169523625982480852065130458048303330783267873632661502527296193654564481985949017941867590637521370248661759842942985486580506523527905415291993129997589693562083571993824525692390012764335534053818968643292421277387911598443675823895632044862101929611888494601135784807263444029447043613253239718910969875605613576775133853633741165480175557199106843404370509722920321859723309901527892004815816154454240322704330590162893392597841258761159890728628197646144967822207646701728736399384331473403587477868423279416635027533248541770967263778198842567490190381802603584303232553124123738656775047738687142923133780711030685516297965124193566037052352262354539607323266508361484876586175823446779222126520889533051136757982925713629289751952089225590370193731715841445105382621870755409206256938181565226769507387707852521144122034388075830457994525416533663962455970297774911851804521911035459353309532169948020448427333167113803415885128164774439258952605402088109777145211067039266101515402978544740570697381766558881546774239387495303310021282368800400514079555621371851412626774730245176141487171901398964327496365698995566554278753549639947813610318041843322486236707793661756645237618569985152051174050866426218945874684052954853332216442206370490833124972712199887443585954028942543566576436008194402325554516608853398435525073932650524074286205850550540531543625550602818516054893310255606074691613285654709269754001340023163558376144694499945698271995324998769772391227717778525548481765287382012664202138451078614644891981447633443984616961062704113987629899385435093671888725031427992000013446048294556079409188916356329263861385119483041778470111323934672117382552154014552689712635622044067335585091419078549572685722517799853945139066113116557823200991839478980485148139756437276310315585052962711094520823502876017799162004452308825294752903780143322159163359216776682795639765675024359141047188281889450388835463485151185055730257857244956639772765885901407478608833348764219975332660938410968229409406088016572970425472041832771272378171279797797035736576275270098485254500981153781872753941048954786738308270916748413503252625251966120660459010356765817802826429045068657112315950170987790686087303575594630278186797170965451147353365942405760693758157024450678772714436915222715682621542648328393696771847903632197735143219253117775874065572827559278669061592703292357856712182245702829796197056320474383079124060345835424419150979181507698302000007069045583234865337926621992623375749971204642446990777626632490383499047710478578862245179305716165431024544308084192556089479503354600043311566543487429471050399741986074927517309966574629189828300270254631391989455006206141157242311958987861149970781306061082396476609746044799676946433313570016028171027821734752039087742788832856846639871795304172840764319177762201671679871703331176399614205812745806594113056822213610394374595550171039503669220580872124167464169590577829197969856928840564473147431728291951743418213909020891248139717532829309139307324676418134145138999363155157666822088563424974605011214474234561958644068385566981590500191642959522021800166068563481044756233678800379514457696678176805627254751999892080533501886765304008355851853948156310423934798610892860385518158372125742586604990037334390212148772332920836540413171820995316460503362722328438872099507648776358269375088834055987113695732969353422819649914493670628253189886707685826733188098490064699162769196462197178091601033240633742092060902726567598519786428036312494443148817711021658763571536644924743944370048324568741512735789195923635121797799038653592749525637165000255493407622344594232313502271601912269778165783446812278845417457586538145675618091493526724848167114864548061108275777820993568273138069570417876796279053044809083376787522011494624546074909061660691640637286419682093499212330107661282280374851441004473097968359669954161836104289719705649964194654369452812111646977860340985060266188051868138264924697766217093257796481229661635130361603763575209317631745373236794727193007345895568742625048392643535752017720886976385547006530147162370985119567662827452345951611661122285345274467812187128152772828198044470287829483436630828621443834283933061869973426636841662503174938088958731532564136006533111241497517080811026547277241069801619368046197038254330917315025484354794049944205979487352155731523443985515670321446995279071915493012622438463701624086676046991036641665468428667863243481438144104997475129384407937791753089800722213988580814506420181828434464111345849729424096408245260118164415180606108341818909452188841412079787980645835501934806620697807291698253154706727593807361760609508840206608172948784237440941360116633737918646533724288158512019153861656684310632599855068395383404299612799388078946939439804726113661786432879308541638420957312446608450673637732399682300434221464859925923221506390466698969039225502809581860888180763430173987356554433665298962587119505406649522644887130093859157162141940270620429317071422670076888270015287432039353142292463201458311748039953024013036300157681289307831534247803967378524151269240623018079511894898426335179627535676928729840275620799295814291986056942345428344453545269535794124327345707388409443474582974771283667398460633838739913858003572434702047552352950879994724952355013458855725485470732726133558254542140241633844025957105365419313572521406256164016462372080325523482769734126885228449084718164714605387688663314237773503394896942177771487500288657934065953470677148012467516329412866843212947650541393396631386347555804426102036080289255754843634434329602817459750576423199736486570021428392611373877893467131270574799604435726228651959220155729187266319233386485777943988660811844393451428256717646755716254300083904773522205309371240685190676214538753207966844645134821197918259003182495235479846985293701759492154378658914612708682142567444147095497018617281359110902117920725531122469148975703268958203323016883831569236133529003603833362202853118400173131984771412931859271574480640448580883928197270433178482028973090531595725903261739123015610187695736065475604480716148290769317072346477291109395091443012208320879788331725598789382708448112357055474285327626461197894056314208119696290296871946392825764203702558293596084592330063422640815063526516709219894586212199245909945107086110527318146202939164664570138496089256131319667582023030903220338472809679989900075966190134720802260549733743988009810716784814967132808315697037229066016638783617803049541403814297797063504097571959601223859618220236460435365468876273616964977582199141192717139286886479366882946601855885523540939542911001721165181303035250295757804176416487538695267810352135675174637329741832437202038317518501153696331084859275436546896784758870744418504221637131581695470043451607111498383586197039434557677809493753161844551986777183528706928317708570047213682844575429346154967850073774018951110599706445779164048664056208523721691779348621942136050587382152008824636852587867072370504325971481960878918898595254980293982721591693440821999279481942233518649498707717083882102011010920568111932250810913249902342481472764561569756057047564387676395955386968088987048250789547613391325196480282398866643140635374540815498886375692701566620478926327386180090314769809070586546850483645016414930149011180928072625396135675547919261758488905962683028189154974348858839670607559911538799594215181566419664461648293512903197378392772465968575275924040207070331647259700136865792916743805636460060225022009555911506758744722703329764833376608884035244776681807079272059851958248969103955274321981361055653095030882610383596652083951976626946931369787729556364440715932097751242497500001584071338920490837692185167860605115070019549822090122604643634410262326319800746320962802835287034390354111115865790874939042813949509988832911268012219132145696181195882383952958868481795589403551825711445660055304159790661413008365913113607195310961659663716376009165695349750905934408643499052196577976419823962941950712959992212234788580725813670158180525202141811656107580848620353789727923453309609949287741837902512599149154339176262431563817727378679677652789586189907215092360394745291315315178280769752824178866136127120364844360843686570666924377391665188451950415163418019008550860833335991205615992745172384110734413150392823334652249716284396986055940980014856009188306532585605420519999060408247632994088479770891700298117903439944095625163759805013608980060771557434355471774895250923968185127614872473437277089861855286234820208542123288985527978805250685814884921559427896393702833660533784695823628880970072319349073259978716833968468179590572694799891627034479004070759376277217793391752209577997711609243576249426419043330333248714674522314937604818018967788378992728856961524893134453753720792091904689980700491208047979392621587263636601034393317517058140153695430456108047489091988799433658727319727603208464797159018320689274278962431580710268611873345082042650017311093587316737506047072564104601699540422208265285367519250051097876841814985282642872180071842394128862870024131550427158424470800953331106953095712690997421000768047945089087663231635404628237322206056194051230418812268915485268026095537420507465353167347945777910402999486556725081524841236691353551068809229611287678981310879402131425967814033549233559647486789458759659524816156257785428046357885788728798334726449873717622126595441912361442030013584241365584775303418366701542287195829230746483209292971621640713714120962019145289378780969314257595128370406067557489678645404458053687082712789287239312499629853769537574070273969474157449684007131644293612697622540605642045541405898737405461999281923424705046372116343888909788638977762339671372562117660223660695670784812600612056762192717861277640703396725012445752647660972755926419081291679166524667260979795012933256505922882790031660146080407763031478392867425713264775858816101821915969759500481246145397674060323709892952582602767900235601067846724543572473980966420366855192885879180614548283832841466665075996354149725301338358519169323717267254062579184541615446217563552842801325876467818631048968727579042055430766829056006240108948018339677305715364169866474021158726443045415282083577876330771922441471903310208177751083536690365995902758865071635759854772834694926455251271950341529608500788151798625090215572084029028380951507817448298079939298183520695590038747651635996543349440728664825713158380373219558529466057128032322906043454271320772921500287417319365976168419625624605115776262120980985923226829065963505843252914585540909170419599634277050723038933433924966297553342377580579351310874515911272119419209407790850494402102776888845698141493104421164929231199034729805606023201679897060290278578720809957791951623105561111133441647850732477421840889254450727982538571816636875200828789909673369478549612505123453026030215697838939324904100215648041600048460039211128583146953718878628701163065895128903772760366897751078368367149449860760323482919313636639333077112532263506484449628903562140910917184883359776685061477491947729628529940226933346422619715834114167408979784271108750432262839890447106483996662801874672678069833459187503127812301867619501888954744651596042888493821496812330875953213277829557379428092928030401078060596211030759341486094758152719531736557706698181800703577011933959623488542790769609795754171725493159747905511760096118476672312212214368328427513637719899441014615290328882809796585736312071114005119700172543463579423776006423420286785176042602478265390069956838609562249314263338461011350408175605961013927967017552360420813070363697740897703263694257754856012654337464403965817533944829983303847137943128996206061949794495555772350381966455640399658960314931510072397034602157188468414498235332005390066923861865352437171408532901795023023963305004538478595986842966576827375616876814560462321033161451137536544148847560393613737181536328819284288283654494839769934062928897803037442335381073377792138665249528844845017487627988924712134129833878665284628767176241405461020337739105966169340002371434437030992017569093264600981712234552096820682678182956004241998659956895146005707847390853503811705773368682511571235504699508351848211408274201762880277944793124322084314104623005572039931534794296111644783972369615224022661119722029047041665683970708585749056976393919847203913389066146411665473936057926195115695695372679013803092665461271109469924054694941918792327473598367085225448873229547450901639248463592556312744455603370397515050475356724383915330376573631292372402745732770801947701519132781347983632063172159675682339097266427478373480515275484903594400622175573994679551026905871042323165045382475029142779227145853127831067763040180729594761438319420585431546444900131105212053283280444109163920317054623845778114784577652681377523891236283117469043861099922393013973145606449737426020400959335723260763918132824769576181564972959353534565137763089779652100094511330446364797507184259503543793453450700361208294282937345258864388186370815590043966329954654849125677177327740604000767897331162108194915690616287252972595860248117617268977717440000074061968313794506703892623292525804480259861766805425912512279877433662083855611776315705013366749522257941448775139795054547860959739810400803175328510521654357751870807142781191563107709530016678215888193691287437297082541468231278653445347712336543897189813930534546163421054102145489580924669226658179842336331091598641340097439471837720432580138626610040040257095582924562504785423881749020155620716033485839761416339278967015865325282388487004257267088252026526083144317305666263332820011765688760660248950414043569433347527093520428825842731654779513418611057685506312236998762941492403138134130278628895223957785888951153773377278219125362017598290832241727107181732628628969099360075180094934523410329138135442828417419667660450020302725791226991835309309904350519775277169896695751012666612484996123705824658061230636549341946353772353847256502559299230059708672205806258078192365971229407426411100522203370801883360978801045660422495415498395392435169201553938998447359782907217478259097827470124954127685902024144358350312650572612101443964768748398651928890056650901122614041238234484827589365452085753800901291898609505330030279920549391725529609085950104393364051410163218270357861744280293822046879547215661467548620526839159988042187655020925238897459763039384102623956395291728187832665657676191301309167658030267202643710625509623416068746532059528983901144863435882231708345398017370764455523600539902232933592756840568086521273281265548544166869155189217769253547646162274698681904982234866298619169147606728419531849753765787033118972568320216833418202898103877938830638735413399030740564216566952884545843561312568965256410100307415769201396847369236405710036800927520184308720379877462570422389272530968336374888153750668030474213183276584156135282037084306452805350387567036817741427086657772348793596448591205056211475960654991794579079509727749744145381046319701859330950696301434310162412623394533581040768155023230373375367951934091941241165048796250062129299057998101829846308428031549873308933439874652060342146147487112567741122821920746044030465493346166046949934759667809163747600240109859253313224534523318272414115305989077622667597620194386096109434183389241552231538271746064990361981994758480643400109172872094736135632452901332851948137971314553706055023957966448686966821991071157048343122334001260237583112954121317179044296283918200831396802298468845835281830105166394193289527823526663377548771320675672435904302829506965065381751997283437772160841249722003409268884062102256196782344983409233009570294135858257059097270907739258344911489341204245278111169086281184455973633769673687311268585203110806661036758146943995527693971279945008388466314779754691489727612537392064606860749506761615404385929028920080939532208104450150030102765923748624515319131703319720895752546614973524876482149732609293236236247273777247682281412717649106363575287531179493828389605764658808933368078871183171217047349880988574824325448372362610802218446169817070746575905701523040744440387553885188323723297560118413455086687428020491756241547694681510237054642664561138533959873257613324391861408301343062755145453231896143425698238618820153199341060086040582767420305271235520616347786529138839814469999702896131238637423238457679536703133536334614066610801078208632267460386521332681908693272437495162368891180048919544538231408211021882239835055241719820614932102560630354408793308986702893896750522314290296683540293827484505905300023101114992678464105412926567451101220289034894056181353733141385555104182626617264287068129416704930481819217760443171667541407462632641111979636261208100709624085412270249731273141538595684501410362538480004359104643319518414061525957275846423061937152965946901155002156142045064539496986370236697651210737114979925333838233483192299783546734471866931551536263459780264970260754449708918898646840741976940696392398098349093164620481102695289878324157316315265067700879853313949779009728011413535569426979582389581110912157244737931259265697284970217655135182755148621789122423740790275289578800695567912194172232381437001835055296422752802918477505980017007907830328996730968596231403288779932382828401789209564023214626352152557846773852252722874386407429775877571315794193926987712301114758359459503977627104506796335065315210696845619852741005843152072857586021494712277348477454941140247292113886806982524284931523693052325966127425300967746893055139725681250453767381048254515620100529385732505537575705833592952363980135107610728887764666569723973048108451266554589176904835207707227061181003264797909809603964010740136778165330131636080406736628862983444586970582772349185817537741391488455814718914037828201228379025106991928961877954472191162771803243900838963413363540922360099635689809501854005721083471139343422463302132347161478224568573755012232757654186967083217823591384926492065733104917127987001845373958949362819097899361570859947150307057739759117086549735298283819946900303841606500062502318918356952336582639401806122557399912051397857458771314546873219089182093197569434149084560114632323348457092797433851092597638983214843267901257463663134781314617308650305690845449700988250818658679957942716416638441577123155235542071894931406458086716314074927818884112642886658753625509830302008526793083053660843091515069802823880052816971852890353005110913111226709140643938928883849361969638411929899250818485685497351413304912979628343794926690672319498774771835144880126905945243021432825265901074072219675205421551379944471783809347780511228363292693403155051134265892661797569449245517472868660920599174127187787266072773703505077452795402984339284890109683702584921296131737245478223242813633895009345139605954330605487395849639794196025882962585218410041041429164367732771713486946842899444326395469338024741363056416431094423601582895344849458557569072143815600281853202226854482541926313966220609663653863085267317512426610902406967587585145668827935607177770167562516200765317627419446873064701802764040551347065283472151903752719308428159105984289801003877027690073436219093706923712506639592307178568316033439073153303229391098307418523745556949162370839618754825331714657520945252013875481051845919728709239722269244770125576684572285165138692025972298962448488064282487593614865073188125074142887636760634331369470666365999529301391916359895775328977931402715320155854718004339702657310779570651367343411980684708960460486854085813610752944735823372229719711477975083318919444329411604351499806575223073087721623022082458857799250279934773245731569510756715017313617596479814682740942606042680619141077209118785093772744481092324182153082120461148314509548822990848713228383587947163388561905319606931240687609278063872344362746752319253909833481608694446649396658474584472355022720916237042652989203977511744555535046390355716747577476430768291790028136110008828218535184055926064540415942043081374080942301716267577776825913761241698826441242707207132111082549055297779800869982368478064129006255786388275389167279944085935618049212708094398002773133828203282452806125310544290636953095062867364164973356884934487769366520655412414671998178217851002471623636416831521977100539461389358348201695611378431285352130979354332581354421771886107996693593322598686163173091956900566100319732711910014276847848482784607549460708071287982503797286563627735864685203387781411711447488662580506919074616983249559689439820043740266093359451795279470837398893812510457712164918416267341168526716387812302708234976506100956892054099586007977404466522826031043604785853756197203659574797542326864743641930696275983938639039383976918529453645314080185326049716458396631545041942484131324627562348361695524825293457752765911242135039196794110091975825747570795386505568799966389696249682246280342966618524092015699346105263218024163990791087132083482297903130763979613473913387176208922928712094682675515949616267443388284705478374658029384543881572979624256705070684391120324441805258828422852509250787864822604748651961772908816194380783959811159097025994482453404926919796944922483742026319123452985413278017571278566886309150358857124522190490885881345265863704746228263588956571919236644608937090368268874303754973376288862484085353465640115041462926017035394130089878665138771334776409467909158695157752579971217718909443837122861551887220981191484052592382920068292711250569816439601772572259768012623447983369317370268885112258821014795706180517495609583877032038048223764780202857829613900087634097949867241477820722398981112549887784310561560787017925696945478944574899189450789104776948969124427698064774021771308210774498675118083848377140246948789789200127922544042988206918987941080213229730827690255539103739275582043076502307615545309193623059515142968291118529600993950169553663464472074240224949614572614109928901068324130068211147114566598653975234575260644389185930565044366393116001108968881017090742771477265223806396303581603252017467829710954822985343413521574441176308265778385626082663160908651082450850219494390316261203030852320657614703993356424039212793921477017152023812702975090180642248767216176787186820146640075049858959179489141898945811981166766767170808958417303432764811446543595418634015844195047934691554050223561608312574096058566460662719383507164351661101386660993035073313069955716804706013822525515533056761110682353978362144060302654190404145577230935702804278403687876413224776226002198161508963623553291372473425796690649269790459891949449662734434497162619543058824618041217236890350648441493035341339677722497236966734545138008331189365802094164092973437751412787668677178386372246386901815475375282245813809318446288294605920682942075072774629822880638169371477662359989082379276962773285629649665570212988295554230364047191993415244940920604530986966933515031262488004170410349415695604383630856473825495652469190529276541843602095979249080866386859816410557433030131120597006919307418842721380676606492045017393675143982663469887726869561867405220787200566946232894314890798822098147226028444874947376198263353641501588628128443875786381112926797179439990922916825839092357124168749174656866448968685552166470253991097450460836745665776472567072345311249003579071254220431847829346190277916865241513339550320580978949242251407171309508801142462524615167545251923953553812812796260665256935971137006909979688518557390466617284338472954227671934777936276788589891063819758889652011751278052432598139972244722591673113941914651135780718062103411861458368484552768493818792461621795938862063507451763056325760717280557051015665570040719485293645791748867210332743309567807945264041911552088112683723606891810553846521465344581837340337575816983786603970147034983592476490445618714709223745252830335030049582105783537791929412139077666889615999658819848049169039429437562782426105040077835870008683383707489836861848947846519033195580928067520781916779357919581684434751406228043820330757395441949923732785636347709074020264905031104602407841853676929169108066940640934182483936811287487300187931038293402458787582994845693268663457343886526115370317989144981530950100566693608492368194385097064324657539024043053941959974602378726196174219543946708813954653192301733919067704673869912462150060977427632515602398636678171393136327767037299342951693778873671329147637095788215580934326288840911910852018852545035243020530629293621139561443932574144697089598068829122935731776730489045717358325562473156966942186455302127002114022039974608747779644709489115244797796589906384418770997189567851284837589695124739467392960938675720763779185299900011086163519213780957046726615385324925492817408567133339731588076377367093080077926628622522134161015406886491016458182682593162761762379998002418582226999896385410590275161171583552341286538648885208081413890952551752752797152221884999513693097781447598139937479799584372915499176297136232836731630374010313502043942856037083079284572855603421118286922603912225520993199838422159918448395641159089305976756705607255697017154184132277599592427392938983213868915348765539995943077594858133294717775720439621772454892132175003496794944803486399576292334316087142198570183000261767196592083498937714834808242405965785655310308867240264750725084240104837398367051824521123066238391904852929941093000718163245431136851931524669736901982562996216814232339219187517362249544143838108073634560101557169614027499080920897378574498357297870125151949273252611161270439044500436215339165600634590130638837538406159637912104127317075279667888957046588281010056971189276119613442952242095845370940420408785438221448450917300404499485015618821325815982156305406684467854915034867591295681736123801644123903472484880982695945490420745637844789016272486813545684665580677166106400066529378041174791179705123454191196373928042558220338091435619540304355802434014630796745807381153118372758265098581751614693253118459658201085261240929239816470742412216818546733542986999607169421929800394326943465975730067446356260970304813476771890576978631310520918610986809549213489461855270160970352221518582845449240776827108303819094494349973652345765519749649310958102444092065522056161957615174661219101969136249516408701120946402626071662270491861796002047372616649580878748688354792295293871534443385552049753198229230272437336753678022532393043874055184367911111756841551329365459321352608483315813334374337310568596237612671310603149703958105283852010022577250217733701047198419667300512304972779175103484703105288038490648270726239725182927861156936432252693896147533649924016941277794467332256579075124762539427709667169335313670086668318029176967310803557640237231328476703794053310311820101309395685542141383864830782211759227453232247222599993480652705495692598122075926249149059025080339063266945367639035599443590872363729278907201041022180650203892026357573097811468229412919246771523165703253446140387755383761517408100583680263192942088900969832791145099411098175243011028495152388183916902688052544899401372205613020195513891997531637831222041877674524454439472945945212254095374591974227370351556447699278732972179879420749801974327671114047748851166038416940672866245738532130035162815316105688928284265191769628703870398388478524535797061411200689742531616776934946758693566097915215363781852121921266589221146009676114370113880990427548952197197793587964394675135785553969275488255012991794910026117762758243938305646893882803367448467823194897238658298949353783762585384450212168523959099319015548041035269244644024724153384295951342588169331291340066513552922950611042664665784552557527329526991222642332215088273248516866665361603520835955238201517248244853520194287825971728930306223831381541107286874995748916814798772743186221871346550267849457341258409383121259355173215564802573398512742704407407353903309711766205739603005850572880227927179705863585546462587859618635376158672896533233699549913407067756479576671402085350179079209249233543131557488175982125732060048551988337610948620176856392229720122234214910003609592928397806655297646929652255915926843451405045566792524234905885047768125291074726237865711707059430190638416289880363751650390879052030444196453432195347346546471973595196025067314493203517091225798046431962802290239671550536465115332623149980169153056475053547607860207391885581969225821190724446164347656307844194594110576792306538361726391459536687379047485098306982872205684718711398869858317294785706246042607703321866399929168556274085551900157149582074858798858927963962886642316870029583741380775822184803732565395060022164330511870278833384757665789177983496628191962352707765946493535189857347970687549875458419045145213049730996897937959794156202605143810611598713734230136901890281412728525398320287477523443561838173293818292316049345833632539136167226924039140406480460644135895289197019166310421168967015930147894946958187321911099505281897711988711986440711206781762152755466176871831112451052660929435148527879081317378330218707839157868046840119670787750254465819236549430724723180882781380800498009997681913741209779008348640190124094824911594977145019009747796649127544460467428600868260071783252436776499503307448874271267037441639349631669659614339079901183854967640661714971402324716688608371364540073251883464247008581361272298946073942177695211713468753824764056219306029960615714963478676063271289460377364780779908789119694374694948721756119137458611220931626554435268407506342063623259853423754193831196822960510641939047408041517463239276398036147791768823711124554469403650924174273895189888261773301296597176093238168673898602284494223265973033503023529023169812999040854518427316573312766087472511745078594697118939720977713302594750217872938788577622688281692810911636801747417784941249725383961109844305428477014392159551331431076168788988569290084440324079103589355431543999281199292075106877733449820167248665228704540250235452159420892950731047234328569696921783329007157636061574786939467398213664407458777725098055171191943136064714165161316072512894042066104560945492786017799288070461971906640229475346422951137664902689538880023720233208657917884402752519306741337770701896574672161185533453422328642339907867753444909885936388031154743698567644292878171602323173273194876934667058056987393758751001171478861250884636993226549158207023070147724477550431365239144561160487466568984511452077444385275342682659058686754277070638882719331385445448903571853607535211471856374412735709013764283377436284460290231937342006032339701827707922817442089847588744750494996349517641320120671806850677834301397403339936324196914179019238540804491813927635863888947846261154343056708076375323933598767814935726758167789515936496642310804474947475865687661340840217148070121244073595708069268852618981241845239625501954372889470019480473741407998604411900951037029193441263418405020994094303361480076149295100962624745446550467217847414473500041749715164653532302920687277804823616802221784964851015064347929101622179630648327637687380603612754752974970029149053744377497534328571746960809258496336943458129317117108749110943530231269560651773367664239430832362186295189004611440592803547913033137146900023343642270506956296218655251529600728827340284662917217550133975294701804836435603468062751800831292702336291596085862177615293016738724534504884272841122349359660602202190360922370551132725799910004522848934386417702739100885687810909977641047143363695788010064393522909865656672138344979003352840989665576735791189768139643655400593235417439345892545613635058062893557581403178518529678550854034011830876857075004332710375269005275398156726238886594609684164522894656666643117415552255406921470418708233253877054918082927050214470427530282060399553781104384375329931827341236247969602131021426032878342743245861195045306133939322074780233254643933422730663181976488755094378227681335718503138551807719931614750344541719384731755237076027863556146460738410843506758494102586700860138868618715321908492007126865589707875689858105219292094170543344099565493690834388075882098724877634249396705111127634773665575252350634275462563176731500256038365869233021602990256900032352927488655490124416903452271837447299576242220639010907061858064097277856086727174377391537703531304601984931766854839949112775796533738980020917645130808081778526229854568799545636474153830960355056110667221970651174118436424704955422926114611808924206118633986104009778463930878802091271348693806759042132848977432544907839407229894124083874975784340941411789865437199229987857679079972812278866111383228117434403231935742412951943355777337320738797039792870381403337389249836994358066884293071110536418096095489031736481868834142904129262251299674149240088681775282677536767206682131494660086697105301879195912692669752737013459414707875332326832316805520209926198362044238796117915453474668621065495507685425295760656476351263333253557053579391889347869918730826586903927618911562012746134707451077209085361192437234954620077993720817707292652708920276099798204463859903235184577063288658339775658030543696920328358660586443711471963490741241704808567130613058265648429056733041283618448067490882859963365870952030401758438815166830096400653200589361857914073145024511257892789282012220366162507932778645783796644097201418760841458244803535271505188446325364600228373038329001148344983727415780410763608177474534085659766722855438779553141472201463883660140533273604776967204250729068893701780448002308249402131898895961276065230462135625138814289282424482034365894100618732231319262029630825600077324878984657127034891232398030151880850241090275223242683618285738275138652335488836850092016887233957720005123868359875312327017035129899936666445612378536864845904651190457646440643419208135324042038936473647725455300569901618785250323245030220455885019543920298770089651967385349965131986410066329735724022730291043988913669457208725464761438891007894401376051232101305572947867492280324821625860898937283773095038586551924151489767910591860630091629894310383726671100588154173294223723532094395594361641772465744163614789556332071501898580910681585287558325199372423177803751934338469445772702432876660006353837836703326676911276499512012962582693758329854966142867564873486417870035100330795449024284598485149429540972856737011140039980827119239141453802229603530372324417112527376064694011108981738030056876113314966941924915704431558708610086023561762708054622649049338521931180300209671257547211129794234628485633664404045197995878735616750046586846414924027073838323950629857186400659775611342196592070598169552997720795851864641489120086666175562439645778515180160384529046359837419156435243229978218877327828099325455308008277836672418275750435346665325739671985506750834857577562045612641496395264482426347660689847274946791804353362366051874308617906390474552359039812115785633662445482431920223051425348154020780114779718873485466160750066983756633375027947280911825376031437610838390417455312417927418478813239767795436873710212137850412494991847465160047196051375938686881233218288388039855640742456557676359641088365920800229589580739998212276979988060059286433886029676374980065493978457898258899695626513870863967195189417628051186051143850527902484536697960050092080018734068164574345216950905142467408231172362206509108459790789900935688249765506819076585037292263329658400840334443703911651918318863206224084506177979352979979285550048957452854769917110802987647100565140080883702332581718307479417361622995966993017794884062651434505397196069395116054966387078372208286495937249742717634708016775907594277259435004301089035868485896786714358190271668478971333623690298798338050336370164705382206735887598487705212548608557462124012177788808319104211003460062057906595584891542518494477419946177808481450736030647936524026490478748604770354459201268694152330901493672916895616887540284078399037382994770715721275703971619812251168155469894038647837135488907360139008313193339134501666772312541329083212102053108202297680534247758836007215220486139071741091128638505452260822036101738481918768120578834529930885032843468332338214627474749848240644896029175385104045688659856645221426062024389308831897432888911414414944316010763331281262581235973890151347909426838718615554968270002332886411059869219763135610736692850809498283104418349888858763568626218359772693675365334335478813100341812132988089348275392076257605274171608160729989915222663996382159687340262377596184844167241877430499467266696525961873922792118255327000888738216608308731076862754700201872012123299536865580913664556003609198864693989255054400782510467971752863106194886628216151529602069027034319849447481284632401402237915640524566126561377818427940870089696647162768112040175042203777960661383494935285891145967925288239477168587336692115864894200011358348022914538241180031723440081229178541616281104862485893862931314781580929099849929790025723663385256738050541378141257540675818027576504555692856993175194886865046922723986839223166952291510690890165099157192201938772180073744361395520795773414273656501934718321083650656676350516063046085473676585281605009155309372032971540546011226179858420919660100034986158006779424245268971529623483525659750103449182862259059710785618881444488273733830185781054259823531070834521256848926296318580901514461365294130225580731088689780519225535627633596308381077143519930759854675257282942009805297410267669201305522661882855813495497652520497056053749341782487262654372295554021810241157615877726221411357389852569916914983039078011639115242061369651371401013692164044884974391754028877524959096257867901994221198623002816636508756310729679857551117387731256752689642880393660681171598157168842922124970023435776343451437495070027872413143136382052730545706647770154682968890759108065134153342367104434332811695524280188861318426064822703530749854578337218868094306156272452304474994533083367209766079100311153501642596737484121665343039295709715162425462481765140610641555838017962917754230969231794114357430700387322717740738700586105183786602763547733814371035174551077017360266838442258888747614643313397379662416429156052575407391376193894937027042516265648175002807819642603937857799995239621182362330573252823250875082493043588960464387981115975753794299806069252212548430384332671093753746804835254281830285779599456875555812405004701236669125054076108557987921717995111107562970578244152387726255085686848362480641995183322918564509299994938762357299373267298403967538867641015301737963037778935533677014535475081011324338102251375453801006253492365919689556561806644926238039334003165876996374577216681658198479696434174576239983489285798119562279428430558802982138691171545290362097942755344284308392470149696692385008832170298237602126371562027732535865155136205379622116039954181782634415852155025443272581908624586124718784401841161075490255822610513885381104394407242095324645046737970945278053048720938057263899032107869608840684733339344162087061315569141541690358031957803785560435492216633041206749563324626493755605530361499281079517131761927349415342519441964635054465887408014195734522524559152447637762736882907199165483902875080669207754106332336256502832340626975864600210262400101441051902364927900090207197793645715907214990645793468082625989637516323092550321713708619296231930612607825968554907168407524424310608239531294860686660184589407429093110615079805651419178750377809588496473618838710537934025083717492051238501689615871861837795819859955137418083137190691464237122867857076941113699916940827867146546635155598183891552561999272509207582038186215300842416270615518293669136213077130202556885240270140233207568925519285405771849714349471020896876819018560735591774498811447805373682376709486718830434425059480764671062008087684322053388648762910271810955868607713741226069257158205406990492338283398598719259050095358273501618694951416638366242854951116180369522536621635584125214368967250494375705502954384661673054380970138541985618333307703413139071875739741609451613880135268595475819406443893674820007777916208203877574152238813569011666641007250697809462612754152291481878329339085734557254848138124936556185175334404245302932807118460919917012991472799316658902876636875604608849255271382448180701117467463509579827179311312155647669973918331820253398718845511467390114875450661531306595628856340586820203397692389477774363747053287232618196637648971073255115453659333031131019093837523754490397623506257940717326344758993739373009238759217149207727342988082941988655737337424383671105894614626266075399694177676862204501649525445460526198676572751698707949663525811638304723613463002135975787275725219470228977700513200757408099214966882862640139754551084791362693587493746696253240644150216789661628399342329702628214903408580361406044014865241815646434858794634740793744505042692975348467389001436204130244618877930798247365606706702153056279968717165902109591520761795948311965675398848465582109509788726131456674473360619242298493294306142893529140284629321460464139719168132403285421872814168793663610126392388471464309607701426225262223971884231211723241178528251170093721871534270061933311595498730543615131823936392577568967539517223475649003844997070368418613474674308765914208900631304862392751757847981277864004326705435717501130544568703269262181355349929067903403360424878045142937824589905520457189140714116930371407937881364516096680848055029622052790141508054303412531022029881056493817180956519513504013831135447586861323098418168321323757426239151245839501767790833857439105288430536520736402976318014980944312078301338747341912237683935233667387056271874000661136024717667617300205568593418411197402206628045098944517305843697594277739425160369909705027815638484482958311632383602361876126761221791635737974614019349604656322329612011064354929806407903660084039298666417004372296693731604322471838653582941761393122932124245459427083911147218652760745724866541400780804430839314587578113265531861843024870552342479925640847791089732550690026132077594543080636376137051201361452908792574156595525593276359496205983398608460565235736958415647552120820624337542814051703358253495253346020518449244995570377607785573434495947148424224572744751333165970865223005975038198457701646057586609251267367198979242242018515250637248688088871295146174992472816153707592002816226506493229697005533132193458466936497983217095620954670749188705355212240606036419133669480054626067267215568269605394789349499180845560667795288877079118365476136004044472585959458435736732884420822122890055697499620834968636670013561346785109748994354356515605620136568323207434115673380351968083658867696759771496500802578150156205511916453484276295580223652617612841420795331185687514955890841972539396331337316916351046072476706623699657385491293952910671198152781372078025150413035333790575059925316323076926234904691078439693919503812227253037319722474445107099146554139139585293136217432533683023927670384608882517657875687679367688826802695940687804841146418106685395001137486599604050942632173426026287127546531963762849816204839507096419762831052044956594159855004016940136789708720248178961350768270834378321868474677540495878377199733504049533538772454398417964054190556459785157395626879579992047816425017023482764979268964008018829532737403651620554211646915489164186182798316074919088977587575253262157720481892314821402725214316039005468056289053399124229893419377122172234826209868816665230233616502919564441257594581002453851979454393138900571698717665775892740867944879706667133985387529742552504368290666490233018000734096980479808073945050477005629620854568828395501105762860460748314986895073828914679474789748527513182033344638134277887902612963472901444517018438143417821376462657187420280605697389887995845254366288678659909456591066483923766921200942698991230878027491810036505479997723983042656597143100832318711397560932673606500607519587893898968006511950931308681524097327560388960449834255195599188432513217605952122193310060569405443670914525358791994638454429432326366615887989248283154920673603470580706613831867548250046983629614530832844894203115195024594470646988053908339618926329288307421635764352491973317395839783857928097959775462224577413155778815280270140280183489248197763398347358664975682943231645235787590879860390876066246240379451402426464566223188847688056924183288654691332901016380627219840395868061686735569710546245018166634138876378118656412460912988305033297231269719605327649849145386179128799275341959272146560632299549028810907091312356730423946815705261442498829696311632781749438332180642260451002539535926743011856879965684711808678271008917936930854554716587677417568858142399652272251496972961508077595477789735977166069206523904688265871486630416729839097194434388762595270762952480989071480850435073905871744681266533585665209763017293860317850306798448933509154741534217851834293717229819114541440577969862986380475729358654211570390196288226634588777383624005694618664604870482825275085166715081846966912011861668904757769629316542538464272966966702546856591634179170709790375852721660931710156886246555638054452364617443736259004578487317781662207444596091645029647595952532876958226373385749776121833977179892556808444531368422986141522654432213299872447682929801506860334099132784318954437215905328766159443181948841547946909751109178351160298054745607824597883460815700319418238597794230052904049854114762246201612608843569776717411765428764240033085327597705212634848400300748421128101784787599628399531772422652689523483453978463030948044199270373213609678688893993034604283598130447131074079839261197575844478543836718669148410596408518698649459932637590029734297837119733638416379734691214400231064602461058933789261762335312910074998462409709331485382264652492013791865251784211461623485811942971957458982269248373677379612275941200724619920657380899508626812125097502369559452314833258864413444720065537952020975396495991850901486731351518109598195687443139747651552324013557805886418933529947085566865372077889287252337948184687538937257038729540045045833436319085659052025791360048431816233635756387365413718971976625464688697596872128350645949087909756974073666125132452461233459265630928358888029908714397813123863792474307470691350937641561754523107565386801177756340991837065258690416650489911759226201293310124738536232750688214749827030955510983784128325372475161469965488404257495219056316372602483751466340010554492025083921368942015863898425791246738845851872718854832637858632363569243155707638645306391476136889149752807275946394403861412170215765362418180470323040380570108221370431503601899546230178315197685525715751551466151447719649094281690954346804349549315803597832004615651346211887077409928332658606628047657899854892509258886520396187956748336897332390926965463883841175378026821488605835558124650258632093049329910306812195104846742621837268128757419047426852922265868309214297082105469372575975176929180118434696948478735635004350260201072124473173510817529991708783527540203507444126568487182014012707333059916456897528833512138866463890054511850816447254550449860466339675370632744853836099597683423899729790361675693473167044458084656898049689383627760480335392379511841670954300312096099484678253036901110456621552286014981635335946702031364827302207937992625799382112541273652331824416795506012521275422939402357983947734074160692210440586935413034290060455485616966151091517939235565251322529005706626616399840747556161292409265342001828229214224771889207206563499360255538814431913796473292313626240757295374922151541505481486161439447708184391503375595637129668920933750343455058857906266102795051632484347517785978295775323313411556403338574996054791232512815178829995016073083615911762912807140943265709421880676954040922156791249216105364614646174270237019981464259861076961147343871418287024208577454102744157251374605807559652989668103983522331773005856798736211784358073721485893715199859942143076831892246250938439460795076346481880361828367706783175298020954885880573255887648742217293879553030687797055720059330561244848166263936991471959611810810988600032990009574880224663426077308171049142086505869148868192698897864934503622373256781630869980093411805561454357990857799965478299502781275790717707902607222618674689348285072030524157074910082856597144675664428920309135370902987523038654736312562578641361947882296467413488060279839437488088867599828236051930534701304652672217445735590772535403370902678093448222682680053593274050927198651958864999928587927875397210715075391153809797413174486913411766000980892551332294603430136868166360279931872592391424354929275993507786607438760277234827033453019219188269528949249774088459798992834262074116509659699273948423691240298934697772845831203728284342734080440582279279449385500813880860469186297615049748852512933782219769723482671459702540254235044536179822421216874614525001775749713947605392725371515410220051017826506129249370210074713215702646718970176529713529170846693381051341914295151409449535274191100251786675606588089286740192896220173361061377707404659207467549180382211210880569761422139184898779660299310669338557566288780097323071845964934545679097449303139272190049957007922314583636747895359566529361116457007403202909831940409008408006455189265916040115644007700978224902795314347419690556022233793451243422812163267353732124081552859052790805333444858580117846540174528080705596298960709801527940509275683218397940646245808634695942020582766084267011458198139134217769109493631186188584034555691133503811542411654924031597346116788156563936844605336064630810599891078683964173599911243401859150132908382095509344410768769312197988782293593537198007096111765417917288730733276028826279830984888069336133917241494472894000984748321005289428136407417143383750862604881892027565094938513244107402464312659770144751611495298642336640575468116437589335038757968609333810029938311287642384822983177956957457919821467535466615144194479940271281199097752277123252119610598482866706058077704801683207381237291016268712673697468663510162172182951210923396488561245335863030883344219370043264835426428832682045085253755391670342298510101240791652815282178053877948977154259387833692525521791097260735254755618317567726589263934090236977898070488889533001768033080964352020515624465895005372854060191248104423340744299475277063476859885100620036971367756235206040881659896008808970295379153880140188652519053561359286184993498714652572977374716481459400154748588295102164232072066728177279872344476533302549821537503226858890572258422159433131778568064332111856079614287771157174759861565675947119039965526059445784239886587228092494363643338630209966115619657624250037371779165687655095648387588685585792363772629008898474154430690326056968717544653041367105232246651558722455468732326955756053401047309862796011602372894278565100868637091089758266599361238734206663049144555150539070595637588187554293181813486405153628836709662862512993035807782770529389089919949664542622271445208193476990560947875444134292560734053337063940557698527728823901527391674988890430190248277740962123437623771908281171405783186441817996291976810993186075556557998226961899670505172503176970478318494381174105275028007164338657876084119897513726133620867213265307058021024183986849152145662738263711400764695322920097385398830140165112304853506792641405855223258965232350377597738969524234776253945915473091909670635824951733894422842441690890589660074437808252302182164094347365335981091810165325498936236852670961537328994524144662622431693237259802425553316465647703219931940096947383304113797575355299426165435216249264901202435937549720565760272838440903152626779553219325273970382404419424587985859846781540788635587515948941100411778748944502650203511973915518963080129984974652062938675447263343703802103216183312660101358702610588424035217529640766864782156402917035720017055514736724330170550520652178702579779484955594393385996288966604084534992808757887299465721086827531800822034503669206341119390769408551044063234359031185562305536043937417842317487170226200062346072656604035728764188813684832337862573503838491030861586594880626236663590941386623327835927321717242261635468987759100931389908205337030770125738718912435770089268772646148830404363784732440617363888102030072243083955413007193831439679970456749005959094031979836487634126392952125001974832070209779717836871185108707618032380023315277752035894893300486819522695218370814949896932469516548422492744407152604262917839754341539982172145176473319158732484361020100096843159572114232745239469462523284332950336060642864278383011730314933243463477469646126012777763143946081809278161847363459726085802082993954311369716895213259145683275933972210865623028510820734195492283984272237171447600320627621860145163832082725642648053305440108558000290856661858612943374585011721473586332779871910908665438633411015793112979556722608816324261617218240188630575982778748753216923065833352233711992412960663285551058869264633439446795915954686294614812267851897476985265416264653881588951986235110499785126886178087546621762307192867904079329799033213058893242834314134564638404027209296264546084794193282406062348821824423155096768904504497061310235195168378920891210746365273129740636575425724775096719685973840576077625549226389290134994901861591563708501023107317433094683524423566926509537438379112112112658879915751136317409207119917901667329649860100149711346557414843299024723560695387656137649394843018433478356786091791751305745282035536083934703526256356798287317181098199795831694546370237474853953650490965856766206827600821037559521394063663183057061934454436641882284337706578013703943005306609352594266289781854950351898955694436213541830663431623291621695983012038496943108637122750855537092780036012131708176091919272216046545333582484727067579416840034091823452982412452608419924000653635798647992947937057854184661089608239599508185063613570334829533970740227350035397393155717000491010204512679354461400115671394772335434139709506541341677872172226232919488944890308313364141651038254765895622435753193383680251800772959113895329441321721859304347096223992276458699860095587401063244938903631524427854527566729843925507208921156170380241316676078047203333145097818042063695366164952250125868882199360300793348864318938743538350779520736015874513241645425213979256676823982493109630427250526950543131849623812953265194125672661660564722217583709880675198616844293991683931488262348199697465820163923974650871923890267949940031368580963834738838382045223106716399600585770193305784153142999204994212344264185603545510277282390117483700082920984635953011329815361699580130063349632704773033869225243280908569596520924798977694322277132318091865693169389910910818137796930753149498399877281880235453475339256418983891401212406155809988252657479354535872175784013808059440368582374626977844863590704640726364297744401319292782694774852043441693789987538844035071829495800277347848392945872711029439190143738835446051406882570211233732353055205031785601381001751490539891533463476060914684491865795302793124812634292938729258908548785949974381609026349427257680016784008319822904823431224402746515750618877298990789566549591167421981146525982486041286695660346918649040893890529952835320375384828169153724378204160041109679640628149360050340719362200395015558988046003444392907438562636648996672619995607099011884690679787327881837494215470994195935009191107945020127290308719121239731563844162352311262518412437733499009201665458264015815084041372907673911545500186625364412514055512709567948836632239882862499529369150873406945635957430892689287223897788917209404656390186123754643704792312526659721911710831620882926714044399797932937935874846204682834735444913029508832604600747171792330300686670068879045983191414914556440968290589354551936445290932282717284780345437528663826658911009721234328805723634742252808426175723315214034767241558579691071299808539939227912672632135448482769304015962884348742552654461754813556572068845625918388293019201590573776635466348340225490519233570427113140964091080026750991318428149521130592552801650429338683804247951667750614813969302526367422406457815563011843737461106370447413823835929427571149495806735636579636505246039196761251582998379113194960798374548881126167046083541577264690350164040695374390403760483232487426907969264701730604605917641115872186492751601401540768096893232247106816237370071431262516928009116525918031071732149607695717330287664400388449004944403498864333360834519927216481199359488483600349580811081108803258488028117205380233106944766633970369772033836667500635856303866070883281834303457907185374443436889871019188538271949884260374458219127304807439449908032641760467442676895825187712284759765538892708197843487425672698947785306797456136861074026466056025262726253521599259674374717153826626922252778432014097817849155420887280472049764295288679353452257281475683610989060632309587905680120375957627610190163630854609626389444794718618646337790455190841902049220437390756944540835564472841204458038075119485233019599800644385006444878260393031248453798817756948921281426853927876203467130843966604509890604936184239397768012564657747251009692110704436962950828733238200269704213001973708578284212609185512288364053406427420303718076236718966075921928082423103412412810073729438174264930535115279310370809436535349704372122092772808311205709694838483480566612422178866540874830727924909126015149114122361383532493824266615853045739591845281785115924981801565811135432910818553666710891431263810106402449405293846623437189678807007567580086177116082086508543729472080209244417461996105698618463632958636895512937468286886682404553092230351494222523983785368113123054100219201694508508160335783567635083767105664768942661296097468283896289743762752819459804356761526930363403745840765716926799790752853383204561001290717065254048726204539116643589665766760207503852419405772018558805297914315650481025104791231536384841908392109956913137298910477627531090150672724521128080344094934375618956437285199128164017185489864055505480273524163381538021863534274161007995170494627712376739573174171577949643459882973059466169081648635125606820015220192986268562363724238995378028616673102128718868859658319934729971451370770952241624919178579880792404688510246051074486244400907290665535504891210734791442862664527925011154938086489761748830213420041441410795441427287670967734944140175009830148176010626330199995334445025129924805020099189346881861627509479431811633412006466439570334316748863076684188151895455803823629487713358007691599760014770387051723147876917505701098914898156122133031445729257132348607973498863402998273351611396186096977683334633642642475919666944082526369731541662808000659382179410786966504805500337258129350693101053207255202279770041500327998007405564901936828562060547815868627270776451890278957005689876700179680660140928575716108494803686725737227355919718772745097589449324636885629611882714228876922922654727015549270728493342955748787958683652293011241684802436474270400250339991796631824618261137921681148269031570836386231758265876473874785409074213192879447679603339755275165096464233516262846292240987012113005142402910732427670326800972269997556931810321969623075167947349664420039190015168031606911955116810359733062178050525928264724932867089085518874155222323826592938411100883237239419184717929853250063224262081910303242946266965212686054995542914328193708056213167768755029525425228121730715134066039136166913974313475237170559641391942930559556154768506208515234225281915601010429907045194668938269933118586223266628686524560667715561982855423538455341489501453565071388554543413749648778431986954572055748058525780086179666897015651026699461670974852804355186180055286280122388273709964778105732046855525585709331418308186257861378324726572970321067236186259757164365173062037174367307490246762922896153572456886183623969935172618995367851903065774032456161997373528485650562680301728277393976085706730015645692751763089210426842212469752577387265542210891229336053451882108895436093074719896835353915251316716889023128918198142247183496249375669742767821529802640336650566896509306560107164502860459284808453346020497140593686897163253179398741826121969231913899808762316510754425254214527198383609803492073431918205384313892349547927187330484542497846422247526867514548760491877160241712023567624788494434928841060712611775246913294873725213093415321346717577035639780758614167683275903632702235317671179998350358779664152708154826805626435810369727777705898847828223156530818093922760967429057841723216560880367472838031056702612438620596147962493894376430630634116658168081135637041043896498551610069029594620049986471482218095442076018635583292167262827239525881900914642855602062909618153167647301300257865177260440887047235966117406219906959148898946796785265630682107773324332816340438606462744761386084650946327756033944718602019303703826129060200685372385470410133550988380528141702110978409620807711997699979439215477794486894243415014562775659596501840302648309615813601078200240905076464301671678264357564791487825545492125005154563158399916778472384307047774025570427119515500850043845083569416806784433720974794127733799440155379312546033451236785670015641768344045426759121074314580788072339328233175418935760151263459569043791957344628793101241465836126365790826768941084010864182013856048108214272807421492723962155717422052392349992253004762661603830133636670865974026200369994082612122983027641984627467154924303293174679552820647120298635038596422626633367131070921212257380172519157892095091006266106336238865213631462749009201939446412199279992873912379794575302535380996591374368875867370683269214009907039303435258154034127358427240703569235722463117102489618311505265338894364396016170821820757424555729645751950938013045267030484071132579919704000383695297637175849308803685050271199402133951319424587426894270817726814085078707537025481185285217124747104571388430808225434616852501972955318332785066003160125045393202099220242221786632325664086168705178937882742242277165746617028186480005318789740910675334686262814998827237874071631478811776664224908230911808824944065082991981015553822387296404044844386735156296816936867251534686678253214752937639262632738482524494801384379332337480470709169945386371509647614941509343253879599228405683359341651150369200331627869129155068673882533164331711203264432784443794776075453809372085505973211287995413910137967773765035075707572416004974965375019430059449672115197114300308341296634363994018174330297705356895856527977484502082739452667191333702984833554618443509315932958410103837594032571605948350008824847778370755659616793205222944442367310107768568426622743058753667993503486152316260847004083332330934165984957571364648033739868094656854766500386094226118684316127496335727719622159618075553247931102450101054149694376997536689230943684015239637005008436776961362604652305250764577945044856588556303130337937637584568226098090221625852840065007874359290321320280588570788290885914502093892780043884142856683543161582956314949949293426434596312557816405452813904309919340117762606091291396350276557361466960427486323083036243880609805853987508200972976388861815215602054945816834928203725847667673945028734389184344497300002237854372859747728736574566265858956786353570529323722805481645627762807379385975585544049928360987093531707819283823266536710961820867633924800590269133451145478524723280221339382378445922687713943891845750409806611868670907219748024381644678781086851605483002667174026633942147115787092007842782089215280932470301448694378940120771506628624553222556977274369136892021197129214123263594672095597217355486420574693213184565388870349400407812238002050221101397933292440154429190620445874493260329716007771129191303341536040030592428787830710953329225322053382433402794995593643743855620097211156641499198323985531338448063465927345270793522844317122045095552926565677044820428094261462968855508105089039793320121397450575464235778223558550701675483599212849144814888133652970620146615312291602056113346547334646776467996624798663764467372375580618750128640544861527721799710886350650036297025492806666030463115163910449108678407169818833956842794038931950535234731256377643639809891076870027413672509017278335449342724752031217068013036299854864486679298821254140700140508370654161486627989944339229164887984150478813186460524403077637832381364584373993133638828939106376978010829730086696447469524751600169514925248184909347552458371906402894112143342913042425119075991498804897744279855393295019487193322201900767227385856948221965134031470815752979578234072872870864061610195683636663998136823702282925492401514502031130436657684615954108211084629706091437805772721273839178639131717887443026589301934722580722282264602230721192844748786432122622694374886983998153642178727677253887329096529940391620545690681265076676045454676208253215929693285211021809327343955990867532051223585898112036475970871713426656434583507474132880978383694284993881783628246832043836734870487600118712075146229509088907333216562883425010474157959519802753737353207074615734359950917633034041867497697849394985536732586580997316744690441713867540958059446378852789930297620222604833786957027197184006698392559628539458758277975628750775171072662357262156099911422044199119776211668331641095917636420244676259499477748560348602202823573665983770426282922735568820780900244211134532936029986419370700261488011130066473681600843990864279445635536649030253558266681746134732163994916058042638442347875574571919294921314038478195707704847242887613666027599240203590166042241934340471174690849959178248913783842199708330094706059766141282204703771349261845465467303949686774733804213775764864721402325034567509568877330744461204344698138303194549623159225216894758100480008789347237834635276279450652193595454415121670770058993190908223195136491307771401008770891360107630083958316519855924342524280718239245765071497107790470268951510947850084898361951159837168287131598618856023948505123054067976955802164238423731900524591132981388533153613275526318590113074530233657968268278701964894939858312848555329420551346758763412603037648991945626571950767817366711356065267604903640125757089182806339341468885796378166403252061915963576346584214070960520321235843301919111542224330257078627857685831760336918405043623623218177322286607121028025353816376982875087437289188692242440448124529064238399893918617384521476474527290475856945769548940414733949928109239080949364363998094818608866216883201409871009567794548425101533234569090375516630089610312693060075013396845329775390573341511572845753442124574506855139857087672290632520712822836898675653699908618283594666925898009548939833508608607260599779909008815361203081003227157528415246740299200554995948799831259966967806525309956398417425352543861623538307011474134635803745731847267250875746770766982302626792659921211234941731833882053196324508227865888959093887982719859970809616249967455654558771431045850598961881187639794534438030685376039310828691341548451406951017195388733834499617507054365137344410662419697760348536748426469448604793483530932640750916469203634994632111695419146368359339833746929053805269210488100993581075171407008234382621736446155623650688385406664750263808383762293216297895345148809644306105202242490456731839143553416517872397784142627170207117616546800488510968748159534050146410010900225410460505272717611800300176174751886985947613572282512798560845822104300231710375396317277094328371470734178310033428183218610039541143092072548258959267043864464067019986182140080743256758222364998974188269708680978061703088007330850301817979954406980309944743153559891729237589541344018176990147496150015837818215855483607900022663732655686300110093239694453332639499744272024497667341832341518261996223270150217325539338388475444196708640955072180280866107249608125454281286619085805121430852989367325716034183142321846736567033177166764958622722078083381202042487964418622425320574164505509217667075489286611913040599708716195534534575866921679871342975350542397202975526974957753497844993170014618854346782804011500877397090911335389729777688425147425653707225659768549265335006445942228732041557055574363071671478315218985234976551488390132425423807503054634266265542137826213300655078857699962239752567691950051475299821394882915795308134086830649337794708684433794705369036429172880274031644626953416473124875929802116738429300846368258041108589443155064127547730578769498657997299214316929898935573100095777193327343666456136807739936208212526323179690927158138732929201188422171096903075703929226961371897912656149953213489477096201294742738385902136137967167055346799290500698397301715510874102818517964855215115172099528516768891486769291346230843087259403358807539071183504277202836323683179078265380290655140041083740719498772639494011706018523988193688596387804837137717786509367084073068391855320094340208363746054252695211873108044187555617609150757296353758504243240978194894253561488051648399185550325409817923941633018831897300169815827459443001516839520793289738300462307725198142286148951142478439440317937819911800743416221271375057013264558879247432237718340532156058990251445907985761617469374174049678441215679716738971752972094145855349507157006920996807623674653318376939138922242997007311089636286145640685321012699136080416760311519093495183273488320240136224855610240134003134626860317310814142381469445745744312988970092743783644851419704393831404193089809870336977181337096190347252542337246633577184269223080133659191757033533670445433368346875296299597712382816252387319226452809710623121348465020836521844818866184432708251643138892691346300397967516905108567723009576758783140251278160521197786504211118003803877658280629033901085979269565501357187891176745582524331542155000436234325332651773064604028627338774142790245242183923664463705762075155544467497176172763469820054986252146724511695147486423691645218403742894405229905590313564067061881281936147158516087644390217739145563590052556448005684212375509470449959832354588039994963950899048481525477275883542383419590884309029779786306296038796100137911094697557722558499278494833301800755207967534234274887248989499965603683949638931118762378569545423932834137939138021647616118285271041532031479967768967462808938358947703060275473914250749974237751018161294576026327190979017858527604259806672994861552349980466179473571652046506342195244663206688176556106240872502147025613296682721844457249268312486837310823230261360564387698331214742713878609427817727747014502988707165820279954505779956773797633115663620397397289508489929230073829872744566111631572338222471484278324491268058258977023497243998988844939067198209483010356271863466864726221166286092829190808860962867602907791265041424348316701049279913939388016706714493232090945822681407566101660625138000793051663759617024346749625055889316850459372609378181761805626424927044621708514952079284031715105093449061273621226386882727965380249642434080605888446776533493338058135061734807525410509222833360336289595102939226655200812022605140049324644218351814904241332076450281003498689306907751777566101994377544114969360082451954596671173255725992859952119981246044186943505451985484433714684204234607713930938280777325979074551646211563456576877418149487019493256147325630113073449915110046253186604961336164705987026471007687253247036526105011083795161210599213425560459092290947785338107951611009854710399684225861046708990969462210054298677268685138827493436368017381290491823802175884434858199763060018402455043639347525831184432193636078822342855272045714074737369255993115783930109736819090487924888661206532460152000335168141422972804477193676562839111651217927275006871239204489224560659499951882162445251561519251541248698539440557530254984069771032438283335078495458321119998635017531513927437392901084739392972242542692195276630589584769378343518462089531228431076626920567680291911716197358785828771504571705365988485439338455687452361582509297690532338080100239588158759601890869057946746760040728484613767290873389593701930186035809192800969562487800035954203504649282600218351160276500359007615300515757508898779709877246512623459434858447146969974708619341633908471726486305914339279858862338017846384694050699293616338270067608418255741154878091279432910863846947853495266842413245686736164003947230214150059728260677166998592152224446922722452662753747553137462434046326231320967634891045845244598715834085735563556630887023572750027903905856709684257476157704227887757124631483082575613673921608702672850353548863884440900066221903279112207312376948419523363518890952580963345764362987689019978287277952578086509868522185854654213618794096811802407819350928688707440238724062879588975043085326106396878515638060391081322698344181591025607591793497200486019243990420559792338398268709614517166098033509667819207870694670445052964510380048754656246144268720559930338804756155067939792354864468392917295248902411941414395004555151105274496092565798501994597445334832292324136115789201898749628600240683858562935279953952763525046396599512968205865885738109875833622381771863255911903200835095037665281452075692485455860174792407834667524564755230285139131803587488375127641654069323952591318391877310092234823466809945560512533544279271701158598689104477558802992722469475457343409971488630110503021626875573525751934778139174961643122972879514029762422373759765314287522934382892975362750581751132453671903657267884376036661342843964219541887566119884579693381298937901406563419516192474661306516511725267669323609419087733340690450558165213454487297074862553371635331581087738855095802330159523967268648400713750438601474834235330437085390227380449117576988953079133406811397562588492545284394178380123683157531767298914314054054266990963190681914906510208311130377896728687657942468534543011606591877413631321762198303416289445543557360297724554881458955418542210450999122832422240671256313535578227419398806196547685103176356379705213628453476087647191624882510939310918226676457010246503649076887174058871800489062109983884602249535444174934077227481562851572448302453765047321847532378940907877851143226417167207865271313548633238344810072504878677344464081608772771449481960020157980944682498260587592717763415996642278042914584234546121362414297976133124187195363825151679773423909103521409278990450682793503356406863155407032340671391506418478690860575345041992163225409754423164352434991500264140292956147699696135281539726892935453106876852742287916824480432608704463478624349069682252057662741054671106465204178936003473244014157701024500525111785668386033963806047470587868478677866005941018778147625395184562630317637358327298263546058429323574557986170934591291167804403130173996890297165284394825291332954976005579513856860519351140890707453397241952980145879886978105344437928598187338219021315887361960592742773315472002853239408397789239344686421601638980426095208234422381784439647101937884365289752765795163630751895935377213417194091471158931428412311647990508749331887496749119177625623516517274409813373547097884797343831223446489714488277146796704707528417151005177758584705360452208655868043224502154261560328310031904546602778549929217020935777114230574433742647869213136054226574013575310385064398286790589577389246677367491487536907339515858623562466719142440369524996637703770985252803613777816346232435468253332516733074960201249413720878443642861735790578481437239478915479884748129025766655262300741908124515803036992955037147164379926226167619218381593549727846720152665688420845010280046156910091842431075734179979783749230883487520580468055061820398994057860895824863813246156474145956952950257440684073664889904226040560602079193578678161126084813574082600007829756702414971176685873724094152073889241847585711465880388970146267953322313509070101452690127057210105779022277343195276782480856529188340361561348550929855796859839712262320837313667484421485838926042660191699304201533766491830909468499432157653212172381580140823486192736058717317466163847683264531184832681703369211623877310612543643962337345035839522545922383698407681015377194206583397155612108653083191645988670212720030129762880942895247190983775045851394570956574880254102538475085951906008554776417154677487089697871874700602935649391122591469261263511710087692787102960769193239654139233235563061366787913078401419567070881356320830880213526970725503189214741870398652371928414023072687812809490256436240867996383840921607586376700609603866327956945454200216914054497140193729992601076381319927344795034858657960779221356583223536408862834118876504409798505054654654340618816822304137332216455898377580961438429059850323819755090293443799336410337513679189169504960056663576720505647998532197059594358470817219206875917266453374606287085863099056469497814288864827362802618046077223206196839764684021703896226885242604920443377925672122905761457061866837202922236817090556108848373230317984179859950962146699137111763195890862038319018061032059854841643758537559118461458584528636882655994870662977243594811242593731963776359913818723798612690418725118495457562018917042825869646026822042170164938176626617811529465195189729743965577948535312848582920828318037995320941088406331146501838211945555989460999499266195976995452899102082423620367295339270261124959008335815158764211599728620891355269369880777066243495576565602414466461313951949093817390758101911627280585346834490256559339783660736784597741875456385440960717762071157152054663841375517012505847417609854817536768451158381471816080654008826680154523338651980071906453012628196539678057912794047592200584891296694888963217168962672527132555070744099176536736468323874720058609140609125633443807501075614691579295085050547070656868116338927157780046853815222838857263960105057058243307334956179789792708461912072633112251197557082335365279102007024268161463397894521512991183827518360244054304112902681963889699612182085241809012781165396831190827645273329640058674414682090257661164073139455063771453745016860874539922946234522818828837496340942470763000717491170722821267660042795470521180204638104755668948924724039745847695888633985075452182680439794593084627425060093791510138248701420978485908934470218315026316537964710422414848508953653174885833202738382864411676022315464960073515324718648310766369966940592029950073626018052003382192830878675968406343999421251846765507910757723562376860823556630936746998493392075127302143459749574953145597189522407961223123553409134909993234776071487196398726480243384457525538908352522657598897188751829310731782947814194860357498926797639375692780897942649640984709512814089650303781983675097553142351844585048052518999108785885084128715673248602784852202625103212672429865661527695246604319778947900124911930886867136656012397500815427149001629595311461521909491378190818735821252571605128316359578846573762774931071481719546509212499934584164870580273389017244188393954501649198066523773617773603148318070338133033338972591051988165809681695447229880713273435088736826826770722034381291341169095581164119393086610843233071610442261294455334123815147843960365561837877205018038913232670227465189079832876850186118464035832178304638050199921558206268148596626835738621220408323149112415323716735712682952546582245705117230412997688385500025680894367542856812391925356804836843226527830989696461401860946353979452432274274964920385141721059486526602561621700757001951723017250514112376787574823102663139662690924447844096274279748103136259643012732398383704025649960014459222375208937377135086960530601311256939481230368773686301164318462671604583327430309190082530180667483584749343753766607113653497482984301901089950970913459388149100613517153938432877737734771821280254447470438819087196192237223304078940382387097398511730500403660027910360212920875397242062759420082766066071073341577474795254519604098132952303380378722701930037663925484469314023785380625108348136087828800437117299693827825611561606438539305841566582411873588437947478804984065159864435345076088007997181939891110871504386314503554946209094365654392650941459734437752499801655609105275249481281179902173573014492328741267556064260298802557836413692016016617669748043542306072551697935735746825089695874826948731881544269818023315400606701953197215378857346583566060188867877883402696009264891214523761321850570390767193931751146569912952896078615794446670090410139420800171065178067033197994516163258550311481959276610659074044524985800229299228966543054067588746481449229311460408549457355981220577363061921476421011073334112714243475459628100874153150699878674569108206416345365903297922921012380381007569387269116011092957834426860655788441475726921085179645009860474953277920185440079838954484886707511916628030508605658217777697998220345113976466651924617025416334341044221145733295408504392807954396151307885264705378477983896727073836856837620235140207456693911087053479132411488788790158615971668352740445806936367038922357337268462210096916521348168176682743961853038638673061119918119187716359164169444571406379455424290874419543670817530677676541875022056511296774022477450002728679040664986471899711013362194181815184472591061447488424875027349454680510566851684048259975803596168445168373243003982331546478158041588277779460034850719864600409493977640398092361316514907508342421422902139051990165573319189692423186174767104600600148134265471179386165793927640354534589543137690424787165731974481919188300904505418400996882308154835099253666611841538312312998231819699109801429636853713921345260197299766841937950906406548032602340054884977654139891095815240233234467133442021495220744851782237688425688959031252711264762708767338357468592642121004081137201237521417098050822536684007206712882631152148490890523814401714196984944804679489675174776184049404631094279956737122753825775748085792754776105710867256129753274940581094794847870606374893196903901621417734653625666077403420493919792655024777067311768016577482896998471910716852097033010898010186445031926303162374116046753551168125391955617905343365937938089282722859914768508181201172867540470665654742948597222563280678451402182626324367627789943262937705557087265579856057809551086296577566990613910362180278129785662042808063521713920147250640452588776439271155252643537150490630447948841296952179190073624651786379689854808868529795126378890858504242865541942872273056884845871457476143153314718677063731935291546180195217512217731081929119956154340451468735032164383282109523299782542573539172290016513396984876017270183825894574556108791029901424155246809340828709852267349158535664375031049444588500491485483180968913365990395654771006567422899781917903880556974077808484614702490694200671838213724208851280759884631990288078363988372431080994688444143679764701359755518252438059867085825863935412502662727657199067541943193285433812175474512578521148274909532958863395251951656595291321511692041940837930800910247884453729889188341633145491480408091982281173152722432780262445509782321678235044878025855705718538907483505898554256099969620966130090965658274503055056304302205589701600825504127756601491826803917988196135982155843447379573702413895350487644347515252532802411844463140907913400762357692797913754689226884736149676856077439534956014628788995262183121832769384699326248204543358092547676462813616252866002903472891134064144250270608421664146813965398780967700813244277543465345874410359433720560138908410081960804386664051419536311000388461950017124667515147440366134559808879788950521931999172295176273037788753694443728709322519027105308073803344250662527867491541720713646960403245267328210151103865256574620291837156086589496185518608531139968035120710186676603591051690907519688103777386210264556171179825957862984636184672745364037121364433025001866944845893062929771460245708428537857217531391554082579635931071315989384210450732463188365244921677970430073450551852731279385366659239344190124417726744852219108768490083445392411318877611652510551507575859804011711680935050414745944483162589233546375855776767002031155304479918355861115050998041016086837193337357975553651024649345386759740045299465443507262891914362838579825472072300373383314140809137622653162428553463542462300076344744853432331717707644082936407500448460168077342282673654690211705120825871739934721949817495250924250726925642789857144682543911295027774569440308524614307137969039330836064040018859177956858262686679114699075516215713058458238926200549247748286076368766901533212848354177289041468683550109704090524777537298208489933703135462881564099431841848525123082824584262118062924394370484670057600731014483833794809349939449513215416659281982338744013219843698812101653169164961442714143245482547387629724500143589118257677641415351286224243126644694731445894464907012370826536309474640534463336976668148365069960714298144682556320014978368933051669087408158855984456703270505669128365644980537540195891176195932619380439852108327520574536278469874845019532470297825798400478093569804309947662567686031949573083415953921209066913357170933142936795525992559921024120101313417481679563312303503160869343508168983778370718810001468711081456752658660638884619648395491000804102621263814323434264516893555329375430827852957296723644138547682740396981624166189947325058111521969662924312118815724801397142272873868447289013964235982967010968586926180105408495917618647401412474267934889758834498858014189818668698566257552425115133889558784816299389496397417033311988726873131528027212434926334053497309720298910228004908373296479534316950778781520725900232954876062179302157414640607899306414205889014396961918180959152949138198462355194937194456512982188462378681558730644868873850415529812634340472775726538865787580204790312618484890551873888725947776814785942928251702376169625542673210477924328163129048539475711728834200324746845178811691006259463580546059295237249941449674655889780033821763324072532714591843213015032197235641764896047227129055747346130958417293148044805889632654064150538697516962493630444716415940433176064306038719972147798773892848955893028582296350937617680827682919135911466714042777926514452512292960800340786722340541320649179899342782139190630921424731548524409813721719049277450147536299714482855123942922188882872165823371928562075908049597357931836592697073626866846662967056473414696012289054649334216959657450094861720796723399048221426950965351576190183628497897472913885974861195482287233272330631073272906238657963912961558017968672419636993357507327926654753450832552123516981295456326013018790230598241273242036157017241368719980083222349838069075595238052192860532054572107246906693777913015221780039950986575108200809776528168571461898916911635158704269356305188550156111768320987228764381341870572861116475331926890642183771521971835146026562830353905646181730936806570256764236706591127446751335707108810195680022570551336875595585544273574341544072591447472845400028098970682853724683437493734410851193196097453241753890472845085958747424602856097878528545187775407997154621177303031339100172669288976201057951121885825950956918526102107090036450824200069159718001599236330078833562106398636742717199392085787672934536134885946613681541796565247637961760715070517432423497976271253568381906775894367733653120631963151801986593531388967149711435973775550871188943713859848091954630234668612328899619278198946718625627630057172226198717255668223923904890768146987080707751220177091609648770120434768279559338063610192024519833268119705454153308595651538813921780342498141963164905511260143454931265701556562158264090824648351579043435702893453635054819012476149728370681444278505199006903212896548769236882909068546671150995589760754891507625492685131792418299782542728547778448453461101792924207968158552174577602546294984095234678192840960476386210024350185606609410667690932843429705931268359659552164788030824711745176610929643714782697763464025941436376119883442043651405819785395750254618094489169401030013543819259121122854238722988776519602373221724050916405650079014770648187623734031750235491964410642041932852871687936595663020518293155034697291267571007407824355433018154958785858475434507850904892164905683726569122392614760515053956908698779269999187649883835020011034268265026969018909896424000140656288941654229991152436190033893023874485198177367035859326595056483973691102528528964240238162690169769797872053924417306882145869496570622068064152567048641672910089034466482148259576598883675676559305620962774588428084766784414116997805736320364832583212662721001886011390639353175491376666606897406774841966431435260003955902744717191497660803060479889578097868601071357264140408520715503208109783638446056461520984027952828516557607719738796731794525772221096980949945273561032910012006494033523485945355873048645021280439047580017537220142423121774893185173329466211269176408088586862489556539533649460684315877915679859150495016361992776208222457743409154600833608278358758581453060018874654806158469935209424129086588097007658952952942711111315126687583428566179129561920536410044079683799872613222554918639288601507650870472774003701806254718086876319171696486793614727732979757046379755146280328266354020758820986430077712971580486344586381703953969346321181169192104636494630154711153619666625612026906439506854218786812240993780516646058740408377608389717211889712944024277671668754396479044681943854146770948657994287785792979803623008497859770742430848349599307423855758769983547158184688235373094032850678988103388739359527893501071404914173640804862181613420873011412458842231120289553227515291208261892442680444656692441590713999797893022991343828360615540663044391445778085139945599094074239762612456772578548076328639557450793670916499825916076795474644981946658952214795605488453772955033488494865214498815920404443957690438775163101524744668822878389148182995253640866407630244850888822773889814481442580382544887918223306200047057093191744017116590681555324789182407775866665100435926469674592435181453789517497170913007733429647167891477189372321676652882834647772070310297542094397523932163345722780599675988114774549208494809224706159973495073321478676741593210626463245533420320135047805255300115734651077808653087217338440136071977085011680526600480673446362453506269853330351107802011024714941904163599640702033334178009708280027243676240239632839833190086800100058785505242035602151193311212381125806324264054598875454442839222700398014359114677186893678295446859099994129657734990682460457444371064184692311755752541422151199708105198384237430802858411911034947006709981625809080232934922144135663658449085571277501979917843893240809260006508919841301015540362593229032108072689825169873993483717822344427052288062898849905137744969579079629178617645467526962720055032628667023552336797726063643852366606175531613341317196197864392121268769055177347789594578286793751698667802479410433905992805940732000255661814631962700778143239536096104701729340494466620042894434699772502523362436113819044501776630394960920395546918993072887803159200038513497548607143872818383086380817680722559842374631006953530567999908324197175226060014824313203037348268169926095288097144322551789684890648663457922550958843785072651487101659277551662918941361681291844882428584914633290399404985318303936955530378939063462556418941415029264319234049598323408367493224900433835477731924409751183050397065819857193854143426088211957823771085106209820471610682278689620969757921676775517314616530623257688107672947682658597173652390580624930436511108825021373017722979145548745526360319873068471900353622658246145403431408136194441206504994577360905054778745696917584830341379595574153259059234508991895104113725321454131921375733178112506607565288638393093800774772362121100123864093486021508415014831723894064495994297265569568730807876269888569731031755846775128444574553397997813792654431921834421363070757915775647019542518885598183471508749639882165975381022375915486437492344074425523139962629180384112629956456129401567847766137658011123670830980985007918997025977030110831796067951569965572007575902702144061044911452833206811316731088885223390097768175624261207932093558751202518412009102502007023386813814634972054308310984171324107369665562496654937381813957760624019775704510736176400350162938954403024939727373854471651438233295189222680764895418150428010246315726137001519913632525676047478506575714031274113457537113188910649703107854178914089554130455302878654582163342569616634049525997099279447905529226719538257258587393274130154916630672048328356066972804687652587441088521105876230763044801393780365032533142790361470708396485178111545244300098858104533794718403395346580859879503012075351566479135465214976248731740221718399842254842989306171139607700220638169440749741888701799889068347341403175965274567786320642727227656038739437174585149316301185870988806202046350716742616122073255219743263265181032576138673817502982223737574646083182965575011782438275471222775799172556149461261270904660505267167223932500389201907340426107384301197825454396941178367831034191888309584133979272805382546626473199829417047335138373106220916975733273156589158399416510189572510284174693874373753133185652978668579739303451944894907199782629217544087253869509690256364913361662649103302968370399404779514747755870330411967687050772107617321483418530312001893714042946479603145311350066416700023524669310259433718669444400963997152321649187814086836681368125870117467589428150519860600640710086475174958709157959905729767405260915067140443398013208738176994367507976640722447299842158803184305897947861652814216645807199421852517436374675233515223073367877374551529844461509573192306345037036313453322168768871805379018319904446550904855025013177324986195190433459157524173696890570121205948432263283565890164054944492494351263003114712693604264490550542501889653141667181313000917724453608551190885106698104041467588804923153077182674791076853804068398921227580309702149594473809868273473312340587938036654043442190717164560665129378355602095649072482648351965488556846296156897637715040962462010579776075850857781777376501426558909658580563413806753500690392254667257452261154877591099601883907846796078591115005269420617357121701976371785105596442959618559023720438391967628002735526981355323275637931672939282477623932022778544033100210379546063147023481872886415248211452729969152894850131780271188121472084090813830635493161325791646756216819484619434213399002311094007368175499040105370285459703462333608878126345166364275991309512708416171091252888271665752450769886751300197665033144009722236940513663503005517281624212062955587593905225204836125872420287156842497966510035381857017390496082026717117234446921374861682933593570817241106919584808267765255054877674327988929228526399335672320294573301001520843029197879539804218174400897658113932684317529388849754954547596665544635912594206180442533467344212032289410055743489598571841851117728886296883795457231078767117936640524239691929950908446099602437176001623544091050434889834488714558740591334803757508108213516471546244015687292725425961643005362084352528358998024484653362422817109599601827699239352698885776941029330533541192182033534815267864184300550859195484210442525809817478579086995239359572577878359857446016518293777772864837474595440203648840299944295003769029699812826670409448793305461680584150168511183561532408798094923463652836206847759544700761192784929675948448992774264756317901512710819515240377741714381578912318556683115599448809641013883431262041387895097129237574051734778907972947159713776030845364618737701437543788226417693517009464573693269163629836955181552453496432755298484707463786288236903178335220459845956025360838502442970340189970392285865395671330968107511680246013657146012292592726485990026067413336342912103988713654170966139605163811546859346092725013904046570958813090147586439690356080526002237067236208245581181104709820327435557479421048052102582945221727461079444883918690338568109856888473513216220902224916728774326675355246632875935193968645350659198408253015704540743454421175757722114992310792258682019154490386219338234855437019047513801817401966723441526965608853765796515819930902713986177822928103138866085869256177002823453937381750059810088988044992163878606494194942003728500483586733358419306065079413977546321632519557047405447758733069812177634710857655153708861398629124189882384961710471521696214316529809386737702792483019120104057983961636647935371498532955879072997143024922657859098831534282291039354692521854358932834033079077749660374347639359192129174608455854501478303286948350836377823786093757486840385379733704303180151630575572859840539517606670680890940314761502410867637720572494875842467283500906724147538683524285131521824679772373745705655291821841553636624574535994728495285140266712799463114681763773933801244847002709448323561838029381738291966632458552074655518389534127169628384377734519284699241471083404269760700018182204794404287701819691216381554007876115119366692872982493573130991180381561849948696022256167794093781010683628532555609969925503390052027633657135364055586665400097666209196786378997827923885723733291301616727422693871941122400000852137552752735919034668718884001271277947100817035228006279688274415192053253373855168093694549786789710733924396709597311514345638326570413189498231548126537259395975675283269228288437973242922424415919423396209042686615963781323856273642608141820472118230036648391889539721693265027529331515394513993428691615334165115485101112923744798941721691321577793251660840054500252718711487093865529781654778907992517365552078125868472676816797487586252427646134096661776029377149391080559672415449995426515067850638413525415089100674005993952074787337038441672320733134525556389880446580080915750147942037139997249753619127876102451083024162313175339423890521136479018002018284869981683123004832474627600914139214330016395652367362789835704364262039618514932181766121720953319121045210670266874090641919066784531915512931161152675968995662200513952927276870774262354013616729425606192170846845084136763603683726050134796690309333172432767501077016178941879137036576410003615620374169634228827967205498547282836561829082987166479810334518370009378884652334426945447921995955901150236225598284371072480043530582240830473314363170265028896465972017758373959256362854059666662550126674583687965776797215056816760067845756991797032721491730412298066456848713671526919843460994186809763222427245889347264252765604238690439311764137594322453250858384001622021750225328190551116273623414797841749098958001' ) ; +test( macro , '-717897987691852588770249' , 5678 , '52992561458966917842048333229403244806917799627848421877881735070477262881098520765035249624964340882038688516377409835187369665592703958080735736766945912536313709777389461793817187662953548213601180992839097018162700540199444811234129652849225410276267930982552729151588039493817422762367215695837880393501083343614940195379176805915010804690716402053261575165097342342740863670719437568773682027047862479103787981449864557595411550480691451690239227939258640148661525627569354056573032574365819474479753874049318092332197860174730296445988139873008708564407683788184545625049358109338930604072043506368501486476015294370204931967091112231708457059830732539826223797283205277978138098770871113585235612923319080860928191126542635460138797782729492896291235430456696065935768220494159845006073392139110350323314505384289055017134916876163400462621881373937156047111273516233295024171469513762593244072341275620852077848874899582624269495895402815765777547424606219477655639449216632626280672365511304216574465048481409555551898153578798780997838187598030296504499299634026846370222734083675507056188173301287819190008251323703160735842279757966250463716342218905187576189745969039286653568566712245083192424309450098888181155360995569923237384829100088794333552637537227162177479701619093609870600007097257152299648831715938521942096231520452892461541884420652580871321292450318548928985510277252222535133365388202103209163165539197901552072608710284236732915850819518113234646115533291363606803403675185089565146698511010652775061073223214261491866092146057590474879116664838288380912194992229955697790523281474198511681898554287250127257584177956384808694445714111240128709963424475982531545945446204678284012510035965008794769324049843450109531060002528540713991395046933182699881232634176242677648962206607631738502280973898290005462656772264590786129579181328545465308696435762205327818322165386961509403474972525469518547542068305372202808432048462319049469153118249646785678722142597199696100956128198604501655682922926268156814400446792306656470188135722009834179368221149303323894575881803165080171867765138413350984666824885942458943042705023835971675031330773162756179573615771369921528023990741381103617964140627847781113773752668975380722356219881474606884340999916287255829002765995657643610750292167091336372823055491725335254964911991918866523018470993631691434109295300263601212125887194770564215757107756618621927605011672982388667069376436126257785256735035080395442838012293011886480858182971214107329249888540878170831338663664497081571648293369670697492303978168090750719696674347255594774732019346186950722015778265861706529434650218922964570378758677250144083322218433388621419998372158607084870550629095764769864396578302522198678754554607834625544465903300910375218946617943281021263817868702534903565965515996857490410905151194367951674404671401634726316031502775424938708095480058006939655833612970659151929020021108105677362480187576212239598103259569657352323481949129023622185672875961306339733885857708982104417776147428446169851035372923120375171782152648094932708525562623063044339202972582525453779487351603066880013958145443211731768489287736596200008852460116803737486674746320357688425959700168747470090109849460232048475582033235140686903423628462653109627172118888613705624945389644912331260448674882803772456442287538433120812454253132443354729068891796527676701606716457913622114298779919239138678095658602599035272101050540631199171079787674726148712746094500511958909309383648848324958153313684693020237870128517588375127269029825997693115614438073154312047924340357482412336581044347428383345931096734448615207346214924813291025243318597445591410601657643923497289883965796840775243249869681469920755474682727417587202159996646531840273727959008935890037688256043389201553466973472089962210203795891910446649680901883560841094031991763415446185012636385884139521383390919645656949585657311438685339885917614078799309904047978363483036838818577158746493373606130783588041171423001575976326332942068212106971788178296357879590268289870554895714998398477383074091612380803534549439364991095989289183083877933651758973534265032552397343750530201088858666516716202042806877592785968359618297523122663345711107589355569471982996246008945010788125903082708965247233856493295495884971617005159683177020951059046089360849718770603433176136962787644988761679786793574894146198596283619577589492917433648008790154607904592377489003959969338300144125428308936896784361334723137983098924994947562038207668868190447389976840741447171621269619747614678405424544476952607756858007392925674149003932269670585532289548230838340609191813200074864347826444440499651323577336653937195827618989214774650052553204749548153719625554328240930029474674929792915810450109353297164695948404332144143911830336116561122587580838323433271508758381427202886466864203006769876629040113309536126898286439306875888068434906684986109839807912211044229574073513385256008653277622489509139402265793326372569157760069106457217990235011506430988742050031863394618171218562494463476850191629255740324446363242993320648668718706796758945218459365076583628726166585648610786131608405727805072734696605117814467304269584486848714577856278821187639674139091420868276683680482402061170964129020179849417226407523345979683703744990934601753619379872634811616761518185857620947821097797023780246814812679446740501132957939033231020697754175111520932341860938863741889626558269454453009814222388294592392173794599397585978687451892813356296473121549635013676249164244665043044957101593039072361182135678926932958876432422873012810178205318591023576753916592920079031115341838800740563121977641772239560122596720253059357199257880604788460448454541912874334474110048318114397597184518307140986163690693584548192536813827180198436161154497288570678489493883807773676094581689577716104059811574599177659911227887188217401978474514757553745261264218832355099235158560242297233406180137292308698109610071281861640728221129462482399191931254988997403297870669677165754913546299432301037504530872073067858354779137558761312187986108590108671713663509463849235645441069025317032282653619885664511756487047824929057588473863132476505639554060087119089853326292527491890156165208813193528270287317866931952302862861082174087615226626147432099575255480389022327072418068332438673738233637882790315683455450464590709105784350178739780127964769969011026088597219619472341103459382289201174496483005244865985320414773065969458214373055466663167449827644842719260068316989039810368349530823214414315840300587086860582920441160086337872788129994593466901398749881456816893076117420457023093235142704769500472838381750950452685686468352355934718793080770041896266326591193598230038726258131382339638465090689033062834104050137121528398579502285618016610064410178458485780348478662846002089852720537701136965653853259363332024728436379986256649234691293765971251875100216741285408346246009343410757983483597963489740851123818712786795291798837714819930591978286010640687992692756495314962784887224591285887831740631885066445063662149099404455330521550962587381135521874864351037529468684827186997370955447481995887639571571525702373403403761671748587109161571183805369675426792116895119621582920253789699657615500011890976403807282199844302806272514657032217062946033211042074109494896045803992953473587506222506781346147810525891832442558813747914920938494195556975736956239077078403047716108873401240720217398379985768790248880164667538691286461771920136462983631359473029704858507306794650707316446091278308009089124701630706210560168792994743974642056525288870381921514176601924996181921908722977903765494032218635205563065562888264623205077967964252752702442201464476030020851153648989654374063092609825139716406169830702732441666788603492696815334157061439959989046789065423318960712201089688946540796678378497252260148940700296093007934347669870770800342086190913566676064617891161093655936605836899446861184700094847166382869925437304928565010472625277681782787551544062045311275114543518096882812611825710549053207666530027825046311534181156975603474991929909024388711945463808425263464957653237271591373069179547100808683091655216330416092310214397175383390044315163696300849781070219134615015219064302516596226701912265613020932966925428815092790344445459519486710818501491744578229686083894654498423852571127489975219254353172438337650602238280223597768220243105815348527252142824365262184240072688609964102457657199429178311502128276669149947703560777240739423309436247534508874804401314162274740915591635435183346939875420896409168143366133287003880010386186641170364265028042141513465453408101841921842528837600797310807883817569665409313593668849776576983790985321325237847569765650823790815463692017963395752927945155773792906513914253930342695948572439951274479143533256050317996678589637630517043566370062714774155238038673228364852986154012293796986173903941816772421914136811088242656279247112124439226958945034478877984596864873339798554814421219750181744221681578059062457004925780474249073437168128231790400216332672320703915847426463055894401088311795843457416623717000078714687159781995749578194250354449880164141903126715398601118555657753088212238422071158309996360998060316430904776007237664213238747361809842176066931627956726802459178808505394046664002938285314488362839317461527679372532822934704704470253690263875879702240062788026418261529389183596155698524599722228817999108140672748144745689714554812265041175714545225389990781353970530998752805250297945973556929670870774946985404265424068777800150897438843100570165412465536409965604362377295700424297999045416603027704210682281919437502308628718607989662408388051610908664802514940396058178295301888644151245892936386802507105326053427738255325180381762764389027620113283759653480743839809992357496074117200755535328327778239627950809058337055235742086687019858930046083297050726069315089882694837254737886800564117843966144822575643639731768343937069600705061564770014386059309401600994691145418984296800446891914436526504588487235668560512126375658106759961423238985938919327850368124270203404746108520903433047821070462173699752058768991623911437121303926263567247275258743101051399711951304774969904872170431870967998534905416515742768485058006433022048620528364549739197129869684349063800961670793383545725472346808561542828191153302612521938569967207547584404136442698715207952729855421979521420559878331433668100753209636435675712543276009510142074799136997641192447567079334735530723873493925022491212344710076896739154338361999719913499831623432329457641993249784570344228676317925346610689759322653659928903365020471696174639950909615303515965200146660518282411647170608800939660621685552950249611706475325198479518423077155301209371280575534360462938867984963297040183736104969929190183531952577283379234782953108926401989267488044466794228043770347285979888837421775091151607628072534183685174245345816369526145717126891495096063726823540297588186575358585981265343937095373338996442251138594460569709569806492449609367188654079820152455364920624125030761646597005088999711445807387895998396475835641806955712083403146532371590752368935420985233735695950492134965346564198873831201899225738635547303457400703163201429850285547082772143821844313238723456259228759115534200528631507109400219431734564426566942208047195491924187286616903223592310617985108600082628611087567285767001840566153820546701939593194433998024938689773662808625697973543664837705457336677737765607746286815865891347597385126417092248398027369133671804532615511954414419259304523253807140857494548560843072982788068686101289767274829556337961469578050554176149354133487258534215364379154660461310427570189912699705529950514413147328168458631103249872388038937376864265012237965847164952284836681545396080247290559401291604967701175723121502236181093388323626875423056619719092568232717945805103108385877791944344245670750247392343384296108323807858305055418400741553693700502565024106126585636797090774279356316370509236531508263353733878156923208632989404619022265962263865918260332262005803614050713268964027332085964017902372988449905870060050221522451244273428597501098201640739856281753377806262510621286335117441922221183997764738785835690806964058090618523209727153455617620262903964419882379089412045613968114570967614290250244897455062121766814873521607883867929237291112681395681208806316115052463955424369530957702703335301336133507196464013784297392355963686577412082487656646900727164897539211910515592015131790757084187802478999731058868779493827694303480414208944059771372285831516411891131036856120211199256880755033121745020506905940385581282403448035169726911436826243069847201133079363947969342361067328363441956715292529385906162072082866885762473853872136917177105248829462003088491198093528321254844293731158494353309329359943621539173472646030822664165537362617032785562181639419716789150739604369299294852110605262082459555983084488041202822751327819978152651961662242916641572040409255879415966668785223872853617095739101441693844227787889967257101619837706529517298805962370005920305999407921230127760675120172113782634335023130691310728800481538764425860624015422603351785485421993634219805565282967254634644843789616543323341653341146495092459321686531162492849751882105121323719768549112911144880654693888232614646653956763580397332567522797083319499426431434148243989859609258432804222067142397999063441042035277929314828603521084355742771233471852499158339778603981017500121847933601889420815095445410655577708991650898864592139988828909325847690688265292963327637387564935819554712076627813142907683346250203958929989323689935059457421263112380235019472983111424135581186825910973214910699149667710959563181536691099143613233601161732666745012245211307688622118221683809456064734882630698593204467656990257941572412614139802715394281994293120883156362501711873082011731962032490574884682131178885924065895059613017568119400856466320056952350332528728576467215637026738604714597593759418177681274482897193349099377791845071840865476390482509958300517175834887188010180465835340333367167368967646066303894894949259012937252758312734808329709232360933894530979086189948266744307651572635781288044544893571461370440118431167905294073527312254045244808871450613885567599305888413740007585647252065620950569327491405356998305146429471623136661921767554001049077582559141269075807726942292324962879195004849835063558899374919319497877100701211206496709025329275359077524423372451805882088092879051313263439053059246113586757853983808973560033255079821096458791208111949975520419973969738539460358523519982416915144979569986992658895580772468544281855421641228395656106360926287526507440986113241371749929933626943002948875469110027470912266294656790428857661799285796092963253692751518091473958954584426686863281912392953724819538676197544419608647219428371546066604565530829571887668487791705473466987941636508397417037367030291035726974209122929822977256282776129310660064280234827050717329256768834139633843952427070535536323343517859928713869623513480175609016408364304241592622958594443056559986989106563619631715224662514109451710877519669377700137922914878226108875076080968720985553774478319079858681651339801277697214672775772710298769965771899451131005224958432124257866462047576738776398467445567954900257927297206412032651048753538257470550748950042956467383856098326990699095531754983730997777376855850204059808381527746257418211558497066091371508074576455448794073221457106194028764995140574406949894779285509688637508122002763143590113564857465357157613251821223444359965532981305922833468097064802147367022534931051008695237039566704201353988540866088741667038552935423161581934287462404348346959712557410094417500120546248110357270320222372208679677188804508939856387875484398668973720610306440393165985553874361652311139176073072642232364301455756578533325673397255829115802632064375030488532724282480941523096056375612516691335273199076868478063949077979981834693199226789642526467313758886727034664155374708233413052241176017997770755357925454917422006910044558649830410441042783912087181440912216816911418077643846400706686847762348581058766312240711484387486718123588654129529313123730637305855816034535443508751239517641963906747738873083589048844951039924094554710311263734798500241327075231542378920749258310205825922008644493121370590192760015148501273427214461014155067372554805948839297269789248975606338557054691632614937241901458805041012227038978979812168094150773239740200926858206670986309560725257896194349092782159293694188307081347049188661030610107456715733073715420873434056971119630761658470234370438116245797515154771525887334083368102698399109278569996061959700658346646955565093203139925211068688479012109279872461395639869548120204532938913593022473786111209373901721432107297071448742770742412159279076830118439645403061943303917551223288001014702113659615663577592748103708841776873178445568235386839518530066675979433748005530615064885650866749177914061788524262808081456736332733040493983863214714692393115801670972860894965741349096171975727706157112301169070137414347667759125039407153467452265210719726714985635420293189470049637210766042254751512445609291095350283495503549502917353512206358756772848829158151755615008365723008445582823523075844725615067686956618810366284960890688672135540705475984841760373827462101875128799270857413282580082072800739904057148821354442778410810970050701431502851594089320392059591004827037030949407048303186582849254894900004175510461919883551638536839489510245449220044773071872011316439740663014720019722095387628672305811492191697738078092246616407460689410223935009608878423391167281114435298028095665936771603627090834937282850979762786426899134362341889415374040340896380252725754909908018401107333556100522040895675585460969780799009744922983914153517048037312468584877909733205649413029335540211297879068656419387807383048842494215387689331649844934805491180381285929557990551329032335758734597115389529509449814729908343459195813101027114347572133759851590325554983005153111501432758813072569701126690781490951740575825405497526335840722010023321789428374242548378889836216282253171286247053640123351326348638420215428018887341486150219038345363430704186782773219435948195386840643853198799818242098668338179745226151996534978279230096399308636037991368814207217507069935928147009785676785160027497317009001777550195024132691150567507011354412329032340603521157466518995650811670602491853174280204852628446269615787322879786482369408633164257134657023953228812362587592950746528121453810577970418765900895068401958324820738606431245080063027400254319882177028368653741793457795068935169938691425211024828792631933230877447721276360612404169065676636411366175986321744222814400246758586497722397143948714428396712767471630538898122410697568130170950184011778819880862316215372642601335542980464853249009026580690749759635033913834129498173805649521698922073038683841857811453879318495594875910979538327284780569733959417673964124812143583018523970514641401891081019284489763221082086325354879697385907787761049442665031058490028534622149846137905767487116029644971254430227080575349336243717394801443483839458265798732710051462772605466482812641037899172879970734427748668316293777647496909333662168116654868712457269032630974156741200422999141171874097340818602076458352626593605494845936264195396202806647904404677157734745652872270210704027405978135714048673747336292778720101960923698684395527092073172044177213818544969591585627238532808299570223371536372799012875224234778370905326852914976423861886454350497565400489482872955448045615907842220173649212448684979945647349079756570932865476086046458864652043811750235877344393220429343034415180297212581588145608747445493372426999318493938150343775786331056194752510426503166230913186538526760445807413799806204051029905931303093836872257279463684631738363832006044614840509662858475110814261755496445327276173263161251358809092006580985277059802629992110919876640778599238851224190806234298093499859897877945279235571464696627205637879325947667945367188005248720580469836926696939939415121732586533901411675573681854304269524168392617282088535658385037701299391440541334384518081022468387518749703363096233963804922423094068395126707285054702218861778016173542392815212283678372323848563282862826760297013819812339131493327915541965803998097384090951244169643369018641096219195430772492922432677413755019687006516340030964660067215342977430274756427296622985672207880091256161463966745535322513359262081324439248033434926360421216544044746832762555450035219016309931057323669695525075977196214861598745789848117118689974917406963326147153664733948922010644259043986576126492884735748201429479293157327397169116086340829373474447532461009810536262731597451754627874681161347317493618449699664690398390949643587566379695090443777568885944452505841199312483422475407319328641366974092114345516068535284073079980141067468263817385977308228962318323609469322490263507101669512786080642752319574742157425134152748843756299008728152305538809501024125010339213159780735824709099108882350824446352596024291069384003047531175618027373859127640704478972526885889432610483189753615050833681837753536005311543749368107499347315534545941713644730273702333948596900145557971505509367959108594407502948243020888234056853650963187076323765146652614211207546354464881645918117204811380635728429776867963381852884230518246631190131825530206787122927542913920281579736988824992521073962274953252144927376468933425658712672597384028057932228407070530265731165980966598601076506604289064934821557949717410539761505040873308406110474412692271216992858783788017692940669126619626790274625702146919817133167454141020585503777417647004018422961010432475942591656281157554753543866527442721860074055221343919493702427083052905183704806054896861313080853192781874338774353472175893928663360488609634784890485560515252214309637081204987618424027884591397424067625820413547165571090593288097729180898304860943714385424978418160835850877717027658521907629768814727424695191227358428401962885565649381238098204936255938797308193040643227676416950981533713051600283871175312807406414172316740879617172963584690587789848239482341701897688268557616992035582225306531638164023604262595670103263609695362798739463036593927714273709560324792380672245014432684528132529510597382659551239028729153767533108869546101650464606517031212471681999067256252173869702628620955732415793090541749027540473718940312552425322149119344958406002437705982398992267252296771928467559404038212669370252790729353944780711661881552113249584403769083480856475063987837244029373948596829428019040641426569984762280646821052726889241697080032561970596779105934595957656757479131467410030344286211442477923310898646446342650046369081113562118381113974544065289731235914381813526415129034466320886690781519982064571162447720218016309577515552126698701486349767343461948090842618080712299219097673966015228424172663889427342731020122066675346414052340618598182609249461329861211149036514914521730088889300616712047373574894553971526437268977130623792336839865094059220733603108966045443149552683777916379609517221061627320405151444134819286421255392382822364134687682168786843209394288411699746863444889434411414485519234492407599434325668997799101520066221602884158226756336984242409440361323534712903377984364440121709955882861088033253565408769726596294534478786779815095706073686709431442168829090896416212535563746063403950198043478906364003836786350526095004964058916984298874819382063723661497266846181942426357905013650755458667314604787157987764491101741899567408074361392569794087507924311908229702294763769391197478812554522186741135262551897352184690374471893073000220162512552332060179402611785987981834888043869118074160633762440696320006275857520907876405364367283599977809702429809327633774811777287837997929063319088643981288504577794563897734368357724456507233435413578168544122187905557510349163877892031860938380863700212457499941173051991635044055263541028899765559085615828388330183855986870987907204189354310066588413218192874980402116441641033329112521433352585269389744561428992772734752313702102338324264613628379476243754122969786509425444725576325781027140066964089023790292891876331352393285001370386695304261889280274262043056322796927733119572711356326685350484589411334123538058781520196877872573359539914258371620972518600167848136853804940166949001046871343046124149316149555200621260500187812862150026333455832936133319251080100944562462138196424435420637124060278270301200807655723626316279314677989720701526760643271100348145148124820564605091911779855169535418882307665289900355017573800822546237397396616805582194694056466899912723329771183008166619132092740342879643527581402206500436271851742975104495236263710329645094452343102310844177958838929699065716898974352408381283451421410089914102753296005962431058406067303947323833242313152680641247938380343115958860199956778403253209323348645070739497071952928327376353617380302386451510499726403590049039220125741769453186556766459550919922603305625386150812873799214104365798370292908598658060494523919882837028108696230018764525326479800889430827403509641329404504108584175416299778457550149516420306914056180810908889377149438217925739822836731498632998974190671944437651733816831832102819701452336948218481443109835371939006988086201718924066189320116586181314358289815550824203560990687366887222969587068618783822844334383574224286655847585666103020816988760101669647856537819653647348642372860462072094399934119806713804526340303858796726062832597308487962786568628209393365116177313500258916696602298504935899488231886983956122931761650910471751605728341369214793135444893690581825560582275170663803345907902656817500959962305071703161844221586272436733043463590790972533783408461905472360665984339275927320721268991984362793905235237928358401214308908599626975869024433459897721710178957512745942114341723971665941816834394308329806825884356070709685761638881841811423881417063972638317949761209293108884169157244310554120522091867059525129565074635172821024753666469843554970503238670636464476697226613787178875812109508162171406085559173637604564435642338746751084270357452547638347056148137732031656248286326291618903398185758507933313960978162364875292581607458217158798787916676003226916398811579605403809873107421485543087852003080885632791018542669430381491298441535109732809291308440227122322919323520142248717203062944396531767516101348669545805257723994808980312479264837725492136882355862941108451810186385271944727323937476421051113190387402775727960536639091788137833258176311969569961943551611853786770670960071652604792541940305956411115347733415222667549394453865233071674925052111317188727005402659672862870124353044134138940763586559553241714723475928344653659170671048092842027797901483049343811224941954463977298856433740106969036666079845988063391903825032855950193013788243789490182350376071702678007109765795706678377357340602031572982332824123773826221420577356000773691991307382149359100536109508425616929397580550980381697733400694828091467008203408893560621735626409474184799062207420684997475127497499271462600004670205579497645152495972389782480775949584706612600406180867943792941868858006175201936307008047616757589672523735789473093905193759863364945186628110590148829061593580057092925835363208545182849585868221368570360897560213869098865474255930740671657540215219483723251702391679084671148858456387364281103663462079699683913175189821329916045361853985054542513239589981629807348515391518514157410480876717317086568995965776721883816029400496479881361209069153709752129572198334892249502748191465310837081561861610032985534309285339681126580547626611304860810381677502832262489332934346926301205586228829998320869739620904253982155600321208706995102261899336727019317570934776614228279624359270351092121785581627705454815208145814747270980169200427592287264446298455337451867154675225312599671885696403119745068812877999940157697775260282173718338630223097905166067171605705202669147542203111329964484204150252769374041699642264247344682780556183768647043088086067328086717187740722470761010716276890826844033820289730485347275758989422619495961781370981845507287224106646612891699787304991489991450237892608587094959507431025121524157532996055387813931382902218941327406937104535120623519125622928074921413343511233341463048114587623180196119633871033128642353961758736942162376474650866446500486254254052378915783117942846877531394483736296707763850427149576406806692201719207270711640436539293214966734241103817572475879693972994529271225318511005262619518630808170022848370992692989178376091827819432746605823278836088860098280229785555789098175025591438486997677754831517943543494195444780421155712600231315338591816992539029327290383750279259408507030866894281949592643856951856970260492648859191372445722757560829643128598473999963495915365217562729260899176033339914368657427490270587754614627221314473523385599772728811860813438436363568535104917622395452899623639754284218650275206353695145264760567105459178562491882032831507849731082780751290549815090526014153248389638366562779197588704003763886554458980922773564631738946671358670002437792609926532640853858166371833689910006342371227521888985462256616595134913448753896321572610914451983732905554764025205460856114907835462908762361867725808829101494129427887010484807824575634192790958596192835856035642229775443466803753619433447559913956011510527564464490362903893004175699539657818550413774129471722988670400259357614877806334270973688298172787849219764510531270431348031231230366988119457069574129982095326123736732280724513806554712464556176030636815599985296475879329526942793809334154537286409720616279737748877805830625972559290659320870467177007699656878854930950374408662534796671508779289654115928497876570228294960433889385643701335793908755514074473749964759488535101951927148371376246782141759279753146527867175256859600371220723263087493647651934107824747038684956089218459994098442077055339542213286639575013424597339692639209982667429839922996745194919443742101455841754629560994904267305390310619195510596711795233359996984129886409644969307626193230100243445176341224116774838302230433293550887983785529668376917774923810049977020766265752226119147869678480128953266773825987624533026602499804124858105127910152228288680919984865137490347059505127939634012785058380116016158201512139929087364709693014634031763687342662706605079791983804043837557045973734575431521833043317763655587404678815578341748648519218701877257148921016285162472607623283323249556573753034374795565710904057626708068152251494257423269988884212986826103841847235290434753139713588793284927733100788323782464581521308771041340355123219181562733669769963813626654980259896667571531426558561083021853772568029181635433012078770849834446674149991209906653073314199262005928322117392615818629566430413616987317922057832297584265671398209566291140412705971275976266486649851786135002249020062965980087138574535447132363958635609925366757622786251073626356537120620726163351028366500669047752276806994698670175421508941444055686927449826465211114309355867990655881671257209904683585254426503206543491199687267119577128778582396178926678946290201534745035364519018795390246746811766723584255073984715970376061829082762752016704470773798620997166862372135899943680412430608608549449361762094538339329299440793971638832722944360033468293012144165093312313114839006029476318874961592758500904627465226488109581697907382066846687530136534632837946481815741937620620154295350284380932563345904144633726510177800611951790431250878298814044606538474701064227373555412349001233072133083235347487459787376279403703807888154514448002202951245397248869293062600560134295500105008538576207064629412523316530627112626565186270777090318018659291403078286535004079092813364057772695524445708298445548622123608796436695854008220295952906804796979613002284502190226292523908476214322919392774132723010892233879221455324852691358984021386299602980995708394090452538155116048679915227979809152112372669411580872195011069091512211098837265014358497390191374862378298332979828589280675262431318918898318225215446376722107524363251975033827569456312898080064881381141772242054225493451609900958323016634712370823083984626439009976816172490877077263224311036942854664827302424290250141379316709351675690520061130683735321311996496187247021962293994184343787870574057794627801215642399757391689423643087425702078241032082171429850853657783936393491748921202257137973536585938902448803265913705675751505623829853836767351048275120136814974429359820277661179090491547020218952518317240856799497902090061811729297871492235273099451994560780849999017077268810932708025581118347013333023449244901948116998051103180964193421409328454794534892399934923614215588057091032039363419930676743779898364001040849687155406279816603303339546771517073573996877517822995705129876831722490952428194724842099930819145094619254525540759400392691443317175946185255495513754986746278892496030387565394365588879946177842768690923727638413659745835806393996818031833024802300235446835796085570745553032228525815450531967652475109305456596317989530038989405999117072923810555284059845086948523349452739911967441605727895585516463617479813514316281381343200540684480647554584918667587044879862223471871709991329936110666394849738825285286263958437079344497666129723469849274424451217808101012327262154782486868475696579972204483320055712556519479118501769492253109282648803982799956007070413969057766641895108542980107519788443327966941933926975271423626274088356029953637857404994029785121788713172223066847502903458085949291823486875993171596694026412513484348659991282842807440540512919421580435830982886747148859097314781713081716943137837514388166635564093209988083853631966764152001236937201021272205337526464980001923248970935051413391014325982735295720169702781387326630373314301750994939700432204266441734849243617137063200743900861763556953331088533375662647974513214949950360582587461449318953013746171392411021921268719401083870455409243782703438717812520258803044022398736843362885510789738025682748439023460396397947226212022325837892155810227799539254487217780142395057860256227526753652355653439544898392544874518721260751136602267606533517775781758994893256983747903520154900084664232199826595227499066488170533660614570516974168882282194703476740231831764399346962406995812197194307712384356275327126581811963829857081764545583491933201665655011341750864389214260118093942175688349922926371415338795911538883608650663492494285079393689588623801351274317524162255546872032205137602055977698588526953067919577657802157230724010580762546282119676770146073279290190567417587379003247680752947289021207629278566655115192835788767007491592173561216460960732338187214850961468821550647703718319006714895171928841330718580062654702438419600965779600185378625085906358134551760230035403561105143710833508540322391028617424456041890440768192600260326521458091222064446938238524580192166531189004653013760970323476986163112729146041847368155310536930201842388100514907989986285028152232579121250243087183900990150304104081116859121286448239243348357354426439332087091013606470363706785376906184268755539296047766065167508797445567080041967876599818349026917276210630616917313061541554664359090008971749776374922888008224470479856127371383520079697079481864438879042548335953589849253380664920899400066389165030020576281747877494368823642902286149859757979430259416772186621524014692936483589683321666232231917198657382422968512537393374246432506459315712945887280161525313402564412785562279688402776014658097920177207595566191984505720566032171980817248093432499471573407422741267535537792190907867772310470192246974486242409294991646564339659296311172821487691415387361518368358002232126427175348186260983285915013630462489800994709039714768490653776139921591148425560513222581914691269099627882433950238366744049435126864696551517102338574990439051014288641107331775276925590557112123848552944123712559927798767656060604001870745831020943534367217710806627918743824819528778901432361132400874522503036881964803363227725213671319249255588338379558944373081448848288914340029381563870874199421074704225053940653263054076372331153673021564933861085136777463657122583608153245145603654759564012552343708794221112376282396672216677067893583529685387362866085958575144207549201885063634649664356022770450599025073193635589697904649689742659731140870664049705909529992131119908451169523625982480852065130458048303330783267873632661502527296193654564481985949017941867590637521370248661759842942985486580506523527905415291993129997589693562083571993824525692390012764335534053818968643292421277387911598443675823895632044862101929611888494601135784807263444029447043613253239718910969875605613576775133853633741165480175557199106843404370509722920321859723309901527892004815816154454240322704330590162893392597841258761159890728628197646144967822207646701728736399384331473403587477868423279416635027533248541770967263778198842567490190381802603584303232553124123738656775047738687142923133780711030685516297965124193566037052352262354539607323266508361484876586175823446779222126520889533051136757982925713629289751952089225590370193731715841445105382621870755409206256938181565226769507387707852521144122034388075830457994525416533663962455970297774911851804521911035459353309532169948020448427333167113803415885128164774439258952605402088109777145211067039266101515402978544740570697381766558881546774239387495303310021282368800400514079555621371851412626774730245176141487171901398964327496365698995566554278753549639947813610318041843322486236707793661756645237618569985152051174050866426218945874684052954853332216442206370490833124972712199887443585954028942543566576436008194402325554516608853398435525073932650524074286205850550540531543625550602818516054893310255606074691613285654709269754001340023163558376144694499945698271995324998769772391227717778525548481765287382012664202138451078614644891981447633443984616961062704113987629899385435093671888725031427992000013446048294556079409188916356329263861385119483041778470111323934672117382552154014552689712635622044067335585091419078549572685722517799853945139066113116557823200991839478980485148139756437276310315585052962711094520823502876017799162004452308825294752903780143322159163359216776682795639765675024359141047188281889450388835463485151185055730257857244956639772765885901407478608833348764219975332660938410968229409406088016572970425472041832771272378171279797797035736576275270098485254500981153781872753941048954786738308270916748413503252625251966120660459010356765817802826429045068657112315950170987790686087303575594630278186797170965451147353365942405760693758157024450678772714436915222715682621542648328393696771847903632197735143219253117775874065572827559278669061592703292357856712182245702829796197056320474383079124060345835424419150979181507698302000007069045583234865337926621992623375749971204642446990777626632490383499047710478578862245179305716165431024544308084192556089479503354600043311566543487429471050399741986074927517309966574629189828300270254631391989455006206141157242311958987861149970781306061082396476609746044799676946433313570016028171027821734752039087742788832856846639871795304172840764319177762201671679871703331176399614205812745806594113056822213610394374595550171039503669220580872124167464169590577829197969856928840564473147431728291951743418213909020891248139717532829309139307324676418134145138999363155157666822088563424974605011214474234561958644068385566981590500191642959522021800166068563481044756233678800379514457696678176805627254751999892080533501886765304008355851853948156310423934798610892860385518158372125742586604990037334390212148772332920836540413171820995316460503362722328438872099507648776358269375088834055987113695732969353422819649914493670628253189886707685826733188098490064699162769196462197178091601033240633742092060902726567598519786428036312494443148817711021658763571536644924743944370048324568741512735789195923635121797799038653592749525637165000255493407622344594232313502271601912269778165783446812278845417457586538145675618091493526724848167114864548061108275777820993568273138069570417876796279053044809083376787522011494624546074909061660691640637286419682093499212330107661282280374851441004473097968359669954161836104289719705649964194654369452812111646977860340985060266188051868138264924697766217093257796481229661635130361603763575209317631745373236794727193007345895568742625048392643535752017720886976385547006530147162370985119567662827452345951611661122285345274467812187128152772828198044470287829483436630828621443834283933061869973426636841662503174938088958731532564136006533111241497517080811026547277241069801619368046197038254330917315025484354794049944205979487352155731523443985515670321446995279071915493012622438463701624086676046991036641665468428667863243481438144104997475129384407937791753089800722213988580814506420181828434464111345849729424096408245260118164415180606108341818909452188841412079787980645835501934806620697807291698253154706727593807361760609508840206608172948784237440941360116633737918646533724288158512019153861656684310632599855068395383404299612799388078946939439804726113661786432879308541638420957312446608450673637732399682300434221464859925923221506390466698969039225502809581860888180763430173987356554433665298962587119505406649522644887130093859157162141940270620429317071422670076888270015287432039353142292463201458311748039953024013036300157681289307831534247803967378524151269240623018079511894898426335179627535676928729840275620799295814291986056942345428344453545269535794124327345707388409443474582974771283667398460633838739913858003572434702047552352950879994724952355013458855725485470732726133558254542140241633844025957105365419313572521406256164016462372080325523482769734126885228449084718164714605387688663314237773503394896942177771487500288657934065953470677148012467516329412866843212947650541393396631386347555804426102036080289255754843634434329602817459750576423199736486570021428392611373877893467131270574799604435726228651959220155729187266319233386485777943988660811844393451428256717646755716254300083904773522205309371240685190676214538753207966844645134821197918259003182495235479846985293701759492154378658914612708682142567444147095497018617281359110902117920725531122469148975703268958203323016883831569236133529003603833362202853118400173131984771412931859271574480640448580883928197270433178482028973090531595725903261739123015610187695736065475604480716148290769317072346477291109395091443012208320879788331725598789382708448112357055474285327626461197894056314208119696290296871946392825764203702558293596084592330063422640815063526516709219894586212199245909945107086110527318146202939164664570138496089256131319667582023030903220338472809679989900075966190134720802260549733743988009810716784814967132808315697037229066016638783617803049541403814297797063504097571959601223859618220236460435365468876273616964977582199141192717139286886479366882946601855885523540939542911001721165181303035250295757804176416487538695267810352135675174637329741832437202038317518501153696331084859275436546896784758870744418504221637131581695470043451607111498383586197039434557677809493753161844551986777183528706928317708570047213682844575429346154967850073774018951110599706445779164048664056208523721691779348621942136050587382152008824636852587867072370504325971481960878918898595254980293982721591693440821999279481942233518649498707717083882102011010920568111932250810913249902342481472764561569756057047564387676395955386968088987048250789547613391325196480282398866643140635374540815498886375692701566620478926327386180090314769809070586546850483645016414930149011180928072625396135675547919261758488905962683028189154974348858839670607559911538799594215181566419664461648293512903197378392772465968575275924040207070331647259700136865792916743805636460060225022009555911506758744722703329764833376608884035244776681807079272059851958248969103955274321981361055653095030882610383596652083951976626946931369787729556364440715932097751242497500001584071338920490837692185167860605115070019549822090122604643634410262326319800746320962802835287034390354111115865790874939042813949509988832911268012219132145696181195882383952958868481795589403551825711445660055304159790661413008365913113607195310961659663716376009165695349750905934408643499052196577976419823962941950712959992212234788580725813670158180525202141811656107580848620353789727923453309609949287741837902512599149154339176262431563817727378679677652789586189907215092360394745291315315178280769752824178866136127120364844360843686570666924377391665188451950415163418019008550860833335991205615992745172384110734413150392823334652249716284396986055940980014856009188306532585605420519999060408247632994088479770891700298117903439944095625163759805013608980060771557434355471774895250923968185127614872473437277089861855286234820208542123288985527978805250685814884921559427896393702833660533784695823628880970072319349073259978716833968468179590572694799891627034479004070759376277217793391752209577997711609243576249426419043330333248714674522314937604818018967788378992728856961524893134453753720792091904689980700491208047979392621587263636601034393317517058140153695430456108047489091988799433658727319727603208464797159018320689274278962431580710268611873345082042650017311093587316737506047072564104601699540422208265285367519250051097876841814985282642872180071842394128862870024131550427158424470800953331106953095712690997421000768047945089087663231635404628237322206056194051230418812268915485268026095537420507465353167347945777910402999486556725081524841236691353551068809229611287678981310879402131425967814033549233559647486789458759659524816156257785428046357885788728798334726449873717622126595441912361442030013584241365584775303418366701542287195829230746483209292971621640713714120962019145289378780969314257595128370406067557489678645404458053687082712789287239312499629853769537574070273969474157449684007131644293612697622540605642045541405898737405461999281923424705046372116343888909788638977762339671372562117660223660695670784812600612056762192717861277640703396725012445752647660972755926419081291679166524667260979795012933256505922882790031660146080407763031478392867425713264775858816101821915969759500481246145397674060323709892952582602767900235601067846724543572473980966420366855192885879180614548283832841466665075996354149725301338358519169323717267254062579184541615446217563552842801325876467818631048968727579042055430766829056006240108948018339677305715364169866474021158726443045415282083577876330771922441471903310208177751083536690365995902758865071635759854772834694926455251271950341529608500788151798625090215572084029028380951507817448298079939298183520695590038747651635996543349440728664825713158380373219558529466057128032322906043454271320772921500287417319365976168419625624605115776262120980985923226829065963505843252914585540909170419599634277050723038933433924966297553342377580579351310874515911272119419209407790850494402102776888845698141493104421164929231199034729805606023201679897060290278578720809957791951623105561111133441647850732477421840889254450727982538571816636875200828789909673369478549612505123453026030215697838939324904100215648041600048460039211128583146953718878628701163065895128903772760366897751078368367149449860760323482919313636639333077112532263506484449628903562140910917184883359776685061477491947729628529940226933346422619715834114167408979784271108750432262839890447106483996662801874672678069833459187503127812301867619501888954744651596042888493821496812330875953213277829557379428092928030401078060596211030759341486094758152719531736557706698181800703577011933959623488542790769609795754171725493159747905511760096118476672312212214368328427513637719899441014615290328882809796585736312071114005119700172543463579423776006423420286785176042602478265390069956838609562249314263338461011350408175605961013927967017552360420813070363697740897703263694257754856012654337464403965817533944829983303847137943128996206061949794495555772350381966455640399658960314931510072397034602157188468414498235332005390066923861865352437171408532901795023023963305004538478595986842966576827375616876814560462321033161451137536544148847560393613737181536328819284288283654494839769934062928897803037442335381073377792138665249528844845017487627988924712134129833878665284628767176241405461020337739105966169340002371434437030992017569093264600981712234552096820682678182956004241998659956895146005707847390853503811705773368682511571235504699508351848211408274201762880277944793124322084314104623005572039931534794296111644783972369615224022661119722029047041665683970708585749056976393919847203913389066146411665473936057926195115695695372679013803092665461271109469924054694941918792327473598367085225448873229547450901639248463592556312744455603370397515050475356724383915330376573631292372402745732770801947701519132781347983632063172159675682339097266427478373480515275484903594400622175573994679551026905871042323165045382475029142779227145853127831067763040180729594761438319420585431546444900131105212053283280444109163920317054623845778114784577652681377523891236283117469043861099922393013973145606449737426020400959335723260763918132824769576181564972959353534565137763089779652100094511330446364797507184259503543793453450700361208294282937345258864388186370815590043966329954654849125677177327740604000767897331162108194915690616287252972595860248117617268977717440000074061968313794506703892623292525804480259861766805425912512279877433662083855611776315705013366749522257941448775139795054547860959739810400803175328510521654357751870807142781191563107709530016678215888193691287437297082541468231278653445347712336543897189813930534546163421054102145489580924669226658179842336331091598641340097439471837720432580138626610040040257095582924562504785423881749020155620716033485839761416339278967015865325282388487004257267088252026526083144317305666263332820011765688760660248950414043569433347527093520428825842731654779513418611057685506312236998762941492403138134130278628895223957785888951153773377278219125362017598290832241727107181732628628969099360075180094934523410329138135442828417419667660450020302725791226991835309309904350519775277169896695751012666612484996123705824658061230636549341946353772353847256502559299230059708672205806258078192365971229407426411100522203370801883360978801045660422495415498395392435169201553938998447359782907217478259097827470124954127685902024144358350312650572612101443964768748398651928890056650901122614041238234484827589365452085753800901291898609505330030279920549391725529609085950104393364051410163218270357861744280293822046879547215661467548620526839159988042187655020925238897459763039384102623956395291728187832665657676191301309167658030267202643710625509623416068746532059528983901144863435882231708345398017370764455523600539902232933592756840568086521273281265548544166869155189217769253547646162274698681904982234866298619169147606728419531849753765787033118972568320216833418202898103877938830638735413399030740564216566952884545843561312568965256410100307415769201396847369236405710036800927520184308720379877462570422389272530968336374888153750668030474213183276584156135282037084306452805350387567036817741427086657772348793596448591205056211475960654991794579079509727749744145381046319701859330950696301434310162412623394533581040768155023230373375367951934091941241165048796250062129299057998101829846308428031549873308933439874652060342146147487112567741122821920746044030465493346166046949934759667809163747600240109859253313224534523318272414115305989077622667597620194386096109434183389241552231538271746064990361981994758480643400109172872094736135632452901332851948137971314553706055023957966448686966821991071157048343122334001260237583112954121317179044296283918200831396802298468845835281830105166394193289527823526663377548771320675672435904302829506965065381751997283437772160841249722003409268884062102256196782344983409233009570294135858257059097270907739258344911489341204245278111169086281184455973633769673687311268585203110806661036758146943995527693971279945008388466314779754691489727612537392064606860749506761615404385929028920080939532208104450150030102765923748624515319131703319720895752546614973524876482149732609293236236247273777247682281412717649106363575287531179493828389605764658808933368078871183171217047349880988574824325448372362610802218446169817070746575905701523040744440387553885188323723297560118413455086687428020491756241547694681510237054642664561138533959873257613324391861408301343062755145453231896143425698238618820153199341060086040582767420305271235520616347786529138839814469999702896131238637423238457679536703133536334614066610801078208632267460386521332681908693272437495162368891180048919544538231408211021882239835055241719820614932102560630354408793308986702893896750522314290296683540293827484505905300023101114992678464105412926567451101220289034894056181353733141385555104182626617264287068129416704930481819217760443171667541407462632641111979636261208100709624085412270249731273141538595684501410362538480004359104643319518414061525957275846423061937152965946901155002156142045064539496986370236697651210737114979925333838233483192299783546734471866931551536263459780264970260754449708918898646840741976940696392398098349093164620481102695289878324157316315265067700879853313949779009728011413535569426979582389581110912157244737931259265697284970217655135182755148621789122423740790275289578800695567912194172232381437001835055296422752802918477505980017007907830328996730968596231403288779932382828401789209564023214626352152557846773852252722874386407429775877571315794193926987712301114758359459503977627104506796335065315210696845619852741005843152072857586021494712277348477454941140247292113886806982524284931523693052325966127425300967746893055139725681250453767381048254515620100529385732505537575705833592952363980135107610728887764666569723973048108451266554589176904835207707227061181003264797909809603964010740136778165330131636080406736628862983444586970582772349185817537741391488455814718914037828201228379025106991928961877954472191162771803243900838963413363540922360099635689809501854005721083471139343422463302132347161478224568573755012232757654186967083217823591384926492065733104917127987001845373958949362819097899361570859947150307057739759117086549735298283819946900303841606500062502318918356952336582639401806122557399912051397857458771314546873219089182093197569434149084560114632323348457092797433851092597638983214843267901257463663134781314617308650305690845449700988250818658679957942716416638441577123155235542071894931406458086716314074927818884112642886658753625509830302008526793083053660843091515069802823880052816971852890353005110913111226709140643938928883849361969638411929899250818485685497351413304912979628343794926690672319498774771835144880126905945243021432825265901074072219675205421551379944471783809347780511228363292693403155051134265892661797569449245517472868660920599174127187787266072773703505077452795402984339284890109683702584921296131737245478223242813633895009345139605954330605487395849639794196025882962585218410041041429164367732771713486946842899444326395469338024741363056416431094423601582895344849458557569072143815600281853202226854482541926313966220609663653863085267317512426610902406967587585145668827935607177770167562516200765317627419446873064701802764040551347065283472151903752719308428159105984289801003877027690073436219093706923712506639592307178568316033439073153303229391098307418523745556949162370839618754825331714657520945252013875481051845919728709239722269244770125576684572285165138692025972298962448488064282487593614865073188125074142887636760634331369470666365999529301391916359895775328977931402715320155854718004339702657310779570651367343411980684708960460486854085813610752944735823372229719711477975083318919444329411604351499806575223073087721623022082458857799250279934773245731569510756715017313617596479814682740942606042680619141077209118785093772744481092324182153082120461148314509548822990848713228383587947163388561905319606931240687609278063872344362746752319253909833481608694446649396658474584472355022720916237042652989203977511744555535046390355716747577476430768291790028136110008828218535184055926064540415942043081374080942301716267577776825913761241698826441242707207132111082549055297779800869982368478064129006255786388275389167279944085935618049212708094398002773133828203282452806125310544290636953095062867364164973356884934487769366520655412414671998178217851002471623636416831521977100539461389358348201695611378431285352130979354332581354421771886107996693593322598686163173091956900566100319732711910014276847848482784607549460708071287982503797286563627735864685203387781411711447488662580506919074616983249559689439820043740266093359451795279470837398893812510457712164918416267341168526716387812302708234976506100956892054099586007977404466522826031043604785853756197203659574797542326864743641930696275983938639039383976918529453645314080185326049716458396631545041942484131324627562348361695524825293457752765911242135039196794110091975825747570795386505568799966389696249682246280342966618524092015699346105263218024163990791087132083482297903130763979613473913387176208922928712094682675515949616267443388284705478374658029384543881572979624256705070684391120324441805258828422852509250787864822604748651961772908816194380783959811159097025994482453404926919796944922483742026319123452985413278017571278566886309150358857124522190490885881345265863704746228263588956571919236644608937090368268874303754973376288862484085353465640115041462926017035394130089878665138771334776409467909158695157752579971217718909443837122861551887220981191484052592382920068292711250569816439601772572259768012623447983369317370268885112258821014795706180517495609583877032038048223764780202857829613900087634097949867241477820722398981112549887784310561560787017925696945478944574899189450789104776948969124427698064774021771308210774498675118083848377140246948789789200127922544042988206918987941080213229730827690255539103739275582043076502307615545309193623059515142968291118529600993950169553663464472074240224949614572614109928901068324130068211147114566598653975234575260644389185930565044366393116001108968881017090742771477265223806396303581603252017467829710954822985343413521574441176308265778385626082663160908651082450850219494390316261203030852320657614703993356424039212793921477017152023812702975090180642248767216176787186820146640075049858959179489141898945811981166766767170808958417303432764811446543595418634015844195047934691554050223561608312574096058566460662719383507164351661101386660993035073313069955716804706013822525515533056761110682353978362144060302654190404145577230935702804278403687876413224776226002198161508963623553291372473425796690649269790459891949449662734434497162619543058824618041217236890350648441493035341339677722497236966734545138008331189365802094164092973437751412787668677178386372246386901815475375282245813809318446288294605920682942075072774629822880638169371477662359989082379276962773285629649665570212988295554230364047191993415244940920604530986966933515031262488004170410349415695604383630856473825495652469190529276541843602095979249080866386859816410557433030131120597006919307418842721380676606492045017393675143982663469887726869561867405220787200566946232894314890798822098147226028444874947376198263353641501588628128443875786381112926797179439990922916825839092357124168749174656866448968685552166470253991097450460836745665776472567072345311249003579071254220431847829346190277916865241513339550320580978949242251407171309508801142462524615167545251923953553812812796260665256935971137006909979688518557390466617284338472954227671934777936276788589891063819758889652011751278052432598139972244722591673113941914651135780718062103411861458368484552768493818792461621795938862063507451763056325760717280557051015665570040719485293645791748867210332743309567807945264041911552088112683723606891810553846521465344581837340337575816983786603970147034983592476490445618714709223745252830335030049582105783537791929412139077666889615999658819848049169039429437562782426105040077835870008683383707489836861848947846519033195580928067520781916779357919581684434751406228043820330757395441949923732785636347709074020264905031104602407841853676929169108066940640934182483936811287487300187931038293402458787582994845693268663457343886526115370317989144981530950100566693608492368194385097064324657539024043053941959974602378726196174219543946708813954653192301733919067704673869912462150060977427632515602398636678171393136327767037299342951693778873671329147637095788215580934326288840911910852018852545035243020530629293621139561443932574144697089598068829122935731776730489045717358325562473156966942186455302127002114022039974608747779644709489115244797796589906384418770997189567851284837589695124739467392960938675720763779185299900011086163519213780957046726615385324925492817408567133339731588076377367093080077926628622522134161015406886491016458182682593162761762379998002418582226999896385410590275161171583552341286538648885208081413890952551752752797152221884999513693097781447598139937479799584372915499176297136232836731630374010313502043942856037083079284572855603421118286922603912225520993199838422159918448395641159089305976756705607255697017154184132277599592427392938983213868915348765539995943077594858133294717775720439621772454892132175003496794944803486399576292334316087142198570183000261767196592083498937714834808242405965785655310308867240264750725084240104837398367051824521123066238391904852929941093000718163245431136851931524669736901982562996216814232339219187517362249544143838108073634560101557169614027499080920897378574498357297870125151949273252611161270439044500436215339165600634590130638837538406159637912104127317075279667888957046588281010056971189276119613442952242095845370940420408785438221448450917300404499485015618821325815982156305406684467854915034867591295681736123801644123903472484880982695945490420745637844789016272486813545684665580677166106400066529378041174791179705123454191196373928042558220338091435619540304355802434014630796745807381153118372758265098581751614693253118459658201085261240929239816470742412216818546733542986999607169421929800394326943465975730067446356260970304813476771890576978631310520918610986809549213489461855270160970352221518582845449240776827108303819094494349973652345765519749649310958102444092065522056161957615174661219101969136249516408701120946402626071662270491861796002047372616649580878748688354792295293871534443385552049753198229230272437336753678022532393043874055184367911111756841551329365459321352608483315813334374337310568596237612671310603149703958105283852010022577250217733701047198419667300512304972779175103484703105288038490648270726239725182927861156936432252693896147533649924016941277794467332256579075124762539427709667169335313670086668318029176967310803557640237231328476703794053310311820101309395685542141383864830782211759227453232247222599993480652705495692598122075926249149059025080339063266945367639035599443590872363729278907201041022180650203892026357573097811468229412919246771523165703253446140387755383761517408100583680263192942088900969832791145099411098175243011028495152388183916902688052544899401372205613020195513891997531637831222041877674524454439472945945212254095374591974227370351556447699278732972179879420749801974327671114047748851166038416940672866245738532130035162815316105688928284265191769628703870398388478524535797061411200689742531616776934946758693566097915215363781852121921266589221146009676114370113880990427548952197197793587964394675135785553969275488255012991794910026117762758243938305646893882803367448467823194897238658298949353783762585384450212168523959099319015548041035269244644024724153384295951342588169331291340066513552922950611042664665784552557527329526991222642332215088273248516866665361603520835955238201517248244853520194287825971728930306223831381541107286874995748916814798772743186221871346550267849457341258409383121259355173215564802573398512742704407407353903309711766205739603005850572880227927179705863585546462587859618635376158672896533233699549913407067756479576671402085350179079209249233543131557488175982125732060048551988337610948620176856392229720122234214910003609592928397806655297646929652255915926843451405045566792524234905885047768125291074726237865711707059430190638416289880363751650390879052030444196453432195347346546471973595196025067314493203517091225798046431962802290239671550536465115332623149980169153056475053547607860207391885581969225821190724446164347656307844194594110576792306538361726391459536687379047485098306982872205684718711398869858317294785706246042607703321866399929168556274085551900157149582074858798858927963962886642316870029583741380775822184803732565395060022164330511870278833384757665789177983496628191962352707765946493535189857347970687549875458419045145213049730996897937959794156202605143810611598713734230136901890281412728525398320287477523443561838173293818292316049345833632539136167226924039140406480460644135895289197019166310421168967015930147894946958187321911099505281897711988711986440711206781762152755466176871831112451052660929435148527879081317378330218707839157868046840119670787750254465819236549430724723180882781380800498009997681913741209779008348640190124094824911594977145019009747796649127544460467428600868260071783252436776499503307448874271267037441639349631669659614339079901183854967640661714971402324716688608371364540073251883464247008581361272298946073942177695211713468753824764056219306029960615714963478676063271289460377364780779908789119694374694948721756119137458611220931626554435268407506342063623259853423754193831196822960510641939047408041517463239276398036147791768823711124554469403650924174273895189888261773301296597176093238168673898602284494223265973033503023529023169812999040854518427316573312766087472511745078594697118939720977713302594750217872938788577622688281692810911636801747417784941249725383961109844305428477014392159551331431076168788988569290084440324079103589355431543999281199292075106877733449820167248665228704540250235452159420892950731047234328569696921783329007157636061574786939467398213664407458777725098055171191943136064714165161316072512894042066104560945492786017799288070461971906640229475346422951137664902689538880023720233208657917884402752519306741337770701896574672161185533453422328642339907867753444909885936388031154743698567644292878171602323173273194876934667058056987393758751001171478861250884636993226549158207023070147724477550431365239144561160487466568984511452077444385275342682659058686754277070638882719331385445448903571853607535211471856374412735709013764283377436284460290231937342006032339701827707922817442089847588744750494996349517641320120671806850677834301397403339936324196914179019238540804491813927635863888947846261154343056708076375323933598767814935726758167789515936496642310804474947475865687661340840217148070121244073595708069268852618981241845239625501954372889470019480473741407998604411900951037029193441263418405020994094303361480076149295100962624745446550467217847414473500041749715164653532302920687277804823616802221784964851015064347929101622179630648327637687380603612754752974970029149053744377497534328571746960809258496336943458129317117108749110943530231269560651773367664239430832362186295189004611440592803547913033137146900023343642270506956296218655251529600728827340284662917217550133975294701804836435603468062751800831292702336291596085862177615293016738724534504884272841122349359660602202190360922370551132725799910004522848934386417702739100885687810909977641047143363695788010064393522909865656672138344979003352840989665576735791189768139643655400593235417439345892545613635058062893557581403178518529678550854034011830876857075004332710375269005275398156726238886594609684164522894656666643117415552255406921470418708233253877054918082927050214470427530282060399553781104384375329931827341236247969602131021426032878342743245861195045306133939322074780233254643933422730663181976488755094378227681335718503138551807719931614750344541719384731755237076027863556146460738410843506758494102586700860138868618715321908492007126865589707875689858105219292094170543344099565493690834388075882098724877634249396705111127634773665575252350634275462563176731500256038365869233021602990256900032352927488655490124416903452271837447299576242220639010907061858064097277856086727174377391537703531304601984931766854839949112775796533738980020917645130808081778526229854568799545636474153830960355056110667221970651174118436424704955422926114611808924206118633986104009778463930878802091271348693806759042132848977432544907839407229894124083874975784340941411789865437199229987857679079972812278866111383228117434403231935742412951943355777337320738797039792870381403337389249836994358066884293071110536418096095489031736481868834142904129262251299674149240088681775282677536767206682131494660086697105301879195912692669752737013459414707875332326832316805520209926198362044238796117915453474668621065495507685425295760656476351263333253557053579391889347869918730826586903927618911562012746134707451077209085361192437234954620077993720817707292652708920276099798204463859903235184577063288658339775658030543696920328358660586443711471963490741241704808567130613058265648429056733041283618448067490882859963365870952030401758438815166830096400653200589361857914073145024511257892789282012220366162507932778645783796644097201418760841458244803535271505188446325364600228373038329001148344983727415780410763608177474534085659766722855438779553141472201463883660140533273604776967204250729068893701780448002308249402131898895961276065230462135625138814289282424482034365894100618732231319262029630825600077324878984657127034891232398030151880850241090275223242683618285738275138652335488836850092016887233957720005123868359875312327017035129899936666445612378536864845904651190457646440643419208135324042038936473647725455300569901618785250323245030220455885019543920298770089651967385349965131986410066329735724022730291043988913669457208725464761438891007894401376051232101305572947867492280324821625860898937283773095038586551924151489767910591860630091629894310383726671100588154173294223723532094395594361641772465744163614789556332071501898580910681585287558325199372423177803751934338469445772702432876660006353837836703326676911276499512012962582693758329854966142867564873486417870035100330795449024284598485149429540972856737011140039980827119239141453802229603530372324417112527376064694011108981738030056876113314966941924915704431558708610086023561762708054622649049338521931180300209671257547211129794234628485633664404045197995878735616750046586846414924027073838323950629857186400659775611342196592070598169552997720795851864641489120086666175562439645778515180160384529046359837419156435243229978218877327828099325455308008277836672418275750435346665325739671985506750834857577562045612641496395264482426347660689847274946791804353362366051874308617906390474552359039812115785633662445482431920223051425348154020780114779718873485466160750066983756633375027947280911825376031437610838390417455312417927418478813239767795436873710212137850412494991847465160047196051375938686881233218288388039855640742456557676359641088365920800229589580739998212276979988060059286433886029676374980065493978457898258899695626513870863967195189417628051186051143850527902484536697960050092080018734068164574345216950905142467408231172362206509108459790789900935688249765506819076585037292263329658400840334443703911651918318863206224084506177979352979979285550048957452854769917110802987647100565140080883702332581718307479417361622995966993017794884062651434505397196069395116054966387078372208286495937249742717634708016775907594277259435004301089035868485896786714358190271668478971333623690298798338050336370164705382206735887598487705212548608557462124012177788808319104211003460062057906595584891542518494477419946177808481450736030647936524026490478748604770354459201268694152330901493672916895616887540284078399037382994770715721275703971619812251168155469894038647837135488907360139008313193339134501666772312541329083212102053108202297680534247758836007215220486139071741091128638505452260822036101738481918768120578834529930885032843468332338214627474749848240644896029175385104045688659856645221426062024389308831897432888911414414944316010763331281262581235973890151347909426838718615554968270002332886411059869219763135610736692850809498283104418349888858763568626218359772693675365334335478813100341812132988089348275392076257605274171608160729989915222663996382159687340262377596184844167241877430499467266696525961873922792118255327000888738216608308731076862754700201872012123299536865580913664556003609198864693989255054400782510467971752863106194886628216151529602069027034319849447481284632401402237915640524566126561377818427940870089696647162768112040175042203777960661383494935285891145967925288239477168587336692115864894200011358348022914538241180031723440081229178541616281104862485893862931314781580929099849929790025723663385256738050541378141257540675818027576504555692856993175194886865046922723986839223166952291510690890165099157192201938772180073744361395520795773414273656501934718321083650656676350516063046085473676585281605009155309372032971540546011226179858420919660100034986158006779424245268971529623483525659750103449182862259059710785618881444488273733830185781054259823531070834521256848926296318580901514461365294130225580731088689780519225535627633596308381077143519930759854675257282942009805297410267669201305522661882855813495497652520497056053749341782487262654372295554021810241157615877726221411357389852569916914983039078011639115242061369651371401013692164044884974391754028877524959096257867901994221198623002816636508756310729679857551117387731256752689642880393660681171598157168842922124970023435776343451437495070027872413143136382052730545706647770154682968890759108065134153342367104434332811695524280188861318426064822703530749854578337218868094306156272452304474994533083367209766079100311153501642596737484121665343039295709715162425462481765140610641555838017962917754230969231794114357430700387322717740738700586105183786602763547733814371035174551077017360266838442258888747614643313397379662416429156052575407391376193894937027042516265648175002807819642603937857799995239621182362330573252823250875082493043588960464387981115975753794299806069252212548430384332671093753746804835254281830285779599456875555812405004701236669125054076108557987921717995111107562970578244152387726255085686848362480641995183322918564509299994938762357299373267298403967538867641015301737963037778935533677014535475081011324338102251375453801006253492365919689556561806644926238039334003165876996374577216681658198479696434174576239983489285798119562279428430558802982138691171545290362097942755344284308392470149696692385008832170298237602126371562027732535865155136205379622116039954181782634415852155025443272581908624586124718784401841161075490255822610513885381104394407242095324645046737970945278053048720938057263899032107869608840684733339344162087061315569141541690358031957803785560435492216633041206749563324626493755605530361499281079517131761927349415342519441964635054465887408014195734522524559152447637762736882907199165483902875080669207754106332336256502832340626975864600210262400101441051902364927900090207197793645715907214990645793468082625989637516323092550321713708619296231930612607825968554907168407524424310608239531294860686660184589407429093110615079805651419178750377809588496473618838710537934025083717492051238501689615871861837795819859955137418083137190691464237122867857076941113699916940827867146546635155598183891552561999272509207582038186215300842416270615518293669136213077130202556885240270140233207568925519285405771849714349471020896876819018560735591774498811447805373682376709486718830434425059480764671062008087684322053388648762910271810955868607713741226069257158205406990492338283398598719259050095358273501618694951416638366242854951116180369522536621635584125214368967250494375705502954384661673054380970138541985618333307703413139071875739741609451613880135268595475819406443893674820007777916208203877574152238813569011666641007250697809462612754152291481878329339085734557254848138124936556185175334404245302932807118460919917012991472799316658902876636875604608849255271382448180701117467463509579827179311312155647669973918331820253398718845511467390114875450661531306595628856340586820203397692389477774363747053287232618196637648971073255115453659333031131019093837523754490397623506257940717326344758993739373009238759217149207727342988082941988655737337424383671105894614626266075399694177676862204501649525445460526198676572751698707949663525811638304723613463002135975787275725219470228977700513200757408099214966882862640139754551084791362693587493746696253240644150216789661628399342329702628214903408580361406044014865241815646434858794634740793744505042692975348467389001436204130244618877930798247365606706702153056279968717165902109591520761795948311965675398848465582109509788726131456674473360619242298493294306142893529140284629321460464139719168132403285421872814168793663610126392388471464309607701426225262223971884231211723241178528251170093721871534270061933311595498730543615131823936392577568967539517223475649003844997070368418613474674308765914208900631304862392751757847981277864004326705435717501130544568703269262181355349929067903403360424878045142937824589905520457189140714116930371407937881364516096680848055029622052790141508054303412531022029881056493817180956519513504013831135447586861323098418168321323757426239151245839501767790833857439105288430536520736402976318014980944312078301338747341912237683935233667387056271874000661136024717667617300205568593418411197402206628045098944517305843697594277739425160369909705027815638484482958311632383602361876126761221791635737974614019349604656322329612011064354929806407903660084039298666417004372296693731604322471838653582941761393122932124245459427083911147218652760745724866541400780804430839314587578113265531861843024870552342479925640847791089732550690026132077594543080636376137051201361452908792574156595525593276359496205983398608460565235736958415647552120820624337542814051703358253495253346020518449244995570377607785573434495947148424224572744751333165970865223005975038198457701646057586609251267367198979242242018515250637248688088871295146174992472816153707592002816226506493229697005533132193458466936497983217095620954670749188705355212240606036419133669480054626067267215568269605394789349499180845560667795288877079118365476136004044472585959458435736732884420822122890055697499620834968636670013561346785109748994354356515605620136568323207434115673380351968083658867696759771496500802578150156205511916453484276295580223652617612841420795331185687514955890841972539396331337316916351046072476706623699657385491293952910671198152781372078025150413035333790575059925316323076926234904691078439693919503812227253037319722474445107099146554139139585293136217432533683023927670384608882517657875687679367688826802695940687804841146418106685395001137486599604050942632173426026287127546531963762849816204839507096419762831052044956594159855004016940136789708720248178961350768270834378321868474677540495878377199733504049533538772454398417964054190556459785157395626879579992047816425017023482764979268964008018829532737403651620554211646915489164186182798316074919088977587575253262157720481892314821402725214316039005468056289053399124229893419377122172234826209868816665230233616502919564441257594581002453851979454393138900571698717665775892740867944879706667133985387529742552504368290666490233018000734096980479808073945050477005629620854568828395501105762860460748314986895073828914679474789748527513182033344638134277887902612963472901444517018438143417821376462657187420280605697389887995845254366288678659909456591066483923766921200942698991230878027491810036505479997723983042656597143100832318711397560932673606500607519587893898968006511950931308681524097327560388960449834255195599188432513217605952122193310060569405443670914525358791994638454429432326366615887989248283154920673603470580706613831867548250046983629614530832844894203115195024594470646988053908339618926329288307421635764352491973317395839783857928097959775462224577413155778815280270140280183489248197763398347358664975682943231645235787590879860390876066246240379451402426464566223188847688056924183288654691332901016380627219840395868061686735569710546245018166634138876378118656412460912988305033297231269719605327649849145386179128799275341959272146560632299549028810907091312356730423946815705261442498829696311632781749438332180642260451002539535926743011856879965684711808678271008917936930854554716587677417568858142399652272251496972961508077595477789735977166069206523904688265871486630416729839097194434388762595270762952480989071480850435073905871744681266533585665209763017293860317850306798448933509154741534217851834293717229819114541440577969862986380475729358654211570390196288226634588777383624005694618664604870482825275085166715081846966912011861668904757769629316542538464272966966702546856591634179170709790375852721660931710156886246555638054452364617443736259004578487317781662207444596091645029647595952532876958226373385749776121833977179892556808444531368422986141522654432213299872447682929801506860334099132784318954437215905328766159443181948841547946909751109178351160298054745607824597883460815700319418238597794230052904049854114762246201612608843569776717411765428764240033085327597705212634848400300748421128101784787599628399531772422652689523483453978463030948044199270373213609678688893993034604283598130447131074079839261197575844478543836718669148410596408518698649459932637590029734297837119733638416379734691214400231064602461058933789261762335312910074998462409709331485382264652492013791865251784211461623485811942971957458982269248373677379612275941200724619920657380899508626812125097502369559452314833258864413444720065537952020975396495991850901486731351518109598195687443139747651552324013557805886418933529947085566865372077889287252337948184687538937257038729540045045833436319085659052025791360048431816233635756387365413718971976625464688697596872128350645949087909756974073666125132452461233459265630928358888029908714397813123863792474307470691350937641561754523107565386801177756340991837065258690416650489911759226201293310124738536232750688214749827030955510983784128325372475161469965488404257495219056316372602483751466340010554492025083921368942015863898425791246738845851872718854832637858632363569243155707638645306391476136889149752807275946394403861412170215765362418180470323040380570108221370431503601899546230178315197685525715751551466151447719649094281690954346804349549315803597832004615651346211887077409928332658606628047657899854892509258886520396187956748336897332390926965463883841175378026821488605835558124650258632093049329910306812195104846742621837268128757419047426852922265868309214297082105469372575975176929180118434696948478735635004350260201072124473173510817529991708783527540203507444126568487182014012707333059916456897528833512138866463890054511850816447254550449860466339675370632744853836099597683423899729790361675693473167044458084656898049689383627760480335392379511841670954300312096099484678253036901110456621552286014981635335946702031364827302207937992625799382112541273652331824416795506012521275422939402357983947734074160692210440586935413034290060455485616966151091517939235565251322529005706626616399840747556161292409265342001828229214224771889207206563499360255538814431913796473292313626240757295374922151541505481486161439447708184391503375595637129668920933750343455058857906266102795051632484347517785978295775323313411556403338574996054791232512815178829995016073083615911762912807140943265709421880676954040922156791249216105364614646174270237019981464259861076961147343871418287024208577454102744157251374605807559652989668103983522331773005856798736211784358073721485893715199859942143076831892246250938439460795076346481880361828367706783175298020954885880573255887648742217293879553030687797055720059330561244848166263936991471959611810810988600032990009574880224663426077308171049142086505869148868192698897864934503622373256781630869980093411805561454357990857799965478299502781275790717707902607222618674689348285072030524157074910082856597144675664428920309135370902987523038654736312562578641361947882296467413488060279839437488088867599828236051930534701304652672217445735590772535403370902678093448222682680053593274050927198651958864999928587927875397210715075391153809797413174486913411766000980892551332294603430136868166360279931872592391424354929275993507786607438760277234827033453019219188269528949249774088459798992834262074116509659699273948423691240298934697772845831203728284342734080440582279279449385500813880860469186297615049748852512933782219769723482671459702540254235044536179822421216874614525001775749713947605392725371515410220051017826506129249370210074713215702646718970176529713529170846693381051341914295151409449535274191100251786675606588089286740192896220173361061377707404659207467549180382211210880569761422139184898779660299310669338557566288780097323071845964934545679097449303139272190049957007922314583636747895359566529361116457007403202909831940409008408006455189265916040115644007700978224902795314347419690556022233793451243422812163267353732124081552859052790805333444858580117846540174528080705596298960709801527940509275683218397940646245808634695942020582766084267011458198139134217769109493631186188584034555691133503811542411654924031597346116788156563936844605336064630810599891078683964173599911243401859150132908382095509344410768769312197988782293593537198007096111765417917288730733276028826279830984888069336133917241494472894000984748321005289428136407417143383750862604881892027565094938513244107402464312659770144751611495298642336640575468116437589335038757968609333810029938311287642384822983177956957457919821467535466615144194479940271281199097752277123252119610598482866706058077704801683207381237291016268712673697468663510162172182951210923396488561245335863030883344219370043264835426428832682045085253755391670342298510101240791652815282178053877948977154259387833692525521791097260735254755618317567726589263934090236977898070488889533001768033080964352020515624465895005372854060191248104423340744299475277063476859885100620036971367756235206040881659896008808970295379153880140188652519053561359286184993498714652572977374716481459400154748588295102164232072066728177279872344476533302549821537503226858890572258422159433131778568064332111856079614287771157174759861565675947119039965526059445784239886587228092494363643338630209966115619657624250037371779165687655095648387588685585792363772629008898474154430690326056968717544653041367105232246651558722455468732326955756053401047309862796011602372894278565100868637091089758266599361238734206663049144555150539070595637588187554293181813486405153628836709662862512993035807782770529389089919949664542622271445208193476990560947875444134292560734053337063940557698527728823901527391674988890430190248277740962123437623771908281171405783186441817996291976810993186075556557998226961899670505172503176970478318494381174105275028007164338657876084119897513726133620867213265307058021024183986849152145662738263711400764695322920097385398830140165112304853506792641405855223258965232350377597738969524234776253945915473091909670635824951733894422842441690890589660074437808252302182164094347365335981091810165325498936236852670961537328994524144662622431693237259802425553316465647703219931940096947383304113797575355299426165435216249264901202435937549720565760272838440903152626779553219325273970382404419424587985859846781540788635587515948941100411778748944502650203511973915518963080129984974652062938675447263343703802103216183312660101358702610588424035217529640766864782156402917035720017055514736724330170550520652178702579779484955594393385996288966604084534992808757887299465721086827531800822034503669206341119390769408551044063234359031185562305536043937417842317487170226200062346072656604035728764188813684832337862573503838491030861586594880626236663590941386623327835927321717242261635468987759100931389908205337030770125738718912435770089268772646148830404363784732440617363888102030072243083955413007193831439679970456749005959094031979836487634126392952125001974832070209779717836871185108707618032380023315277752035894893300486819522695218370814949896932469516548422492744407152604262917839754341539982172145176473319158732484361020100096843159572114232745239469462523284332950336060642864278383011730314933243463477469646126012777763143946081809278161847363459726085802082993954311369716895213259145683275933972210865623028510820734195492283984272237171447600320627621860145163832082725642648053305440108558000290856661858612943374585011721473586332779871910908665438633411015793112979556722608816324261617218240188630575982778748753216923065833352233711992412960663285551058869264633439446795915954686294614812267851897476985265416264653881588951986235110499785126886178087546621762307192867904079329799033213058893242834314134564638404027209296264546084794193282406062348821824423155096768904504497061310235195168378920891210746365273129740636575425724775096719685973840576077625549226389290134994901861591563708501023107317433094683524423566926509537438379112112112658879915751136317409207119917901667329649860100149711346557414843299024723560695387656137649394843018433478356786091791751305745282035536083934703526256356798287317181098199795831694546370237474853953650490965856766206827600821037559521394063663183057061934454436641882284337706578013703943005306609352594266289781854950351898955694436213541830663431623291621695983012038496943108637122750855537092780036012131708176091919272216046545333582484727067579416840034091823452982412452608419924000653635798647992947937057854184661089608239599508185063613570334829533970740227350035397393155717000491010204512679354461400115671394772335434139709506541341677872172226232919488944890308313364141651038254765895622435753193383680251800772959113895329441321721859304347096223992276458699860095587401063244938903631524427854527566729843925507208921156170380241316676078047203333145097818042063695366164952250125868882199360300793348864318938743538350779520736015874513241645425213979256676823982493109630427250526950543131849623812953265194125672661660564722217583709880675198616844293991683931488262348199697465820163923974650871923890267949940031368580963834738838382045223106716399600585770193305784153142999204994212344264185603545510277282390117483700082920984635953011329815361699580130063349632704773033869225243280908569596520924798977694322277132318091865693169389910910818137796930753149498399877281880235453475339256418983891401212406155809988252657479354535872175784013808059440368582374626977844863590704640726364297744401319292782694774852043441693789987538844035071829495800277347848392945872711029439190143738835446051406882570211233732353055205031785601381001751490539891533463476060914684491865795302793124812634292938729258908548785949974381609026349427257680016784008319822904823431224402746515750618877298990789566549591167421981146525982486041286695660346918649040893890529952835320375384828169153724378204160041109679640628149360050340719362200395015558988046003444392907438562636648996672619995607099011884690679787327881837494215470994195935009191107945020127290308719121239731563844162352311262518412437733499009201665458264015815084041372907673911545500186625364412514055512709567948836632239882862499529369150873406945635957430892689287223897788917209404656390186123754643704792312526659721911710831620882926714044399797932937935874846204682834735444913029508832604600747171792330300686670068879045983191414914556440968290589354551936445290932282717284780345437528663826658911009721234328805723634742252808426175723315214034767241558579691071299808539939227912672632135448482769304015962884348742552654461754813556572068845625918388293019201590573776635466348340225490519233570427113140964091080026750991318428149521130592552801650429338683804247951667750614813969302526367422406457815563011843737461106370447413823835929427571149495806735636579636505246039196761251582998379113194960798374548881126167046083541577264690350164040695374390403760483232487426907969264701730604605917641115872186492751601401540768096893232247106816237370071431262516928009116525918031071732149607695717330287664400388449004944403498864333360834519927216481199359488483600349580811081108803258488028117205380233106944766633970369772033836667500635856303866070883281834303457907185374443436889871019188538271949884260374458219127304807439449908032641760467442676895825187712284759765538892708197843487425672698947785306797456136861074026466056025262726253521599259674374717153826626922252778432014097817849155420887280472049764295288679353452257281475683610989060632309587905680120375957627610190163630854609626389444794718618646337790455190841902049220437390756944540835564472841204458038075119485233019599800644385006444878260393031248453798817756948921281426853927876203467130843966604509890604936184239397768012564657747251009692110704436962950828733238200269704213001973708578284212609185512288364053406427420303718076236718966075921928082423103412412810073729438174264930535115279310370809436535349704372122092772808311205709694838483480566612422178866540874830727924909126015149114122361383532493824266615853045739591845281785115924981801565811135432910818553666710891431263810106402449405293846623437189678807007567580086177116082086508543729472080209244417461996105698618463632958636895512937468286886682404553092230351494222523983785368113123054100219201694508508160335783567635083767105664768942661296097468283896289743762752819459804356761526930363403745840765716926799790752853383204561001290717065254048726204539116643589665766760207503852419405772018558805297914315650481025104791231536384841908392109956913137298910477627531090150672724521128080344094934375618956437285199128164017185489864055505480273524163381538021863534274161007995170494627712376739573174171577949643459882973059466169081648635125606820015220192986268562363724238995378028616673102128718868859658319934729971451370770952241624919178579880792404688510246051074486244400907290665535504891210734791442862664527925011154938086489761748830213420041441410795441427287670967734944140175009830148176010626330199995334445025129924805020099189346881861627509479431811633412006466439570334316748863076684188151895455803823629487713358007691599760014770387051723147876917505701098914898156122133031445729257132348607973498863402998273351611396186096977683334633642642475919666944082526369731541662808000659382179410786966504805500337258129350693101053207255202279770041500327998007405564901936828562060547815868627270776451890278957005689876700179680660140928575716108494803686725737227355919718772745097589449324636885629611882714228876922922654727015549270728493342955748787958683652293011241684802436474270400250339991796631824618261137921681148269031570836386231758265876473874785409074213192879447679603339755275165096464233516262846292240987012113005142402910732427670326800972269997556931810321969623075167947349664420039190015168031606911955116810359733062178050525928264724932867089085518874155222323826592938411100883237239419184717929853250063224262081910303242946266965212686054995542914328193708056213167768755029525425228121730715134066039136166913974313475237170559641391942930559556154768506208515234225281915601010429907045194668938269933118586223266628686524560667715561982855423538455341489501453565071388554543413749648778431986954572055748058525780086179666897015651026699461670974852804355186180055286280122388273709964778105732046855525585709331418308186257861378324726572970321067236186259757164365173062037174367307490246762922896153572456886183623969935172618995367851903065774032456161997373528485650562680301728277393976085706730015645692751763089210426842212469752577387265542210891229336053451882108895436093074719896835353915251316716889023128918198142247183496249375669742767821529802640336650566896509306560107164502860459284808453346020497140593686897163253179398741826121969231913899808762316510754425254214527198383609803492073431918205384313892349547927187330484542497846422247526867514548760491877160241712023567624788494434928841060712611775246913294873725213093415321346717577035639780758614167683275903632702235317671179998350358779664152708154826805626435810369727777705898847828223156530818093922760967429057841723216560880367472838031056702612438620596147962493894376430630634116658168081135637041043896498551610069029594620049986471482218095442076018635583292167262827239525881900914642855602062909618153167647301300257865177260440887047235966117406219906959148898946796785265630682107773324332816340438606462744761386084650946327756033944718602019303703826129060200685372385470410133550988380528141702110978409620807711997699979439215477794486894243415014562775659596501840302648309615813601078200240905076464301671678264357564791487825545492125005154563158399916778472384307047774025570427119515500850043845083569416806784433720974794127733799440155379312546033451236785670015641768344045426759121074314580788072339328233175418935760151263459569043791957344628793101241465836126365790826768941084010864182013856048108214272807421492723962155717422052392349992253004762661603830133636670865974026200369994082612122983027641984627467154924303293174679552820647120298635038596422626633367131070921212257380172519157892095091006266106336238865213631462749009201939446412199279992873912379794575302535380996591374368875867370683269214009907039303435258154034127358427240703569235722463117102489618311505265338894364396016170821820757424555729645751950938013045267030484071132579919704000383695297637175849308803685050271199402133951319424587426894270817726814085078707537025481185285217124747104571388430808225434616852501972955318332785066003160125045393202099220242221786632325664086168705178937882742242277165746617028186480005318789740910675334686262814998827237874071631478811776664224908230911808824944065082991981015553822387296404044844386735156296816936867251534686678253214752937639262632738482524494801384379332337480470709169945386371509647614941509343253879599228405683359341651150369200331627869129155068673882533164331711203264432784443794776075453809372085505973211287995413910137967773765035075707572416004974965375019430059449672115197114300308341296634363994018174330297705356895856527977484502082739452667191333702984833554618443509315932958410103837594032571605948350008824847778370755659616793205222944442367310107768568426622743058753667993503486152316260847004083332330934165984957571364648033739868094656854766500386094226118684316127496335727719622159618075553247931102450101054149694376997536689230943684015239637005008436776961362604652305250764577945044856588556303130337937637584568226098090221625852840065007874359290321320280588570788290885914502093892780043884142856683543161582956314949949293426434596312557816405452813904309919340117762606091291396350276557361466960427486323083036243880609805853987508200972976388861815215602054945816834928203725847667673945028734389184344497300002237854372859747728736574566265858956786353570529323722805481645627762807379385975585544049928360987093531707819283823266536710961820867633924800590269133451145478524723280221339382378445922687713943891845750409806611868670907219748024381644678781086851605483002667174026633942147115787092007842782089215280932470301448694378940120771506628624553222556977274369136892021197129214123263594672095597217355486420574693213184565388870349400407812238002050221101397933292440154429190620445874493260329716007771129191303341536040030592428787830710953329225322053382433402794995593643743855620097211156641499198323985531338448063465927345270793522844317122045095552926565677044820428094261462968855508105089039793320121397450575464235778223558550701675483599212849144814888133652970620146615312291602056113346547334646776467996624798663764467372375580618750128640544861527721799710886350650036297025492806666030463115163910449108678407169818833956842794038931950535234731256377643639809891076870027413672509017278335449342724752031217068013036299854864486679298821254140700140508370654161486627989944339229164887984150478813186460524403077637832381364584373993133638828939106376978010829730086696447469524751600169514925248184909347552458371906402894112143342913042425119075991498804897744279855393295019487193322201900767227385856948221965134031470815752979578234072872870864061610195683636663998136823702282925492401514502031130436657684615954108211084629706091437805772721273839178639131717887443026589301934722580722282264602230721192844748786432122622694374886983998153642178727677253887329096529940391620545690681265076676045454676208253215929693285211021809327343955990867532051223585898112036475970871713426656434583507474132880978383694284993881783628246832043836734870487600118712075146229509088907333216562883425010474157959519802753737353207074615734359950917633034041867497697849394985536732586580997316744690441713867540958059446378852789930297620222604833786957027197184006698392559628539458758277975628750775171072662357262156099911422044199119776211668331641095917636420244676259499477748560348602202823573665983770426282922735568820780900244211134532936029986419370700261488011130066473681600843990864279445635536649030253558266681746134732163994916058042638442347875574571919294921314038478195707704847242887613666027599240203590166042241934340471174690849959178248913783842199708330094706059766141282204703771349261845465467303949686774733804213775764864721402325034567509568877330744461204344698138303194549623159225216894758100480008789347237834635276279450652193595454415121670770058993190908223195136491307771401008770891360107630083958316519855924342524280718239245765071497107790470268951510947850084898361951159837168287131598618856023948505123054067976955802164238423731900524591132981388533153613275526318590113074530233657968268278701964894939858312848555329420551346758763412603037648991945626571950767817366711356065267604903640125757089182806339341468885796378166403252061915963576346584214070960520321235843301919111542224330257078627857685831760336918405043623623218177322286607121028025353816376982875087437289188692242440448124529064238399893918617384521476474527290475856945769548940414733949928109239080949364363998094818608866216883201409871009567794548425101533234569090375516630089610312693060075013396845329775390573341511572845753442124574506855139857087672290632520712822836898675653699908618283594666925898009548939833508608607260599779909008815361203081003227157528415246740299200554995948799831259966967806525309956398417425352543861623538307011474134635803745731847267250875746770766982302626792659921211234941731833882053196324508227865888959093887982719859970809616249967455654558771431045850598961881187639794534438030685376039310828691341548451406951017195388733834499617507054365137344410662419697760348536748426469448604793483530932640750916469203634994632111695419146368359339833746929053805269210488100993581075171407008234382621736446155623650688385406664750263808383762293216297895345148809644306105202242490456731839143553416517872397784142627170207117616546800488510968748159534050146410010900225410460505272717611800300176174751886985947613572282512798560845822104300231710375396317277094328371470734178310033428183218610039541143092072548258959267043864464067019986182140080743256758222364998974188269708680978061703088007330850301817979954406980309944743153559891729237589541344018176990147496150015837818215855483607900022663732655686300110093239694453332639499744272024497667341832341518261996223270150217325539338388475444196708640955072180280866107249608125454281286619085805121430852989367325716034183142321846736567033177166764958622722078083381202042487964418622425320574164505509217667075489286611913040599708716195534534575866921679871342975350542397202975526974957753497844993170014618854346782804011500877397090911335389729777688425147425653707225659768549265335006445942228732041557055574363071671478315218985234976551488390132425423807503054634266265542137826213300655078857699962239752567691950051475299821394882915795308134086830649337794708684433794705369036429172880274031644626953416473124875929802116738429300846368258041108589443155064127547730578769498657997299214316929898935573100095777193327343666456136807739936208212526323179690927158138732929201188422171096903075703929226961371897912656149953213489477096201294742738385902136137967167055346799290500698397301715510874102818517964855215115172099528516768891486769291346230843087259403358807539071183504277202836323683179078265380290655140041083740719498772639494011706018523988193688596387804837137717786509367084073068391855320094340208363746054252695211873108044187555617609150757296353758504243240978194894253561488051648399185550325409817923941633018831897300169815827459443001516839520793289738300462307725198142286148951142478439440317937819911800743416221271375057013264558879247432237718340532156058990251445907985761617469374174049678441215679716738971752972094145855349507157006920996807623674653318376939138922242997007311089636286145640685321012699136080416760311519093495183273488320240136224855610240134003134626860317310814142381469445745744312988970092743783644851419704393831404193089809870336977181337096190347252542337246633577184269223080133659191757033533670445433368346875296299597712382816252387319226452809710623121348465020836521844818866184432708251643138892691346300397967516905108567723009576758783140251278160521197786504211118003803877658280629033901085979269565501357187891176745582524331542155000436234325332651773064604028627338774142790245242183923664463705762075155544467497176172763469820054986252146724511695147486423691645218403742894405229905590313564067061881281936147158516087644390217739145563590052556448005684212375509470449959832354588039994963950899048481525477275883542383419590884309029779786306296038796100137911094697557722558499278494833301800755207967534234274887248989499965603683949638931118762378569545423932834137939138021647616118285271041532031479967768967462808938358947703060275473914250749974237751018161294576026327190979017858527604259806672994861552349980466179473571652046506342195244663206688176556106240872502147025613296682721844457249268312486837310823230261360564387698331214742713878609427817727747014502988707165820279954505779956773797633115663620397397289508489929230073829872744566111631572338222471484278324491268058258977023497243998988844939067198209483010356271863466864726221166286092829190808860962867602907791265041424348316701049279913939388016706714493232090945822681407566101660625138000793051663759617024346749625055889316850459372609378181761805626424927044621708514952079284031715105093449061273621226386882727965380249642434080605888446776533493338058135061734807525410509222833360336289595102939226655200812022605140049324644218351814904241332076450281003498689306907751777566101994377544114969360082451954596671173255725992859952119981246044186943505451985484433714684204234607713930938280777325979074551646211563456576877418149487019493256147325630113073449915110046253186604961336164705987026471007687253247036526105011083795161210599213425560459092290947785338107951611009854710399684225861046708990969462210054298677268685138827493436368017381290491823802175884434858199763060018402455043639347525831184432193636078822342855272045714074737369255993115783930109736819090487924888661206532460152000335168141422972804477193676562839111651217927275006871239204489224560659499951882162445251561519251541248698539440557530254984069771032438283335078495458321119998635017531513927437392901084739392972242542692195276630589584769378343518462089531228431076626920567680291911716197358785828771504571705365988485439338455687452361582509297690532338080100239588158759601890869057946746760040728484613767290873389593701930186035809192800969562487800035954203504649282600218351160276500359007615300515757508898779709877246512623459434858447146969974708619341633908471726486305914339279858862338017846384694050699293616338270067608418255741154878091279432910863846947853495266842413245686736164003947230214150059728260677166998592152224446922722452662753747553137462434046326231320967634891045845244598715834085735563556630887023572750027903905856709684257476157704227887757124631483082575613673921608702672850353548863884440900066221903279112207312376948419523363518890952580963345764362987689019978287277952578086509868522185854654213618794096811802407819350928688707440238724062879588975043085326106396878515638060391081322698344181591025607591793497200486019243990420559792338398268709614517166098033509667819207870694670445052964510380048754656246144268720559930338804756155067939792354864468392917295248902411941414395004555151105274496092565798501994597445334832292324136115789201898749628600240683858562935279953952763525046396599512968205865885738109875833622381771863255911903200835095037665281452075692485455860174792407834667524564755230285139131803587488375127641654069323952591318391877310092234823466809945560512533544279271701158598689104477558802992722469475457343409971488630110503021626875573525751934778139174961643122972879514029762422373759765314287522934382892975362750581751132453671903657267884376036661342843964219541887566119884579693381298937901406563419516192474661306516511725267669323609419087733340690450558165213454487297074862553371635331581087738855095802330159523967268648400713750438601474834235330437085390227380449117576988953079133406811397562588492545284394178380123683157531767298914314054054266990963190681914906510208311130377896728687657942468534543011606591877413631321762198303416289445543557360297724554881458955418542210450999122832422240671256313535578227419398806196547685103176356379705213628453476087647191624882510939310918226676457010246503649076887174058871800489062109983884602249535444174934077227481562851572448302453765047321847532378940907877851143226417167207865271313548633238344810072504878677344464081608772771449481960020157980944682498260587592717763415996642278042914584234546121362414297976133124187195363825151679773423909103521409278990450682793503356406863155407032340671391506418478690860575345041992163225409754423164352434991500264140292956147699696135281539726892935453106876852742287916824480432608704463478624349069682252057662741054671106465204178936003473244014157701024500525111785668386033963806047470587868478677866005941018778147625395184562630317637358327298263546058429323574557986170934591291167804403130173996890297165284394825291332954976005579513856860519351140890707453397241952980145879886978105344437928598187338219021315887361960592742773315472002853239408397789239344686421601638980426095208234422381784439647101937884365289752765795163630751895935377213417194091471158931428412311647990508749331887496749119177625623516517274409813373547097884797343831223446489714488277146796704707528417151005177758584705360452208655868043224502154261560328310031904546602778549929217020935777114230574433742647869213136054226574013575310385064398286790589577389246677367491487536907339515858623562466719142440369524996637703770985252803613777816346232435468253332516733074960201249413720878443642861735790578481437239478915479884748129025766655262300741908124515803036992955037147164379926226167619218381593549727846720152665688420845010280046156910091842431075734179979783749230883487520580468055061820398994057860895824863813246156474145956952950257440684073664889904226040560602079193578678161126084813574082600007829756702414971176685873724094152073889241847585711465880388970146267953322313509070101452690127057210105779022277343195276782480856529188340361561348550929855796859839712262320837313667484421485838926042660191699304201533766491830909468499432157653212172381580140823486192736058717317466163847683264531184832681703369211623877310612543643962337345035839522545922383698407681015377194206583397155612108653083191645988670212720030129762880942895247190983775045851394570956574880254102538475085951906008554776417154677487089697871874700602935649391122591469261263511710087692787102960769193239654139233235563061366787913078401419567070881356320830880213526970725503189214741870398652371928414023072687812809490256436240867996383840921607586376700609603866327956945454200216914054497140193729992601076381319927344795034858657960779221356583223536408862834118876504409798505054654654340618816822304137332216455898377580961438429059850323819755090293443799336410337513679189169504960056663576720505647998532197059594358470817219206875917266453374606287085863099056469497814288864827362802618046077223206196839764684021703896226885242604920443377925672122905761457061866837202922236817090556108848373230317984179859950962146699137111763195890862038319018061032059854841643758537559118461458584528636882655994870662977243594811242593731963776359913818723798612690418725118495457562018917042825869646026822042170164938176626617811529465195189729743965577948535312848582920828318037995320941088406331146501838211945555989460999499266195976995452899102082423620367295339270261124959008335815158764211599728620891355269369880777066243495576565602414466461313951949093817390758101911627280585346834490256559339783660736784597741875456385440960717762071157152054663841375517012505847417609854817536768451158381471816080654008826680154523338651980071906453012628196539678057912794047592200584891296694888963217168962672527132555070744099176536736468323874720058609140609125633443807501075614691579295085050547070656868116338927157780046853815222838857263960105057058243307334956179789792708461912072633112251197557082335365279102007024268161463397894521512991183827518360244054304112902681963889699612182085241809012781165396831190827645273329640058674414682090257661164073139455063771453745016860874539922946234522818828837496340942470763000717491170722821267660042795470521180204638104755668948924724039745847695888633985075452182680439794593084627425060093791510138248701420978485908934470218315026316537964710422414848508953653174885833202738382864411676022315464960073515324718648310766369966940592029950073626018052003382192830878675968406343999421251846765507910757723562376860823556630936746998493392075127302143459749574953145597189522407961223123553409134909993234776071487196398726480243384457525538908352522657598897188751829310731782947814194860357498926797639375692780897942649640984709512814089650303781983675097553142351844585048052518999108785885084128715673248602784852202625103212672429865661527695246604319778947900124911930886867136656012397500815427149001629595311461521909491378190818735821252571605128316359578846573762774931071481719546509212499934584164870580273389017244188393954501649198066523773617773603148318070338133033338972591051988165809681695447229880713273435088736826826770722034381291341169095581164119393086610843233071610442261294455334123815147843960365561837877205018038913232670227465189079832876850186118464035832178304638050199921558206268148596626835738621220408323149112415323716735712682952546582245705117230412997688385500025680894367542856812391925356804836843226527830989696461401860946353979452432274274964920385141721059486526602561621700757001951723017250514112376787574823102663139662690924447844096274279748103136259643012732398383704025649960014459222375208937377135086960530601311256939481230368773686301164318462671604583327430309190082530180667483584749343753766607113653497482984301901089950970913459388149100613517153938432877737734771821280254447470438819087196192237223304078940382387097398511730500403660027910360212920875397242062759420082766066071073341577474795254519604098132952303380378722701930037663925484469314023785380625108348136087828800437117299693827825611561606438539305841566582411873588437947478804984065159864435345076088007997181939891110871504386314503554946209094365654392650941459734437752499801655609105275249481281179902173573014492328741267556064260298802557836413692016016617669748043542306072551697935735746825089695874826948731881544269818023315400606701953197215378857346583566060188867877883402696009264891214523761321850570390767193931751146569912952896078615794446670090410139420800171065178067033197994516163258550311481959276610659074044524985800229299228966543054067588746481449229311460408549457355981220577363061921476421011073334112714243475459628100874153150699878674569108206416345365903297922921012380381007569387269116011092957834426860655788441475726921085179645009860474953277920185440079838954484886707511916628030508605658217777697998220345113976466651924617025416334341044221145733295408504392807954396151307885264705378477983896727073836856837620235140207456693911087053479132411488788790158615971668352740445806936367038922357337268462210096916521348168176682743961853038638673061119918119187716359164169444571406379455424290874419543670817530677676541875022056511296774022477450002728679040664986471899711013362194181815184472591061447488424875027349454680510566851684048259975803596168445168373243003982331546478158041588277779460034850719864600409493977640398092361316514907508342421422902139051990165573319189692423186174767104600600148134265471179386165793927640354534589543137690424787165731974481919188300904505418400996882308154835099253666611841538312312998231819699109801429636853713921345260197299766841937950906406548032602340054884977654139891095815240233234467133442021495220744851782237688425688959031252711264762708767338357468592642121004081137201237521417098050822536684007206712882631152148490890523814401714196984944804679489675174776184049404631094279956737122753825775748085792754776105710867256129753274940581094794847870606374893196903901621417734653625666077403420493919792655024777067311768016577482896998471910716852097033010898010186445031926303162374116046753551168125391955617905343365937938089282722859914768508181201172867540470665654742948597222563280678451402182626324367627789943262937705557087265579856057809551086296577566990613910362180278129785662042808063521713920147250640452588776439271155252643537150490630447948841296952179190073624651786379689854808868529795126378890858504242865541942872273056884845871457476143153314718677063731935291546180195217512217731081929119956154340451468735032164383282109523299782542573539172290016513396984876017270183825894574556108791029901424155246809340828709852267349158535664375031049444588500491485483180968913365990395654771006567422899781917903880556974077808484614702490694200671838213724208851280759884631990288078363988372431080994688444143679764701359755518252438059867085825863935412502662727657199067541943193285433812175474512578521148274909532958863395251951656595291321511692041940837930800910247884453729889188341633145491480408091982281173152722432780262445509782321678235044878025855705718538907483505898554256099969620966130090965658274503055056304302205589701600825504127756601491826803917988196135982155843447379573702413895350487644347515252532802411844463140907913400762357692797913754689226884736149676856077439534956014628788995262183121832769384699326248204543358092547676462813616252866002903472891134064144250270608421664146813965398780967700813244277543465345874410359433720560138908410081960804386664051419536311000388461950017124667515147440366134559808879788950521931999172295176273037788753694443728709322519027105308073803344250662527867491541720713646960403245267328210151103865256574620291837156086589496185518608531139968035120710186676603591051690907519688103777386210264556171179825957862984636184672745364037121364433025001866944845893062929771460245708428537857217531391554082579635931071315989384210450732463188365244921677970430073450551852731279385366659239344190124417726744852219108768490083445392411318877611652510551507575859804011711680935050414745944483162589233546375855776767002031155304479918355861115050998041016086837193337357975553651024649345386759740045299465443507262891914362838579825472072300373383314140809137622653162428553463542462300076344744853432331717707644082936407500448460168077342282673654690211705120825871739934721949817495250924250726925642789857144682543911295027774569440308524614307137969039330836064040018859177956858262686679114699075516215713058458238926200549247748286076368766901533212848354177289041468683550109704090524777537298208489933703135462881564099431841848525123082824584262118062924394370484670057600731014483833794809349939449513215416659281982338744013219843698812101653169164961442714143245482547387629724500143589118257677641415351286224243126644694731445894464907012370826536309474640534463336976668148365069960714298144682556320014978368933051669087408158855984456703270505669128365644980537540195891176195932619380439852108327520574536278469874845019532470297825798400478093569804309947662567686031949573083415953921209066913357170933142936795525992559921024120101313417481679563312303503160869343508168983778370718810001468711081456752658660638884619648395491000804102621263814323434264516893555329375430827852957296723644138547682740396981624166189947325058111521969662924312118815724801397142272873868447289013964235982967010968586926180105408495917618647401412474267934889758834498858014189818668698566257552425115133889558784816299389496397417033311988726873131528027212434926334053497309720298910228004908373296479534316950778781520725900232954876062179302157414640607899306414205889014396961918180959152949138198462355194937194456512982188462378681558730644868873850415529812634340472775726538865787580204790312618484890551873888725947776814785942928251702376169625542673210477924328163129048539475711728834200324746845178811691006259463580546059295237249941449674655889780033821763324072532714591843213015032197235641764896047227129055747346130958417293148044805889632654064150538697516962493630444716415940433176064306038719972147798773892848955893028582296350937617680827682919135911466714042777926514452512292960800340786722340541320649179899342782139190630921424731548524409813721719049277450147536299714482855123942922188882872165823371928562075908049597357931836592697073626866846662967056473414696012289054649334216959657450094861720796723399048221426950965351576190183628497897472913885974861195482287233272330631073272906238657963912961558017968672419636993357507327926654753450832552123516981295456326013018790230598241273242036157017241368719980083222349838069075595238052192860532054572107246906693777913015221780039950986575108200809776528168571461898916911635158704269356305188550156111768320987228764381341870572861116475331926890642183771521971835146026562830353905646181730936806570256764236706591127446751335707108810195680022570551336875595585544273574341544072591447472845400028098970682853724683437493734410851193196097453241753890472845085958747424602856097878528545187775407997154621177303031339100172669288976201057951121885825950956918526102107090036450824200069159718001599236330078833562106398636742717199392085787672934536134885946613681541796565247637961760715070517432423497976271253568381906775894367733653120631963151801986593531388967149711435973775550871188943713859848091954630234668612328899619278198946718625627630057172226198717255668223923904890768146987080707751220177091609648770120434768279559338063610192024519833268119705454153308595651538813921780342498141963164905511260143454931265701556562158264090824648351579043435702893453635054819012476149728370681444278505199006903212896548769236882909068546671150995589760754891507625492685131792418299782542728547778448453461101792924207968158552174577602546294984095234678192840960476386210024350185606609410667690932843429705931268359659552164788030824711745176610929643714782697763464025941436376119883442043651405819785395750254618094489169401030013543819259121122854238722988776519602373221724050916405650079014770648187623734031750235491964410642041932852871687936595663020518293155034697291267571007407824355433018154958785858475434507850904892164905683726569122392614760515053956908698779269999187649883835020011034268265026969018909896424000140656288941654229991152436190033893023874485198177367035859326595056483973691102528528964240238162690169769797872053924417306882145869496570622068064152567048641672910089034466482148259576598883675676559305620962774588428084766784414116997805736320364832583212662721001886011390639353175491376666606897406774841966431435260003955902744717191497660803060479889578097868601071357264140408520715503208109783638446056461520984027952828516557607719738796731794525772221096980949945273561032910012006494033523485945355873048645021280439047580017537220142423121774893185173329466211269176408088586862489556539533649460684315877915679859150495016361992776208222457743409154600833608278358758581453060018874654806158469935209424129086588097007658952952942711111315126687583428566179129561920536410044079683799872613222554918639288601507650870472774003701806254718086876319171696486793614727732979757046379755146280328266354020758820986430077712971580486344586381703953969346321181169192104636494630154711153619666625612026906439506854218786812240993780516646058740408377608389717211889712944024277671668754396479044681943854146770948657994287785792979803623008497859770742430848349599307423855758769983547158184688235373094032850678988103388739359527893501071404914173640804862181613420873011412458842231120289553227515291208261892442680444656692441590713999797893022991343828360615540663044391445778085139945599094074239762612456772578548076328639557450793670916499825916076795474644981946658952214795605488453772955033488494865214498815920404443957690438775163101524744668822878389148182995253640866407630244850888822773889814481442580382544887918223306200047057093191744017116590681555324789182407775866665100435926469674592435181453789517497170913007733429647167891477189372321676652882834647772070310297542094397523932163345722780599675988114774549208494809224706159973495073321478676741593210626463245533420320135047805255300115734651077808653087217338440136071977085011680526600480673446362453506269853330351107802011024714941904163599640702033334178009708280027243676240239632839833190086800100058785505242035602151193311212381125806324264054598875454442839222700398014359114677186893678295446859099994129657734990682460457444371064184692311755752541422151199708105198384237430802858411911034947006709981625809080232934922144135663658449085571277501979917843893240809260006508919841301015540362593229032108072689825169873993483717822344427052288062898849905137744969579079629178617645467526962720055032628667023552336797726063643852366606175531613341317196197864392121268769055177347789594578286793751698667802479410433905992805940732000255661814631962700778143239536096104701729340494466620042894434699772502523362436113819044501776630394960920395546918993072887803159200038513497548607143872818383086380817680722559842374631006953530567999908324197175226060014824313203037348268169926095288097144322551789684890648663457922550958843785072651487101659277551662918941361681291844882428584914633290399404985318303936955530378939063462556418941415029264319234049598323408367493224900433835477731924409751183050397065819857193854143426088211957823771085106209820471610682278689620969757921676775517314616530623257688107672947682658597173652390580624930436511108825021373017722979145548745526360319873068471900353622658246145403431408136194441206504994577360905054778745696917584830341379595574153259059234508991895104113725321454131921375733178112506607565288638393093800774772362121100123864093486021508415014831723894064495994297265569568730807876269888569731031755846775128444574553397997813792654431921834421363070757915775647019542518885598183471508749639882165975381022375915486437492344074425523139962629180384112629956456129401567847766137658011123670830980985007918997025977030110831796067951569965572007575902702144061044911452833206811316731088885223390097768175624261207932093558751202518412009102502007023386813814634972054308310984171324107369665562496654937381813957760624019775704510736176400350162938954403024939727373854471651438233295189222680764895418150428010246315726137001519913632525676047478506575714031274113457537113188910649703107854178914089554130455302878654582163342569616634049525997099279447905529226719538257258587393274130154916630672048328356066972804687652587441088521105876230763044801393780365032533142790361470708396485178111545244300098858104533794718403395346580859879503012075351566479135465214976248731740221718399842254842989306171139607700220638169440749741888701799889068347341403175965274567786320642727227656038739437174585149316301185870988806202046350716742616122073255219743263265181032576138673817502982223737574646083182965575011782438275471222775799172556149461261270904660505267167223932500389201907340426107384301197825454396941178367831034191888309584133979272805382546626473199829417047335138373106220916975733273156589158399416510189572510284174693874373753133185652978668579739303451944894907199782629217544087253869509690256364913361662649103302968370399404779514747755870330411967687050772107617321483418530312001893714042946479603145311350066416700023524669310259433718669444400963997152321649187814086836681368125870117467589428150519860600640710086475174958709157959905729767405260915067140443398013208738176994367507976640722447299842158803184305897947861652814216645807199421852517436374675233515223073367877374551529844461509573192306345037036313453322168768871805379018319904446550904855025013177324986195190433459157524173696890570121205948432263283565890164054944492494351263003114712693604264490550542501889653141667181313000917724453608551190885106698104041467588804923153077182674791076853804068398921227580309702149594473809868273473312340587938036654043442190717164560665129378355602095649072482648351965488556846296156897637715040962462010579776075850857781777376501426558909658580563413806753500690392254667257452261154877591099601883907846796078591115005269420617357121701976371785105596442959618559023720438391967628002735526981355323275637931672939282477623932022778544033100210379546063147023481872886415248211452729969152894850131780271188121472084090813830635493161325791646756216819484619434213399002311094007368175499040105370285459703462333608878126345166364275991309512708416171091252888271665752450769886751300197665033144009722236940513663503005517281624212062955587593905225204836125872420287156842497966510035381857017390496082026717117234446921374861682933593570817241106919584808267765255054877674327988929228526399335672320294573301001520843029197879539804218174400897658113932684317529388849754954547596665544635912594206180442533467344212032289410055743489598571841851117728886296883795457231078767117936640524239691929950908446099602437176001623544091050434889834488714558740591334803757508108213516471546244015687292725425961643005362084352528358998024484653362422817109599601827699239352698885776941029330533541192182033534815267864184300550859195484210442525809817478579086995239359572577878359857446016518293777772864837474595440203648840299944295003769029699812826670409448793305461680584150168511183561532408798094923463652836206847759544700761192784929675948448992774264756317901512710819515240377741714381578912318556683115599448809641013883431262041387895097129237574051734778907972947159713776030845364618737701437543788226417693517009464573693269163629836955181552453496432755298484707463786288236903178335220459845956025360838502442970340189970392285865395671330968107511680246013657146012292592726485990026067413336342912103988713654170966139605163811546859346092725013904046570958813090147586439690356080526002237067236208245581181104709820327435557479421048052102582945221727461079444883918690338568109856888473513216220902224916728774326675355246632875935193968645350659198408253015704540743454421175757722114992310792258682019154490386219338234855437019047513801817401966723441526965608853765796515819930902713986177822928103138866085869256177002823453937381750059810088988044992163878606494194942003728500483586733358419306065079413977546321632519557047405447758733069812177634710857655153708861398629124189882384961710471521696214316529809386737702792483019120104057983961636647935371498532955879072997143024922657859098831534282291039354692521854358932834033079077749660374347639359192129174608455854501478303286948350836377823786093757486840385379733704303180151630575572859840539517606670680890940314761502410867637720572494875842467283500906724147538683524285131521824679772373745705655291821841553636624574535994728495285140266712799463114681763773933801244847002709448323561838029381738291966632458552074655518389534127169628384377734519284699241471083404269760700018182204794404287701819691216381554007876115119366692872982493573130991180381561849948696022256167794093781010683628532555609969925503390052027633657135364055586665400097666209196786378997827923885723733291301616727422693871941122400000852137552752735919034668718884001271277947100817035228006279688274415192053253373855168093694549786789710733924396709597311514345638326570413189498231548126537259395975675283269228288437973242922424415919423396209042686615963781323856273642608141820472118230036648391889539721693265027529331515394513993428691615334165115485101112923744798941721691321577793251660840054500252718711487093865529781654778907992517365552078125868472676816797487586252427646134096661776029377149391080559672415449995426515067850638413525415089100674005993952074787337038441672320733134525556389880446580080915750147942037139997249753619127876102451083024162313175339423890521136479018002018284869981683123004832474627600914139214330016395652367362789835704364262039618514932181766121720953319121045210670266874090641919066784531915512931161152675968995662200513952927276870774262354013616729425606192170846845084136763603683726050134796690309333172432767501077016178941879137036576410003615620374169634228827967205498547282836561829082987166479810334518370009378884652334426945447921995955901150236225598284371072480043530582240830473314363170265028896465972017758373959256362854059666662550126674583687965776797215056816760067845756991797032721491730412298066456848713671526919843460994186809763222427245889347264252765604238690439311764137594322453250858384001622021750225328190551116273623414797841749098958001' ) ; diff --git a/test/src/integer/arithmetic/isub.js b/test/src/integer/arithmetic/isub.js index 4fc6f65..fae2256 100644 --- a/test/src/integer/arithmetic/isub.js +++ b/test/src/integer/arithmetic/isub.js @@ -12,6 +12,43 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `isub(${A},${B}) = ${C}` ; +test( macro , '0' , '0' , '0' ) ; +test( macro , '0' , '1' , '-1' ) ; +test( macro , '0' , '-1' , '1' ) ; +test( macro , '0' , '3' , '-3' ) ; +test( macro , '0' , '-3' , '3' ) ; +test( macro , '0' , '7' , '-7' ) ; +test( macro , '0' , '-7' , '7' ) ; +test( macro , '0' , '9' , '-9' ) ; +test( macro , '0' , '-9' , '9' ) ; +test( macro , '0' , '11' , '-11' ) ; +test( macro , '0' , '-11' , '11' ) ; +test( macro , '0' , '17' , '-17' ) ; +test( macro , '0' , '-17' , '17' ) ; +test( macro , '0' , '22' , '-22' ) ; +test( macro , '0' , '-22' , '22' ) ; +test( macro , '0' , '24' , '-24' ) ; +test( macro , '0' , '-24' , '24' ) ; +test( macro , '0' , '27' , '-27' ) ; +test( macro , '0' , '-27' , '27' ) ; +test( macro , '0' , '29' , '-29' ) ; +test( macro , '0' , '-29' , '29' ) ; +test( macro , '0' , '1234' , '-1234' ) ; +test( macro , '0' , '-1234' , '1234' ) ; +test( macro , '0' , '5678' , '-5678' ) ; +test( macro , '0' , '-5678' , '5678' ) ; +test( macro , '0' , '94906265' , '-94906265' ) ; +test( macro , '0' , '-94906265' , '94906265' ) ; +test( macro , '0' , '94906266' , '-94906266' ) ; +test( macro , '0' , '-94906266' , '94906266' ) ; +test( macro , '0' , '1073741824' , '-1073741824' ) ; +test( macro , '0' , '-1073741824' , '1073741824' ) ; +test( macro , '0' , '51676101935731' , '-51676101935731' ) ; +test( macro , '0' , '-51676101935731' , '51676101935731' ) ; +test( macro , '0' , '717897987691852588770249' , '-717897987691852588770249' ) ; +test( macro , '0' , '-717897987691852588770249' , '717897987691852588770249' ) ; +test( macro , '1' , '0' , '1' ) ; +test( macro , '-1' , '0' , '-1' ) ; test( macro , '1' , '1' , '0' ) ; test( macro , '-1' , '1' , '-2' ) ; test( macro , '1' , '-1' , '2' ) ; @@ -80,6 +117,8 @@ test( macro , '1' , '717897987691852588770249' , '-717897987691852588770248' ) ; test( macro , '-1' , '717897987691852588770249' , '-717897987691852588770250' ) ; test( macro , '1' , '-717897987691852588770249' , '717897987691852588770250' ) ; test( macro , '-1' , '-717897987691852588770249' , '717897987691852588770248' ) ; +test( macro , '3' , '0' , '3' ) ; +test( macro , '-3' , '0' , '-3' ) ; test( macro , '3' , '1' , '2' ) ; test( macro , '-3' , '1' , '-4' ) ; test( macro , '3' , '-1' , '4' ) ; @@ -148,6 +187,8 @@ test( macro , '3' , '717897987691852588770249' , '-717897987691852588770246' ) ; test( macro , '-3' , '717897987691852588770249' , '-717897987691852588770252' ) ; test( macro , '3' , '-717897987691852588770249' , '717897987691852588770252' ) ; test( macro , '-3' , '-717897987691852588770249' , '717897987691852588770246' ) ; +test( macro , '7' , '0' , '7' ) ; +test( macro , '-7' , '0' , '-7' ) ; test( macro , '7' , '1' , '6' ) ; test( macro , '-7' , '1' , '-8' ) ; test( macro , '7' , '-1' , '8' ) ; @@ -216,6 +257,8 @@ test( macro , '7' , '717897987691852588770249' , '-717897987691852588770242' ) ; test( macro , '-7' , '717897987691852588770249' , '-717897987691852588770256' ) ; test( macro , '7' , '-717897987691852588770249' , '717897987691852588770256' ) ; test( macro , '-7' , '-717897987691852588770249' , '717897987691852588770242' ) ; +test( macro , '9' , '0' , '9' ) ; +test( macro , '-9' , '0' , '-9' ) ; test( macro , '9' , '1' , '8' ) ; test( macro , '-9' , '1' , '-10' ) ; test( macro , '9' , '-1' , '10' ) ; @@ -284,6 +327,8 @@ test( macro , '9' , '717897987691852588770249' , '-717897987691852588770240' ) ; test( macro , '-9' , '717897987691852588770249' , '-717897987691852588770258' ) ; test( macro , '9' , '-717897987691852588770249' , '717897987691852588770258' ) ; test( macro , '-9' , '-717897987691852588770249' , '717897987691852588770240' ) ; +test( macro , '11' , '0' , '11' ) ; +test( macro , '-11' , '0' , '-11' ) ; test( macro , '11' , '1' , '10' ) ; test( macro , '-11' , '1' , '-12' ) ; test( macro , '11' , '-1' , '12' ) ; @@ -352,6 +397,8 @@ test( macro , '11' , '717897987691852588770249' , '-717897987691852588770238' ) test( macro , '-11' , '717897987691852588770249' , '-717897987691852588770260' ) ; test( macro , '11' , '-717897987691852588770249' , '717897987691852588770260' ) ; test( macro , '-11' , '-717897987691852588770249' , '717897987691852588770238' ) ; +test( macro , '17' , '0' , '17' ) ; +test( macro , '-17' , '0' , '-17' ) ; test( macro , '17' , '1' , '16' ) ; test( macro , '-17' , '1' , '-18' ) ; test( macro , '17' , '-1' , '18' ) ; @@ -420,6 +467,8 @@ test( macro , '17' , '717897987691852588770249' , '-717897987691852588770232' ) test( macro , '-17' , '717897987691852588770249' , '-717897987691852588770266' ) ; test( macro , '17' , '-717897987691852588770249' , '717897987691852588770266' ) ; test( macro , '-17' , '-717897987691852588770249' , '717897987691852588770232' ) ; +test( macro , '22' , '0' , '22' ) ; +test( macro , '-22' , '0' , '-22' ) ; test( macro , '22' , '1' , '21' ) ; test( macro , '-22' , '1' , '-23' ) ; test( macro , '22' , '-1' , '23' ) ; @@ -488,6 +537,8 @@ test( macro , '22' , '717897987691852588770249' , '-717897987691852588770227' ) test( macro , '-22' , '717897987691852588770249' , '-717897987691852588770271' ) ; test( macro , '22' , '-717897987691852588770249' , '717897987691852588770271' ) ; test( macro , '-22' , '-717897987691852588770249' , '717897987691852588770227' ) ; +test( macro , '24' , '0' , '24' ) ; +test( macro , '-24' , '0' , '-24' ) ; test( macro , '24' , '1' , '23' ) ; test( macro , '-24' , '1' , '-25' ) ; test( macro , '24' , '-1' , '25' ) ; @@ -556,6 +607,8 @@ test( macro , '24' , '717897987691852588770249' , '-717897987691852588770225' ) test( macro , '-24' , '717897987691852588770249' , '-717897987691852588770273' ) ; test( macro , '24' , '-717897987691852588770249' , '717897987691852588770273' ) ; test( macro , '-24' , '-717897987691852588770249' , '717897987691852588770225' ) ; +test( macro , '27' , '0' , '27' ) ; +test( macro , '-27' , '0' , '-27' ) ; test( macro , '27' , '1' , '26' ) ; test( macro , '-27' , '1' , '-28' ) ; test( macro , '27' , '-1' , '28' ) ; @@ -624,6 +677,8 @@ test( macro , '27' , '717897987691852588770249' , '-717897987691852588770222' ) test( macro , '-27' , '717897987691852588770249' , '-717897987691852588770276' ) ; test( macro , '27' , '-717897987691852588770249' , '717897987691852588770276' ) ; test( macro , '-27' , '-717897987691852588770249' , '717897987691852588770222' ) ; +test( macro , '29' , '0' , '29' ) ; +test( macro , '-29' , '0' , '-29' ) ; test( macro , '29' , '1' , '28' ) ; test( macro , '-29' , '1' , '-30' ) ; test( macro , '29' , '-1' , '30' ) ; @@ -692,6 +747,8 @@ test( macro , '29' , '717897987691852588770249' , '-717897987691852588770220' ) test( macro , '-29' , '717897987691852588770249' , '-717897987691852588770278' ) ; test( macro , '29' , '-717897987691852588770249' , '717897987691852588770278' ) ; test( macro , '-29' , '-717897987691852588770249' , '717897987691852588770220' ) ; +test( macro , '1234' , '0' , '1234' ) ; +test( macro , '-1234' , '0' , '-1234' ) ; test( macro , '1234' , '1' , '1233' ) ; test( macro , '-1234' , '1' , '-1235' ) ; test( macro , '1234' , '-1' , '1235' ) ; @@ -760,6 +817,8 @@ test( macro , '1234' , '717897987691852588770249' , '-717897987691852588769015' test( macro , '-1234' , '717897987691852588770249' , '-717897987691852588771483' ) ; test( macro , '1234' , '-717897987691852588770249' , '717897987691852588771483' ) ; test( macro , '-1234' , '-717897987691852588770249' , '717897987691852588769015' ) ; +test( macro , '5678' , '0' , '5678' ) ; +test( macro , '-5678' , '0' , '-5678' ) ; test( macro , '5678' , '1' , '5677' ) ; test( macro , '-5678' , '1' , '-5679' ) ; test( macro , '5678' , '-1' , '5679' ) ; @@ -828,6 +887,8 @@ test( macro , '5678' , '717897987691852588770249' , '-717897987691852588764571' test( macro , '-5678' , '717897987691852588770249' , '-717897987691852588775927' ) ; test( macro , '5678' , '-717897987691852588770249' , '717897987691852588775927' ) ; test( macro , '-5678' , '-717897987691852588770249' , '717897987691852588764571' ) ; +test( macro , '94906265' , '0' , '94906265' ) ; +test( macro , '-94906265' , '0' , '-94906265' ) ; test( macro , '94906265' , '1' , '94906264' ) ; test( macro , '-94906265' , '1' , '-94906266' ) ; test( macro , '94906265' , '-1' , '94906266' ) ; @@ -896,6 +957,8 @@ test( macro , '94906265' , '717897987691852588770249' , '-7178979876918524938639 test( macro , '-94906265' , '717897987691852588770249' , '-717897987691852683676514' ) ; test( macro , '94906265' , '-717897987691852588770249' , '717897987691852683676514' ) ; test( macro , '-94906265' , '-717897987691852588770249' , '717897987691852493863984' ) ; +test( macro , '94906266' , '0' , '94906266' ) ; +test( macro , '-94906266' , '0' , '-94906266' ) ; test( macro , '94906266' , '1' , '94906265' ) ; test( macro , '-94906266' , '1' , '-94906267' ) ; test( macro , '94906266' , '-1' , '94906267' ) ; @@ -964,6 +1027,8 @@ test( macro , '94906266' , '717897987691852588770249' , '-7178979876918524938639 test( macro , '-94906266' , '717897987691852588770249' , '-717897987691852683676515' ) ; test( macro , '94906266' , '-717897987691852588770249' , '717897987691852683676515' ) ; test( macro , '-94906266' , '-717897987691852588770249' , '717897987691852493863983' ) ; +test( macro , '1073741824' , '0' , '1073741824' ) ; +test( macro , '-1073741824' , '0' , '-1073741824' ) ; test( macro , '1073741824' , '1' , '1073741823' ) ; test( macro , '-1073741824' , '1' , '-1073741825' ) ; test( macro , '1073741824' , '-1' , '1073741825' ) ; @@ -1032,6 +1097,8 @@ test( macro , '1073741824' , '717897987691852588770249' , '-71789798769185151502 test( macro , '-1073741824' , '717897987691852588770249' , '-717897987691853662512073' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '717897987691853662512073' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '717897987691851515028425' ) ; +test( macro , '51676101935731' , '0' , '51676101935731' ) ; +test( macro , '-51676101935731' , '0' , '-51676101935731' ) ; test( macro , '51676101935731' , '1' , '51676101935730' ) ; test( macro , '-51676101935731' , '1' , '-51676101935732' ) ; test( macro , '51676101935731' , '-1' , '51676101935732' ) ; @@ -1100,6 +1167,8 @@ test( macro , '51676101935731' , '717897987691852588770249' , '-7178979876401764 test( macro , '-51676101935731' , '717897987691852588770249' , '-717897987743528690705980' ) ; test( macro , '51676101935731' , '-717897987691852588770249' , '717897987743528690705980' ) ; test( macro , '-51676101935731' , '-717897987691852588770249' , '717897987640176486834518' ) ; +test( macro , '717897987691852588770249' , '0' , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , '0' , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770248' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770250' ) ; test( macro , '717897987691852588770249' , '-1' , '717897987691852588770250' ) ; diff --git a/test/src/integer/arithmetic/isubn.js b/test/src/integer/arithmetic/isubn.js index 38bed2d..8619281 100644 --- a/test/src/integer/arithmetic/isubn.js +++ b/test/src/integer/arithmetic/isubn.js @@ -10,6 +10,41 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `isubn(${A},${B}) = ${C}` ; +test( macro , '0' , 0 , '0' ) ; +test( macro , '0' , 1 , '-1' ) ; +test( macro , '0' , -1 , '1' ) ; +test( macro , '0' , 3 , '-3' ) ; +test( macro , '0' , -3 , '3' ) ; +test( macro , '0' , 7 , '-7' ) ; +test( macro , '0' , -7 , '7' ) ; +test( macro , '0' , 9 , '-9' ) ; +test( macro , '0' , -9 , '9' ) ; +test( macro , '0' , 11 , '-11' ) ; +test( macro , '0' , -11 , '11' ) ; +test( macro , '0' , 17 , '-17' ) ; +test( macro , '0' , -17 , '17' ) ; +test( macro , '0' , 22 , '-22' ) ; +test( macro , '0' , -22 , '22' ) ; +test( macro , '0' , 24 , '-24' ) ; +test( macro , '0' , -24 , '24' ) ; +test( macro , '0' , 27 , '-27' ) ; +test( macro , '0' , -27 , '27' ) ; +test( macro , '0' , 29 , '-29' ) ; +test( macro , '0' , -29 , '29' ) ; +test( macro , '0' , 1234 , '-1234' ) ; +test( macro , '0' , -1234 , '1234' ) ; +test( macro , '0' , 5678 , '-5678' ) ; +test( macro , '0' , -5678 , '5678' ) ; +test( macro , '0' , 94906265 , '-94906265' ) ; +test( macro , '0' , -94906265 , '94906265' ) ; +test( macro , '0' , 94906266 , '-94906266' ) ; +test( macro , '0' , -94906266 , '94906266' ) ; +test( macro , '0' , 1073741824 , '-1073741824' ) ; +test( macro , '0' , -1073741824 , '1073741824' ) ; +test( macro , '0' , 51676101935731 , '-51676101935731' ) ; +test( macro , '0' , -51676101935731 , '51676101935731' ) ; +test( macro , '1' , 0 , '1' ) ; +test( macro , '-1' , 0 , '-1' ) ; test( macro , '1' , 1 , '0' ) ; test( macro , '-1' , 1 , '-2' ) ; test( macro , '1' , -1 , '2' ) ; @@ -74,6 +109,8 @@ test( macro , '1' , 51676101935731 , '-51676101935730' ) ; test( macro , '-1' , 51676101935731 , '-51676101935732' ) ; test( macro , '1' , -51676101935731 , '51676101935732' ) ; test( macro , '-1' , -51676101935731 , '51676101935730' ) ; +test( macro , '3' , 0 , '3' ) ; +test( macro , '-3' , 0 , '-3' ) ; test( macro , '3' , 1 , '2' ) ; test( macro , '-3' , 1 , '-4' ) ; test( macro , '3' , -1 , '4' ) ; @@ -138,6 +175,8 @@ test( macro , '3' , 51676101935731 , '-51676101935728' ) ; test( macro , '-3' , 51676101935731 , '-51676101935734' ) ; test( macro , '3' , -51676101935731 , '51676101935734' ) ; test( macro , '-3' , -51676101935731 , '51676101935728' ) ; +test( macro , '7' , 0 , '7' ) ; +test( macro , '-7' , 0 , '-7' ) ; test( macro , '7' , 1 , '6' ) ; test( macro , '-7' , 1 , '-8' ) ; test( macro , '7' , -1 , '8' ) ; @@ -202,6 +241,8 @@ test( macro , '7' , 51676101935731 , '-51676101935724' ) ; test( macro , '-7' , 51676101935731 , '-51676101935738' ) ; test( macro , '7' , -51676101935731 , '51676101935738' ) ; test( macro , '-7' , -51676101935731 , '51676101935724' ) ; +test( macro , '9' , 0 , '9' ) ; +test( macro , '-9' , 0 , '-9' ) ; test( macro , '9' , 1 , '8' ) ; test( macro , '-9' , 1 , '-10' ) ; test( macro , '9' , -1 , '10' ) ; @@ -266,6 +307,8 @@ test( macro , '9' , 51676101935731 , '-51676101935722' ) ; test( macro , '-9' , 51676101935731 , '-51676101935740' ) ; test( macro , '9' , -51676101935731 , '51676101935740' ) ; test( macro , '-9' , -51676101935731 , '51676101935722' ) ; +test( macro , '11' , 0 , '11' ) ; +test( macro , '-11' , 0 , '-11' ) ; test( macro , '11' , 1 , '10' ) ; test( macro , '-11' , 1 , '-12' ) ; test( macro , '11' , -1 , '12' ) ; @@ -330,6 +373,8 @@ test( macro , '11' , 51676101935731 , '-51676101935720' ) ; test( macro , '-11' , 51676101935731 , '-51676101935742' ) ; test( macro , '11' , -51676101935731 , '51676101935742' ) ; test( macro , '-11' , -51676101935731 , '51676101935720' ) ; +test( macro , '17' , 0 , '17' ) ; +test( macro , '-17' , 0 , '-17' ) ; test( macro , '17' , 1 , '16' ) ; test( macro , '-17' , 1 , '-18' ) ; test( macro , '17' , -1 , '18' ) ; @@ -394,6 +439,8 @@ test( macro , '17' , 51676101935731 , '-51676101935714' ) ; test( macro , '-17' , 51676101935731 , '-51676101935748' ) ; test( macro , '17' , -51676101935731 , '51676101935748' ) ; test( macro , '-17' , -51676101935731 , '51676101935714' ) ; +test( macro , '22' , 0 , '22' ) ; +test( macro , '-22' , 0 , '-22' ) ; test( macro , '22' , 1 , '21' ) ; test( macro , '-22' , 1 , '-23' ) ; test( macro , '22' , -1 , '23' ) ; @@ -458,6 +505,8 @@ test( macro , '22' , 51676101935731 , '-51676101935709' ) ; test( macro , '-22' , 51676101935731 , '-51676101935753' ) ; test( macro , '22' , -51676101935731 , '51676101935753' ) ; test( macro , '-22' , -51676101935731 , '51676101935709' ) ; +test( macro , '24' , 0 , '24' ) ; +test( macro , '-24' , 0 , '-24' ) ; test( macro , '24' , 1 , '23' ) ; test( macro , '-24' , 1 , '-25' ) ; test( macro , '24' , -1 , '25' ) ; @@ -522,6 +571,8 @@ test( macro , '24' , 51676101935731 , '-51676101935707' ) ; test( macro , '-24' , 51676101935731 , '-51676101935755' ) ; test( macro , '24' , -51676101935731 , '51676101935755' ) ; test( macro , '-24' , -51676101935731 , '51676101935707' ) ; +test( macro , '27' , 0 , '27' ) ; +test( macro , '-27' , 0 , '-27' ) ; test( macro , '27' , 1 , '26' ) ; test( macro , '-27' , 1 , '-28' ) ; test( macro , '27' , -1 , '28' ) ; @@ -586,6 +637,8 @@ test( macro , '27' , 51676101935731 , '-51676101935704' ) ; test( macro , '-27' , 51676101935731 , '-51676101935758' ) ; test( macro , '27' , -51676101935731 , '51676101935758' ) ; test( macro , '-27' , -51676101935731 , '51676101935704' ) ; +test( macro , '29' , 0 , '29' ) ; +test( macro , '-29' , 0 , '-29' ) ; test( macro , '29' , 1 , '28' ) ; test( macro , '-29' , 1 , '-30' ) ; test( macro , '29' , -1 , '30' ) ; @@ -650,6 +703,8 @@ test( macro , '29' , 51676101935731 , '-51676101935702' ) ; test( macro , '-29' , 51676101935731 , '-51676101935760' ) ; test( macro , '29' , -51676101935731 , '51676101935760' ) ; test( macro , '-29' , -51676101935731 , '51676101935702' ) ; +test( macro , '1234' , 0 , '1234' ) ; +test( macro , '-1234' , 0 , '-1234' ) ; test( macro , '1234' , 1 , '1233' ) ; test( macro , '-1234' , 1 , '-1235' ) ; test( macro , '1234' , -1 , '1235' ) ; @@ -714,6 +769,8 @@ test( macro , '1234' , 51676101935731 , '-51676101934497' ) ; test( macro , '-1234' , 51676101935731 , '-51676101936965' ) ; test( macro , '1234' , -51676101935731 , '51676101936965' ) ; test( macro , '-1234' , -51676101935731 , '51676101934497' ) ; +test( macro , '5678' , 0 , '5678' ) ; +test( macro , '-5678' , 0 , '-5678' ) ; test( macro , '5678' , 1 , '5677' ) ; test( macro , '-5678' , 1 , '-5679' ) ; test( macro , '5678' , -1 , '5679' ) ; @@ -778,6 +835,8 @@ test( macro , '5678' , 51676101935731 , '-51676101930053' ) ; test( macro , '-5678' , 51676101935731 , '-51676101941409' ) ; test( macro , '5678' , -51676101935731 , '51676101941409' ) ; test( macro , '-5678' , -51676101935731 , '51676101930053' ) ; +test( macro , '94906265' , 0 , '94906265' ) ; +test( macro , '-94906265' , 0 , '-94906265' ) ; test( macro , '94906265' , 1 , '94906264' ) ; test( macro , '-94906265' , 1 , '-94906266' ) ; test( macro , '94906265' , -1 , '94906266' ) ; @@ -842,6 +901,8 @@ test( macro , '94906265' , 51676101935731 , '-51676007029466' ) ; test( macro , '-94906265' , 51676101935731 , '-51676196841996' ) ; test( macro , '94906265' , -51676101935731 , '51676196841996' ) ; test( macro , '-94906265' , -51676101935731 , '51676007029466' ) ; +test( macro , '94906266' , 0 , '94906266' ) ; +test( macro , '-94906266' , 0 , '-94906266' ) ; test( macro , '94906266' , 1 , '94906265' ) ; test( macro , '-94906266' , 1 , '-94906267' ) ; test( macro , '94906266' , -1 , '94906267' ) ; @@ -906,6 +967,8 @@ test( macro , '94906266' , 51676101935731 , '-51676007029465' ) ; test( macro , '-94906266' , 51676101935731 , '-51676196841997' ) ; test( macro , '94906266' , -51676101935731 , '51676196841997' ) ; test( macro , '-94906266' , -51676101935731 , '51676007029465' ) ; +test( macro , '1073741824' , 0 , '1073741824' ) ; +test( macro , '-1073741824' , 0 , '-1073741824' ) ; test( macro , '1073741824' , 1 , '1073741823' ) ; test( macro , '-1073741824' , 1 , '-1073741825' ) ; test( macro , '1073741824' , -1 , '1073741825' ) ; @@ -970,6 +1033,8 @@ test( macro , '1073741824' , 51676101935731 , '-51675028193907' ) ; test( macro , '-1073741824' , 51676101935731 , '-51677175677555' ) ; test( macro , '1073741824' , -51676101935731 , '51677175677555' ) ; test( macro , '-1073741824' , -51676101935731 , '51675028193907' ) ; +test( macro , '51676101935731' , 0 , '51676101935731' ) ; +test( macro , '-51676101935731' , 0 , '-51676101935731' ) ; test( macro , '51676101935731' , 1 , '51676101935730' ) ; test( macro , '-51676101935731' , 1 , '-51676101935732' ) ; test( macro , '51676101935731' , -1 , '51676101935732' ) ; @@ -1034,6 +1099,8 @@ test( macro , '51676101935731' , 51676101935731 , '0' ) ; test( macro , '-51676101935731' , 51676101935731 , '-103352203871462' ) ; test( macro , '51676101935731' , -51676101935731 , '103352203871462' ) ; test( macro , '-51676101935731' , -51676101935731 , '0' ) ; +test( macro , '717897987691852588770249' , 0 , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , 0 , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , 1 , '717897987691852588770248' ) ; test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770250' ) ; test( macro , '717897987691852588770249' , -1 , '717897987691852588770250' ) ; diff --git a/test/src/integer/arithmetic/mod.js b/test/src/integer/arithmetic/mod.js index 3e27666..0c141d1 100644 --- a/test/src/integer/arithmetic/mod.js +++ b/test/src/integer/arithmetic/mod.js @@ -12,6 +12,40 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `mod(${A},${B}) = ${C}` ; +test( macro , '0' , '1' , '0' ) ; +test( macro , '0' , '-1' , '0' ) ; +test( macro , '0' , '3' , '0' ) ; +test( macro , '0' , '-3' , '0' ) ; +test( macro , '0' , '7' , '0' ) ; +test( macro , '0' , '-7' , '0' ) ; +test( macro , '0' , '9' , '0' ) ; +test( macro , '0' , '-9' , '0' ) ; +test( macro , '0' , '11' , '0' ) ; +test( macro , '0' , '-11' , '0' ) ; +test( macro , '0' , '17' , '0' ) ; +test( macro , '0' , '-17' , '0' ) ; +test( macro , '0' , '22' , '0' ) ; +test( macro , '0' , '-22' , '0' ) ; +test( macro , '0' , '24' , '0' ) ; +test( macro , '0' , '-24' , '0' ) ; +test( macro , '0' , '27' , '0' ) ; +test( macro , '0' , '-27' , '0' ) ; +test( macro , '0' , '29' , '0' ) ; +test( macro , '0' , '-29' , '0' ) ; +test( macro , '0' , '1234' , '0' ) ; +test( macro , '0' , '-1234' , '0' ) ; +test( macro , '0' , '5678' , '0' ) ; +test( macro , '0' , '-5678' , '0' ) ; +test( macro , '0' , '94906265' , '0' ) ; +test( macro , '0' , '-94906265' , '0' ) ; +test( macro , '0' , '94906266' , '0' ) ; +test( macro , '0' , '-94906266' , '0' ) ; +test( macro , '0' , '1073741824' , '0' ) ; +test( macro , '0' , '-1073741824' , '0' ) ; +test( macro , '0' , '51676101935731' , '0' ) ; +test( macro , '0' , '-51676101935731' , '0' ) ; +test( macro , '0' , '717897987691852588770249' , '0' ) ; +test( macro , '0' , '-717897987691852588770249' , '0' ) ; test( macro , '1' , '1' , '0' ) ; test( macro , '-1' , '1' , '0' ) ; test( macro , '1' , '-1' , '0' ) ; diff --git a/test/src/integer/arithmetic/modn.js b/test/src/integer/arithmetic/modn.js index f0d58ad..1b0b570 100644 --- a/test/src/integer/arithmetic/modn.js +++ b/test/src/integer/arithmetic/modn.js @@ -10,6 +10,38 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `modn(${A},${B}) = ${C}` ; +test( macro , '0' , 1 , '0' ) ; +test( macro , '0' , -1 , '0' ) ; +test( macro , '0' , 3 , '0' ) ; +test( macro , '0' , -3 , '0' ) ; +test( macro , '0' , 7 , '0' ) ; +test( macro , '0' , -7 , '0' ) ; +test( macro , '0' , 9 , '0' ) ; +test( macro , '0' , -9 , '0' ) ; +test( macro , '0' , 11 , '0' ) ; +test( macro , '0' , -11 , '0' ) ; +test( macro , '0' , 17 , '0' ) ; +test( macro , '0' , -17 , '0' ) ; +test( macro , '0' , 22 , '0' ) ; +test( macro , '0' , -22 , '0' ) ; +test( macro , '0' , 24 , '0' ) ; +test( macro , '0' , -24 , '0' ) ; +test( macro , '0' , 27 , '0' ) ; +test( macro , '0' , -27 , '0' ) ; +test( macro , '0' , 29 , '0' ) ; +test( macro , '0' , -29 , '0' ) ; +test( macro , '0' , 1234 , '0' ) ; +test( macro , '0' , -1234 , '0' ) ; +test( macro , '0' , 5678 , '0' ) ; +test( macro , '0' , -5678 , '0' ) ; +test( macro , '0' , 94906265 , '0' ) ; +test( macro , '0' , -94906265 , '0' ) ; +test( macro , '0' , 94906266 , '0' ) ; +test( macro , '0' , -94906266 , '0' ) ; +test( macro , '0' , 1073741824 , '0' ) ; +test( macro , '0' , -1073741824 , '0' ) ; +test( macro , '0' , 51676101935731 , '0' ) ; +test( macro , '0' , -51676101935731 , '0' ) ; test( macro , '1' , 1 , '0' ) ; test( macro , '-1' , 1 , '0' ) ; test( macro , '1' , -1 , '0' ) ; diff --git a/test/src/integer/arithmetic/mul.js b/test/src/integer/arithmetic/mul.js index 5f2cf48..f925fcb 100644 --- a/test/src/integer/arithmetic/mul.js +++ b/test/src/integer/arithmetic/mul.js @@ -12,6 +12,43 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `mul(${A},${B}) = ${C}` ; +test( macro , '0' , '0' , '0' ) ; +test( macro , '0' , '1' , '0' ) ; +test( macro , '0' , '-1' , '0' ) ; +test( macro , '0' , '3' , '0' ) ; +test( macro , '0' , '-3' , '0' ) ; +test( macro , '0' , '7' , '0' ) ; +test( macro , '0' , '-7' , '0' ) ; +test( macro , '0' , '9' , '0' ) ; +test( macro , '0' , '-9' , '0' ) ; +test( macro , '0' , '11' , '0' ) ; +test( macro , '0' , '-11' , '0' ) ; +test( macro , '0' , '17' , '0' ) ; +test( macro , '0' , '-17' , '0' ) ; +test( macro , '0' , '22' , '0' ) ; +test( macro , '0' , '-22' , '0' ) ; +test( macro , '0' , '24' , '0' ) ; +test( macro , '0' , '-24' , '0' ) ; +test( macro , '0' , '27' , '0' ) ; +test( macro , '0' , '-27' , '0' ) ; +test( macro , '0' , '29' , '0' ) ; +test( macro , '0' , '-29' , '0' ) ; +test( macro , '0' , '1234' , '0' ) ; +test( macro , '0' , '-1234' , '0' ) ; +test( macro , '0' , '5678' , '0' ) ; +test( macro , '0' , '-5678' , '0' ) ; +test( macro , '0' , '94906265' , '0' ) ; +test( macro , '0' , '-94906265' , '0' ) ; +test( macro , '0' , '94906266' , '0' ) ; +test( macro , '0' , '-94906266' , '0' ) ; +test( macro , '0' , '1073741824' , '0' ) ; +test( macro , '0' , '-1073741824' , '0' ) ; +test( macro , '0' , '51676101935731' , '0' ) ; +test( macro , '0' , '-51676101935731' , '0' ) ; +test( macro , '0' , '717897987691852588770249' , '0' ) ; +test( macro , '0' , '-717897987691852588770249' , '0' ) ; +test( macro , '1' , '0' , '0' ) ; +test( macro , '-1' , '0' , '0' ) ; test( macro , '1' , '1' , '1' ) ; test( macro , '-1' , '1' , '-1' ) ; test( macro , '1' , '-1' , '-1' ) ; @@ -80,6 +117,8 @@ test( macro , '1' , '717897987691852588770249' , '717897987691852588770249' ) ; test( macro , '-1' , '717897987691852588770249' , '-717897987691852588770249' ) ; test( macro , '1' , '-717897987691852588770249' , '-717897987691852588770249' ) ; test( macro , '-1' , '-717897987691852588770249' , '717897987691852588770249' ) ; +test( macro , '3' , '0' , '0' ) ; +test( macro , '-3' , '0' , '0' ) ; test( macro , '3' , '1' , '3' ) ; test( macro , '-3' , '1' , '-3' ) ; test( macro , '3' , '-1' , '-3' ) ; @@ -148,6 +187,8 @@ test( macro , '3' , '717897987691852588770249' , '2153693963075557766310747' ) ; test( macro , '-3' , '717897987691852588770249' , '-2153693963075557766310747' ) ; test( macro , '3' , '-717897987691852588770249' , '-2153693963075557766310747' ) ; test( macro , '-3' , '-717897987691852588770249' , '2153693963075557766310747' ) ; +test( macro , '7' , '0' , '0' ) ; +test( macro , '-7' , '0' , '0' ) ; test( macro , '7' , '1' , '7' ) ; test( macro , '-7' , '1' , '-7' ) ; test( macro , '7' , '-1' , '-7' ) ; @@ -216,6 +257,8 @@ test( macro , '7' , '717897987691852588770249' , '5025285913842968121391743' ) ; test( macro , '-7' , '717897987691852588770249' , '-5025285913842968121391743' ) ; test( macro , '7' , '-717897987691852588770249' , '-5025285913842968121391743' ) ; test( macro , '-7' , '-717897987691852588770249' , '5025285913842968121391743' ) ; +test( macro , '9' , '0' , '0' ) ; +test( macro , '-9' , '0' , '0' ) ; test( macro , '9' , '1' , '9' ) ; test( macro , '-9' , '1' , '-9' ) ; test( macro , '9' , '-1' , '-9' ) ; @@ -284,6 +327,8 @@ test( macro , '9' , '717897987691852588770249' , '6461081889226673298932241' ) ; test( macro , '-9' , '717897987691852588770249' , '-6461081889226673298932241' ) ; test( macro , '9' , '-717897987691852588770249' , '-6461081889226673298932241' ) ; test( macro , '-9' , '-717897987691852588770249' , '6461081889226673298932241' ) ; +test( macro , '11' , '0' , '0' ) ; +test( macro , '-11' , '0' , '0' ) ; test( macro , '11' , '1' , '11' ) ; test( macro , '-11' , '1' , '-11' ) ; test( macro , '11' , '-1' , '-11' ) ; @@ -352,6 +397,8 @@ test( macro , '11' , '717897987691852588770249' , '7896877864610378476472739' ) test( macro , '-11' , '717897987691852588770249' , '-7896877864610378476472739' ) ; test( macro , '11' , '-717897987691852588770249' , '-7896877864610378476472739' ) ; test( macro , '-11' , '-717897987691852588770249' , '7896877864610378476472739' ) ; +test( macro , '17' , '0' , '0' ) ; +test( macro , '-17' , '0' , '0' ) ; test( macro , '17' , '1' , '17' ) ; test( macro , '-17' , '1' , '-17' ) ; test( macro , '17' , '-1' , '-17' ) ; @@ -420,6 +467,8 @@ test( macro , '17' , '717897987691852588770249' , '12204265790761494009094233' ) test( macro , '-17' , '717897987691852588770249' , '-12204265790761494009094233' ) ; test( macro , '17' , '-717897987691852588770249' , '-12204265790761494009094233' ) ; test( macro , '-17' , '-717897987691852588770249' , '12204265790761494009094233' ) ; +test( macro , '22' , '0' , '0' ) ; +test( macro , '-22' , '0' , '0' ) ; test( macro , '22' , '1' , '22' ) ; test( macro , '-22' , '1' , '-22' ) ; test( macro , '22' , '-1' , '-22' ) ; @@ -488,6 +537,8 @@ test( macro , '22' , '717897987691852588770249' , '15793755729220756952945478' ) test( macro , '-22' , '717897987691852588770249' , '-15793755729220756952945478' ) ; test( macro , '22' , '-717897987691852588770249' , '-15793755729220756952945478' ) ; test( macro , '-22' , '-717897987691852588770249' , '15793755729220756952945478' ) ; +test( macro , '24' , '0' , '0' ) ; +test( macro , '-24' , '0' , '0' ) ; test( macro , '24' , '1' , '24' ) ; test( macro , '-24' , '1' , '-24' ) ; test( macro , '24' , '-1' , '-24' ) ; @@ -556,6 +607,8 @@ test( macro , '24' , '717897987691852588770249' , '17229551704604462130485976' ) test( macro , '-24' , '717897987691852588770249' , '-17229551704604462130485976' ) ; test( macro , '24' , '-717897987691852588770249' , '-17229551704604462130485976' ) ; test( macro , '-24' , '-717897987691852588770249' , '17229551704604462130485976' ) ; +test( macro , '27' , '0' , '0' ) ; +test( macro , '-27' , '0' , '0' ) ; test( macro , '27' , '1' , '27' ) ; test( macro , '-27' , '1' , '-27' ) ; test( macro , '27' , '-1' , '-27' ) ; @@ -624,6 +677,8 @@ test( macro , '27' , '717897987691852588770249' , '19383245667680019896796723' ) test( macro , '-27' , '717897987691852588770249' , '-19383245667680019896796723' ) ; test( macro , '27' , '-717897987691852588770249' , '-19383245667680019896796723' ) ; test( macro , '-27' , '-717897987691852588770249' , '19383245667680019896796723' ) ; +test( macro , '29' , '0' , '0' ) ; +test( macro , '-29' , '0' , '0' ) ; test( macro , '29' , '1' , '29' ) ; test( macro , '-29' , '1' , '-29' ) ; test( macro , '29' , '-1' , '-29' ) ; @@ -692,6 +747,8 @@ test( macro , '29' , '717897987691852588770249' , '20819041643063725074337221' ) test( macro , '-29' , '717897987691852588770249' , '-20819041643063725074337221' ) ; test( macro , '29' , '-717897987691852588770249' , '-20819041643063725074337221' ) ; test( macro , '-29' , '-717897987691852588770249' , '20819041643063725074337221' ) ; +test( macro , '1234' , '0' , '0' ) ; +test( macro , '-1234' , '0' , '0' ) ; test( macro , '1234' , '1' , '1234' ) ; test( macro , '-1234' , '1' , '-1234' ) ; test( macro , '1234' , '-1' , '-1234' ) ; @@ -760,6 +817,8 @@ test( macro , '1234' , '717897987691852588770249' , '885886116811746094542487266 test( macro , '-1234' , '717897987691852588770249' , '-885886116811746094542487266' ) ; test( macro , '1234' , '-717897987691852588770249' , '-885886116811746094542487266' ) ; test( macro , '-1234' , '-717897987691852588770249' , '885886116811746094542487266' ) ; +test( macro , '5678' , '0' , '0' ) ; +test( macro , '-5678' , '0' , '0' ) ; test( macro , '5678' , '1' , '5678' ) ; test( macro , '-5678' , '1' , '-5678' ) ; test( macro , '5678' , '-1' , '-5678' ) ; @@ -828,6 +887,8 @@ test( macro , '5678' , '717897987691852588770249' , '407622477411433899903747382 test( macro , '-5678' , '717897987691852588770249' , '-4076224774114338999037473822' ) ; test( macro , '5678' , '-717897987691852588770249' , '-4076224774114338999037473822' ) ; test( macro , '-5678' , '-717897987691852588770249' , '4076224774114338999037473822' ) ; +test( macro , '94906265' , '0' , '0' ) ; +test( macro , '-94906265' , '0' , '0' ) ; test( macro , '94906265' , '1' , '94906265' ) ; test( macro , '-94906265' , '1' , '-94906265' ) ; test( macro , '94906265' , '-1' , '-94906265' ) ; @@ -896,6 +957,8 @@ test( macro , '94906265' , '717897987691852588770249' , '68133016662849700130765 test( macro , '-94906265' , '717897987691852588770249' , '-68133016662849700130765275709985' ) ; test( macro , '94906265' , '-717897987691852588770249' , '-68133016662849700130765275709985' ) ; test( macro , '-94906265' , '-717897987691852588770249' , '68133016662849700130765275709985' ) ; +test( macro , '94906266' , '0' , '0' ) ; +test( macro , '-94906266' , '0' , '0' ) ; test( macro , '94906266' , '1' , '94906266' ) ; test( macro , '-94906266' , '1' , '-94906266' ) ; test( macro , '94906266' , '-1' , '-94906266' ) ; @@ -964,6 +1027,8 @@ test( macro , '94906266' , '717897987691852588770249' , '68133017380747687822617 test( macro , '-94906266' , '717897987691852588770249' , '-68133017380747687822617864480234' ) ; test( macro , '94906266' , '-717897987691852588770249' , '-68133017380747687822617864480234' ) ; test( macro , '-94906266' , '-717897987691852588770249' , '68133017380747687822617864480234' ) ; +test( macro , '1073741824' , '0' , '0' ) ; +test( macro , '-1073741824' , '0' , '0' ) ; test( macro , '1073741824' , '1' , '1073741824' ) ; test( macro , '-1073741824' , '1' , '-1073741824' ) ; test( macro , '1073741824' , '-1' , '-1073741824' ) ; @@ -1032,6 +1097,8 @@ test( macro , '1073741824' , '717897987691852588770249' , '770837094750179348605 test( macro , '-1073741824' , '717897987691852588770249' , '-770837094750179348605289078194176' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '-770837094750179348605289078194176' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '770837094750179348605289078194176' ) ; +test( macro , '51676101935731' , '0' , '0' ) ; +test( macro , '-51676101935731' , '0' , '0' ) ; test( macro , '51676101935731' , '1' , '51676101935731' ) ; test( macro , '-51676101935731' , '1' , '-51676101935731' ) ; test( macro , '51676101935731' , '-1' , '-51676101935731' ) ; @@ -1100,6 +1167,8 @@ test( macro , '51676101935731' , '717897987691852588770249' , '37098169591420333 test( macro , '-51676101935731' , '717897987691852588770249' , '-37098169591420333175287767861722867019' ) ; test( macro , '51676101935731' , '-717897987691852588770249' , '-37098169591420333175287767861722867019' ) ; test( macro , '-51676101935731' , '-717897987691852588770249' , '37098169591420333175287767861722867019' ) ; +test( macro , '717897987691852588770249' , '0' , '0' ) ; +test( macro , '-717897987691852588770249' , '0' , '0' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770249' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , '-1' , '-717897987691852588770249' ) ; diff --git a/test/src/integer/arithmetic/muln.js b/test/src/integer/arithmetic/muln.js index 3808eba..9963f84 100644 --- a/test/src/integer/arithmetic/muln.js +++ b/test/src/integer/arithmetic/muln.js @@ -10,6 +10,41 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `muln(${A},${B}) = ${C}` ; +test( macro , '0' , 0 , '0' ) ; +test( macro , '0' , 1 , '0' ) ; +test( macro , '0' , -1 , '0' ) ; +test( macro , '0' , 3 , '0' ) ; +test( macro , '0' , -3 , '0' ) ; +test( macro , '0' , 7 , '0' ) ; +test( macro , '0' , -7 , '0' ) ; +test( macro , '0' , 9 , '0' ) ; +test( macro , '0' , -9 , '0' ) ; +test( macro , '0' , 11 , '0' ) ; +test( macro , '0' , -11 , '0' ) ; +test( macro , '0' , 17 , '0' ) ; +test( macro , '0' , -17 , '0' ) ; +test( macro , '0' , 22 , '0' ) ; +test( macro , '0' , -22 , '0' ) ; +test( macro , '0' , 24 , '0' ) ; +test( macro , '0' , -24 , '0' ) ; +test( macro , '0' , 27 , '0' ) ; +test( macro , '0' , -27 , '0' ) ; +test( macro , '0' , 29 , '0' ) ; +test( macro , '0' , -29 , '0' ) ; +test( macro , '0' , 1234 , '0' ) ; +test( macro , '0' , -1234 , '0' ) ; +test( macro , '0' , 5678 , '0' ) ; +test( macro , '0' , -5678 , '0' ) ; +test( macro , '0' , 94906265 , '0' ) ; +test( macro , '0' , -94906265 , '0' ) ; +test( macro , '0' , 94906266 , '0' ) ; +test( macro , '0' , -94906266 , '0' ) ; +test( macro , '0' , 1073741824 , '0' ) ; +test( macro , '0' , -1073741824 , '0' ) ; +test( macro , '0' , 51676101935731 , '0' ) ; +test( macro , '0' , -51676101935731 , '0' ) ; +test( macro , '1' , 0 , '0' ) ; +test( macro , '-1' , 0 , '0' ) ; test( macro , '1' , 1 , '1' ) ; test( macro , '-1' , 1 , '-1' ) ; test( macro , '1' , -1 , '-1' ) ; @@ -74,6 +109,8 @@ test( macro , '1' , 51676101935731 , '51676101935731' ) ; test( macro , '-1' , 51676101935731 , '-51676101935731' ) ; test( macro , '1' , -51676101935731 , '-51676101935731' ) ; test( macro , '-1' , -51676101935731 , '51676101935731' ) ; +test( macro , '3' , 0 , '0' ) ; +test( macro , '-3' , 0 , '0' ) ; test( macro , '3' , 1 , '3' ) ; test( macro , '-3' , 1 , '-3' ) ; test( macro , '3' , -1 , '-3' ) ; @@ -138,6 +175,8 @@ test( macro , '3' , 51676101935731 , '155028305807193' ) ; test( macro , '-3' , 51676101935731 , '-155028305807193' ) ; test( macro , '3' , -51676101935731 , '-155028305807193' ) ; test( macro , '-3' , -51676101935731 , '155028305807193' ) ; +test( macro , '7' , 0 , '0' ) ; +test( macro , '-7' , 0 , '0' ) ; test( macro , '7' , 1 , '7' ) ; test( macro , '-7' , 1 , '-7' ) ; test( macro , '7' , -1 , '-7' ) ; @@ -202,6 +241,8 @@ test( macro , '7' , 51676101935731 , '361732713550117' ) ; test( macro , '-7' , 51676101935731 , '-361732713550117' ) ; test( macro , '7' , -51676101935731 , '-361732713550117' ) ; test( macro , '-7' , -51676101935731 , '361732713550117' ) ; +test( macro , '9' , 0 , '0' ) ; +test( macro , '-9' , 0 , '0' ) ; test( macro , '9' , 1 , '9' ) ; test( macro , '-9' , 1 , '-9' ) ; test( macro , '9' , -1 , '-9' ) ; @@ -266,6 +307,8 @@ test( macro , '9' , 51676101935731 , '465084917421579' ) ; test( macro , '-9' , 51676101935731 , '-465084917421579' ) ; test( macro , '9' , -51676101935731 , '-465084917421579' ) ; test( macro , '-9' , -51676101935731 , '465084917421579' ) ; +test( macro , '11' , 0 , '0' ) ; +test( macro , '-11' , 0 , '0' ) ; test( macro , '11' , 1 , '11' ) ; test( macro , '-11' , 1 , '-11' ) ; test( macro , '11' , -1 , '-11' ) ; @@ -330,6 +373,8 @@ test( macro , '11' , 51676101935731 , '568437121293041' ) ; test( macro , '-11' , 51676101935731 , '-568437121293041' ) ; test( macro , '11' , -51676101935731 , '-568437121293041' ) ; test( macro , '-11' , -51676101935731 , '568437121293041' ) ; +test( macro , '17' , 0 , '0' ) ; +test( macro , '-17' , 0 , '0' ) ; test( macro , '17' , 1 , '17' ) ; test( macro , '-17' , 1 , '-17' ) ; test( macro , '17' , -1 , '-17' ) ; @@ -394,6 +439,8 @@ test( macro , '17' , 51676101935731 , '878493732907427' ) ; test( macro , '-17' , 51676101935731 , '-878493732907427' ) ; test( macro , '17' , -51676101935731 , '-878493732907427' ) ; test( macro , '-17' , -51676101935731 , '878493732907427' ) ; +test( macro , '22' , 0 , '0' ) ; +test( macro , '-22' , 0 , '0' ) ; test( macro , '22' , 1 , '22' ) ; test( macro , '-22' , 1 , '-22' ) ; test( macro , '22' , -1 , '-22' ) ; @@ -458,6 +505,8 @@ test( macro , '22' , 51676101935731 , '1136874242586082' ) ; test( macro , '-22' , 51676101935731 , '-1136874242586082' ) ; test( macro , '22' , -51676101935731 , '-1136874242586082' ) ; test( macro , '-22' , -51676101935731 , '1136874242586082' ) ; +test( macro , '24' , 0 , '0' ) ; +test( macro , '-24' , 0 , '0' ) ; test( macro , '24' , 1 , '24' ) ; test( macro , '-24' , 1 , '-24' ) ; test( macro , '24' , -1 , '-24' ) ; @@ -522,6 +571,8 @@ test( macro , '24' , 51676101935731 , '1240226446457544' ) ; test( macro , '-24' , 51676101935731 , '-1240226446457544' ) ; test( macro , '24' , -51676101935731 , '-1240226446457544' ) ; test( macro , '-24' , -51676101935731 , '1240226446457544' ) ; +test( macro , '27' , 0 , '0' ) ; +test( macro , '-27' , 0 , '0' ) ; test( macro , '27' , 1 , '27' ) ; test( macro , '-27' , 1 , '-27' ) ; test( macro , '27' , -1 , '-27' ) ; @@ -586,6 +637,8 @@ test( macro , '27' , 51676101935731 , '1395254752264737' ) ; test( macro , '-27' , 51676101935731 , '-1395254752264737' ) ; test( macro , '27' , -51676101935731 , '-1395254752264737' ) ; test( macro , '-27' , -51676101935731 , '1395254752264737' ) ; +test( macro , '29' , 0 , '0' ) ; +test( macro , '-29' , 0 , '0' ) ; test( macro , '29' , 1 , '29' ) ; test( macro , '-29' , 1 , '-29' ) ; test( macro , '29' , -1 , '-29' ) ; @@ -650,6 +703,8 @@ test( macro , '29' , 51676101935731 , '1498606956136199' ) ; test( macro , '-29' , 51676101935731 , '-1498606956136199' ) ; test( macro , '29' , -51676101935731 , '-1498606956136199' ) ; test( macro , '-29' , -51676101935731 , '1498606956136199' ) ; +test( macro , '1234' , 0 , '0' ) ; +test( macro , '-1234' , 0 , '0' ) ; test( macro , '1234' , 1 , '1234' ) ; test( macro , '-1234' , 1 , '-1234' ) ; test( macro , '1234' , -1 , '-1234' ) ; @@ -714,6 +769,8 @@ test( macro , '1234' , 51676101935731 , '63768309788692054' ) ; test( macro , '-1234' , 51676101935731 , '-63768309788692054' ) ; test( macro , '1234' , -51676101935731 , '-63768309788692054' ) ; test( macro , '-1234' , -51676101935731 , '63768309788692054' ) ; +test( macro , '5678' , 0 , '0' ) ; +test( macro , '-5678' , 0 , '0' ) ; test( macro , '5678' , 1 , '5678' ) ; test( macro , '-5678' , 1 , '-5678' ) ; test( macro , '5678' , -1 , '-5678' ) ; @@ -778,6 +835,8 @@ test( macro , '5678' , 51676101935731 , '293416906791080618' ) ; test( macro , '-5678' , 51676101935731 , '-293416906791080618' ) ; test( macro , '5678' , -51676101935731 , '-293416906791080618' ) ; test( macro , '-5678' , -51676101935731 , '293416906791080618' ) ; +test( macro , '94906265' , 0 , '0' ) ; +test( macro , '-94906265' , 0 , '0' ) ; test( macro , '94906265' , 1 , '94906265' ) ; test( macro , '-94906265' , 1 , '-94906265' ) ; test( macro , '94906265' , -1 , '-94906265' ) ; @@ -842,6 +901,8 @@ test( macro , '94906265' , 51676101935731 , '4904385824479499254715' ) ; test( macro , '-94906265' , 51676101935731 , '-4904385824479499254715' ) ; test( macro , '94906265' , -51676101935731 , '-4904385824479499254715' ) ; test( macro , '-94906265' , -51676101935731 , '4904385824479499254715' ) ; +test( macro , '94906266' , 0 , '0' ) ; +test( macro , '-94906266' , 0 , '0' ) ; test( macro , '94906266' , 1 , '94906266' ) ; test( macro , '-94906266' , 1 , '-94906266' ) ; test( macro , '94906266' , -1 , '-94906266' ) ; @@ -906,6 +967,8 @@ test( macro , '94906266' , 51676101935731 , '4904385876155601190446' ) ; test( macro , '-94906266' , 51676101935731 , '-4904385876155601190446' ) ; test( macro , '94906266' , -51676101935731 , '-4904385876155601190446' ) ; test( macro , '-94906266' , -51676101935731 , '4904385876155601190446' ) ; +test( macro , '1073741824' , 0 , '0' ) ; +test( macro , '-1073741824' , 0 , '0' ) ; test( macro , '1073741824' , 1 , '1073741824' ) ; test( macro , '-1073741824' , 1 , '-1073741824' ) ; test( macro , '1073741824' , -1 , '-1073741824' ) ; @@ -970,6 +1033,8 @@ test( macro , '1073741824' , 51676101935731 , '55486791949681734713344' ) ; test( macro , '-1073741824' , 51676101935731 , '-55486791949681734713344' ) ; test( macro , '1073741824' , -51676101935731 , '-55486791949681734713344' ) ; test( macro , '-1073741824' , -51676101935731 , '55486791949681734713344' ) ; +test( macro , '51676101935731' , 0 , '0' ) ; +test( macro , '-51676101935731' , 0 , '0' ) ; test( macro , '51676101935731' , 1 , '51676101935731' ) ; test( macro , '-51676101935731' , 1 , '-51676101935731' ) ; test( macro , '51676101935731' , -1 , '-51676101935731' ) ; @@ -1034,6 +1099,8 @@ test( macro , '51676101935731' , 51676101935731 , '2670419511272061205254504361' test( macro , '-51676101935731' , 51676101935731 , '-2670419511272061205254504361' ) ; test( macro , '51676101935731' , -51676101935731 , '-2670419511272061205254504361' ) ; test( macro , '-51676101935731' , -51676101935731 , '2670419511272061205254504361' ) ; +test( macro , '717897987691852588770249' , 0 , '0' ) ; +test( macro , '-717897987691852588770249' , 0 , '0' ) ; test( macro , '717897987691852588770249' , 1 , '717897987691852588770249' ) ; test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , -1 , '-717897987691852588770249' ) ; diff --git a/test/src/integer/arithmetic/pow.js b/test/src/integer/arithmetic/pow.js index 2fc62d6..f835a99 100644 --- a/test/src/integer/arithmetic/pow.js +++ b/test/src/integer/arithmetic/pow.js @@ -12,6 +12,21 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `pow(${A},${B}) = ${C}` ; +test( macro , '0' , '0' , '1' ) ; +test( macro , '0' , '1' , '0' ) ; +test( macro , '0' , '3' , '0' ) ; +test( macro , '0' , '7' , '0' ) ; +test( macro , '0' , '9' , '0' ) ; +test( macro , '0' , '11' , '0' ) ; +test( macro , '0' , '17' , '0' ) ; +test( macro , '0' , '22' , '0' ) ; +test( macro , '0' , '24' , '0' ) ; +test( macro , '0' , '27' , '0' ) ; +test( macro , '0' , '29' , '0' ) ; +test( macro , '0' , '1234' , '0' ) ; +test( macro , '0' , '5678' , '0' ) ; +test( macro , '1' , '0' , '1' ) ; +test( macro , '-1' , '0' , '1' ) ; test( macro , '1' , '1' , '1' ) ; test( macro , '-1' , '1' , '-1' ) ; test( macro , '1' , '3' , '1' ) ; @@ -36,6 +51,8 @@ test( macro , '1' , '1234' , '1' ) ; test( macro , '-1' , '1234' , '1' ) ; test( macro , '1' , '5678' , '1' ) ; test( macro , '-1' , '5678' , '1' ) ; +test( macro , '3' , '0' , '1' ) ; +test( macro , '-3' , '0' , '1' ) ; test( macro , '3' , '1' , '3' ) ; test( macro , '-3' , '1' , '-3' ) ; test( macro , '3' , '3' , '27' ) ; @@ -60,6 +77,8 @@ test( macro , '3' , '1234' , '58563675299320712690496087264150284397571436234430 test( macro , '-3' , '1234' , '5856367529932071269049608726415028439757143623443063785468784843536946634255003858796842453459905186846046851774292445753149532138648409140561593823222428559200283816367593571556942770711203894947318922509986128995034233177140247221695941679146171215675158154358685224309073135481486540427499644363484815218991488230440687359021965115067678545212365725678242878485920885436927030372580147256775788882374301866845441065076726499613479868210410548366056401445912760529623658838510267592199677099676046090140514526228797525926977514932394954796457727416398081482661262807288229389463819882569' ) ; test( macro , '3' , '5678' , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; test( macro , '-3' , '5678' , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; +test( macro , '7' , '0' , '1' ) ; +test( macro , '-7' , '0' , '1' ) ; test( macro , '7' , '1' , '7' ) ; test( macro , '-7' , '1' , '-7' ) ; test( macro , '7' , '3' , '343' ) ; @@ -84,6 +103,8 @@ test( macro , '7' , '1234' , '70954734215028011240104595141498929070420289200365 test( macro , '-7' , '1234' , '70954734215028011240104595141498929070420289200365254864883100224459061531095964535961424752183918983389834714345883085722594630104327570484382813454950959834721299254363358098967399048133489131401375954827777487240689332659684949614116231197346793510695402301156840458057925504143947679213040737846060014251249690928324441226158708348216074516368113070768675494487327714367821662938661080440834970823376650216081882744143161592962823478851621834726159007802788609981541818975600270503709811145869971874252832721423453899821462438727851069669041332053765106227148570291872998008674128627485981069824533343176007316751497280494057995201432198045575691194828311578763776024467116028227768366827683004790939265568398432923069244698164607404132404210543306184313774389935234011995625090611727226388755028092996618090667295922698497975515840710550500258575437750076719351206138149202280453034232757583405474400100672191700332560347912741669538744924043142095605796598736664375513698661239721232174697654768024941266796370339939780641017369634940849' ) ; test( macro , '7' , '5678' , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; test( macro , '-7' , '5678' , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; +test( macro , '9' , '0' , '1' ) ; +test( macro , '-9' , '0' , '1' ) ; test( macro , '9' , '1' , '9' ) ; test( macro , '-9' , '1' , '-9' ) ; test( macro , '9' , '3' , '729' ) ; @@ -108,6 +129,8 @@ test( macro , '9' , '1234' , '34297040645642669671420659321651782362579256907010 test( macro , '-9' , '1234' , '34297040645642669671420659321651782362579256907010306825298584320017224909034295065159266732166824736588968016033381896847023243099736344433210097854593507161679850671932155017203599500044609298345843661231598352934672574000630755280719247078658076071069504371210453795997193380141459822909472292250049962822082559318856309665763195373936160408297178132724501864611562349337209033935902601202229170588203644970751513231529370646017342084334943445632338625406001819417100075123659123153934372275946883429572960429182400235833979860757127508599030945874737763438221696224240363286973695769026948553357192210469914347532288838793872337455361841599848707950096810738215169875752378946944496071085184269469689190048414428631904103213703000348839546159132360494448224371361413782868923322232033859714664315449006669237525993661192066307764695656412997620762143868465614936957887460078238297229855499508020184426374192732713213787351302551235717525464575349122336444905826195262672337776865803043472081042136085365758586709594709588874980188963624351301943558778230597943000313246648597648327615323559497393534626812152826795197456515853598831232826676446660986298958124148320950039761' ) ; test( macro , '9' , '5678' , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; test( macro , '-9' , '5678' , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; +test( macro , '11' , '0' , '1' ) ; +test( macro , '-11' , '0' , '1' ) ; test( macro , '11' , '1' , '11' ) ; test( macro , '-11' , '1' , '-11' ) ; test( macro , '11' , '3' , '1331' ) ; @@ -132,6 +155,8 @@ test( macro , '11' , '1234' , '1198321869335386626769268435919400050243389384548 test( macro , '-11' , '1234' , '11983218693353866267692684359194000502433893845480769112172251205188147262289354049461429172488569661122876033605557421170789272790102054304092511689341645557874249802952871767405284987003806187594928847518777345850099915863264078051816617440620669835924344622459557434141694081118718006962588499405658476477809584051185924057025464163718833076869861008662963948775457304791091957146272768229564713967630639094659383688489828857998385412406001934065445969895732784144880158564496904866299896753946773061123748947095350178138399329492711931118102507186743010708942286629969813642204878306198565914755078983880064808436574100979762259478493960140042607880569732036310833444310215790281432505720437714904537904767412626253808859682743392379188494787465177304942343204339576610614978528053711125948630650946573610344095512008508992625585490923211491629695497720992580178320146672152256706875056491678710723022609578354722578101061602454247010516142562468962308895384683137775859149496917496435957009023897662611266558969297452444733968450168403551460556237438931715240285963118359275426150086656493777954817140258639584026557409436805416478575578840073580647683266895284248911727092735184253994397858925804638577468716770187699083797737507027525458211673613162334364880959262660197607632441' ) ; test( macro , '11' , '5678' , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; test( macro , '-11' , '5678' , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; +test( macro , '17' , '0' , '1' ) ; +test( macro , '-17' , '0' , '1' ) ; test( macro , '17' , '1' , '17' ) ; test( macro , '-17' , '1' , '-17' ) ; test( macro , '17' , '3' , '4913' ) ; @@ -156,6 +181,8 @@ test( macro , '17' , '1234' , '2365750719195418700959936173439221488331849554433 test( macro , '-17' , '1234' , '2365750719195418700959936173439221488331849554433443272309037789270912117133978206777246165583614280813095899236078594286552848472860457643580615017539717857048793304325119681053421007826013802905479250885212839793760101742612296877478711932287387420109262614158330630362237192202151123468592153560375572873151822947436950242912080157786888545384847518810574795754691976973525697429044294851654461713242307440541746159573098284837473930094049306091573440131975480886198509578012017892791103610676499734889373927818577887242310104551008535893775377108954649457429588226369074071331951078940909959401201709240381177136083510255280740550175339832084572676328794889199725393235934601424964165016988318210336776289444267654575587266337284861333685818972410304844379843215873568783484299285855710739185984313729162892241201484427793478780366719828354369198742105822244711994746358620164097425507697349511284930229811697252220792819650825560346717292110648932265899796733644188721108873119505172872099646531092906043987147572277125354950545394615532850018465975565730363029206743959014462690377536775695776234592924640448812639061038539121473894456471681658974744379159553490945761899997224178778022075766625329855978704429033291722506766694214979844269409520158332260044608648267713490710210601126307243035021020433002092628988274703326841291915973218749244960354639698612598420531573152776417281665548298330678827921029701549454503621900176615327265802134551424622450618795022965384601079468969005231566796416059429914871329' ) ; test( macro , '17' , '5678' , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; test( macro , '-17' , '5678' , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; +test( macro , '22' , '0' , '1' ) ; +test( macro , '-22' , '0' , '1' ) ; test( macro , '22' , '1' , '22' ) ; test( macro , '-22' , '1' , '-22' ) ; test( macro , '22' , '3' , '10648' ) ; @@ -180,6 +207,8 @@ test( macro , '22' , '1234' , '3544770596427666704933670825514058656840289167033 test( macro , '-22' , '1234' , '3544770596427666704933670825514058656840289167033434034813245091750883162270446675859397841986880345238161021960809170374322988214534191585053363506454126462213757244784862172250548800355120891239982462620296434675754206726427100313150523472266151826654642293138772262710079764335312817589977974888511704681598808553789636057965795110640986410281597921902662990963638641278281253781683699119666661945433104346601274970659774893661365968347766707077408549681767565454620843792569318870542401828729517938364411892509820193464655128629664809734022850771731500407885408815335930002147542787627415049845408189806745107445132307539157002401311183617949986742914159513317593667951549591942294545010053084686720365553135398975223690151357594502438362943103211174888290826883518964968656962099365383745446040058868947352605005471883468803102923319135160194367582819156826127917537651473185148386098880353425069599001396856273342875688276177114278359156141134393159654758637663041409089129911594364800818125391217718986756939362789014002086984204053324062930069928284955781180175025313587891151051182531528712430068603601480445127763661852050046817311966022046189931948955290807404661752447837636846919052423707195121151844536365697282035619507227238494415828142354268295050195101293247644044457267714935452707723243836958166570458923766194943739329318567831418083291367602614610628703776858094904109993034272453854415127335371407800891291417423473199819581953311554881626790599515656538382928587235599730899217327975918421664202906795230685640597210322674275525454392606193005351353121325240801341129111396762030413616120113277356128432334929643219670987389108486144' ) ; test( macro , '22' , '5678' , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; test( macro , '-22' , '5678' , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; +test( macro , '24' , '0' , '1' ) ; +test( macro , '-24' , '0' , '1' ) ; test( macro , '24' , '1' , '24' ) ; test( macro , '-24' , '1' , '-24' ) ; test( macro , '24' , '3' , '13824' ) ; @@ -204,6 +233,8 @@ test( macro , '24' , '1234' , '1515906000734253870474490728382017379237905456227 test( macro , '-24' , '1234' , '151590600073425387047449072838201737923790545622778515405542489295365280374802003092345748753681766769342781749881287249346464958055559009581857595198530089819230481306713155507019243375785757736393010981297487306518434496622971579086045332205893329146303230768285811255525374621247345141815714309058936253285898983419720608226966436915189967268919455309262250618242751360361248909034678867178267283386443504378478143195886936482599662011569578168577981039494263767900563281750273077550310292671674973097829744745890473331477918697103083690536733167341918362953786259364594330084180149751256516756030378850936663791973239733978417672189517102102223884258181339830461602957890003315317105400603981501400219540598427784828262715802695138377182060865841593833485720205274139142676664443049548450410277812263367703519777502927932788452627831274636998616672291216489574557549335055172197580577132711118453026428882649878235139444805201982069512799047951007377619920034219848761549071361411729427628794049204602980944425540332659900016630759739316868023749785700349807321646264995322781924302276013058208345925931493883895500465669887594678839788578637461303074752727476500990640364376722701859400316730559885693050235239674548455869510362677791910042980988146640583541719495331021584874341075294784062883967560447377347188388603280434006674600263225696860648015867438392697049466565415507219522458255386701717251429282388492292922044650917640291089769306296653188826596134691225361787940784064160312363042310597352769798472903809450672123731170381463659456013676278088123310449702495131987916252551416683646406232220563855513976356100126013273624446723135664155744771247145879322648352616000381514511103819776' ) ; test( macro , '24' , '5678' , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; test( macro , '-24' , '5678' , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; +test( macro , '27' , '0' , '1' ) ; +test( macro , '-27' , '0' , '1' ) ; test( macro , '27' , '1' , '27' ) ; test( macro , '-27' , '1' , '-27' ) ; test( macro , '27' , '3' , '19683' ) ; @@ -228,6 +259,8 @@ test( macro , '27' , '1234' , '2008560752099022121998112234985163294010191532943 test( macro , '-27' , '1234' , '200856075209902212199811223498516329401019153294330654484899457135661710831649025094793443576863417869675999053574959337346792532217485737202817800641723197630343724422691567676966750017719674361721564299756255063995170624987815873886816573528036690980712399472082918987467608319915320632750007215671073941033733822406638067457070592416925055525002249965214978226439419675794443664397992725836030753072150525500182271105668883387299438014566998450801673929744863349108063057027323538841038850392906331064754828529624866950550712400849201192591205142296901842010465055290151680972126095024443830456846851602321575873316021498267598562024770678289890230706320997870461736064158216930272006483331205888383426585499224333788304253250735446206878459830691428518801804316734865056012563110060177249063533223360212951908142458456167777780005320459640618276526423350311574957115723697862633038912990076590485058168720523332363832907739630745212612829631298739740918292687323963984732777515115303964140679392026532299969353302111690876222512591852054954749110470134966527453125805201071472068728012702260328777663337721407575454838256471452852284288283640249611394712320213997254539391537655386427263371372214172403860536953046790124191276197581019979325589039334200287751090718265018203205058843589368322867283544158866611521312017186795565242663733214746314148048347376472660469372081324221562030477828367398702782252799482995882978202357840004609118497407774448098166472475681019210778338607385302368427582889110199771043940039384173696648402793417875142304690934448344767850874922126620454594771669567183452729544713864889437820573063999170931037181075406666631149358312284169719891882097692840499902508546688352472767932029187479332141883194288344509584921993462900826009' ) ; test( macro , '27' , '5678' , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; test( macro , '-27' , '5678' , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; +test( macro , '29' , '0' , '1' ) ; +test( macro , '-29' , '0' , '1' ) ; test( macro , '29' , '1' , '29' ) ; test( macro , '-29' , '1' , '-29' ) ; test( macro , '29' , '3' , '24389' ) ; @@ -252,6 +285,8 @@ test( macro , '29' , '1234' , '3973099188049527243220647139187797180754267362795 test( macro , '-29' , '1234' , '39730991880495272432206471391877971807542673627957704904437675569298014672895070646102535214916047201597057604326381566232240717146352905189648219707403914660579022999012335291748319902460223265040313524900417222861808879210656981706108411235266301032093577572784389639719581120084786412413811442838338528471340965314240553665532845900842671741344271394471188943084404951380820901385463995110598814337441546368977234557474886215832235597884716646333931698424620615636355660537976497375196427830792301269566792792820200233670131878651690073642956396203530193828971438659013332283684624052196883142348635262157010483447752926525087705971032741588045925402251432696384942322183761498083408303101185212952621515583790502916056759732756688326445700770330618736098784570958650303610518453345373695638406312777059006873348441083653408306117070042611172352888144271588938812215283718988243964723451182501170569555882799635882695185231569905013697274942621016347442475467611094595589653640159813052986283489436916917813443702411392363491760078918071760360736064794346216924583036877713278321020682861527277057026346194702327617123158348328127954077761730411509703210527413729724018291740451232173623681566068132712321584183435235162559116277847790802991789615957113420980884848226115467550693444248836097094675037594634337127844160706154634179432597281415179294940602829040686835658254209377758530578171235783275715264069690583402743872874027236142735859680441203304209066670057316622505879861269271750030338720992453155828397426773289742123912597304182933866285890213055204261259697174309425441282464103760493735120470209861686631467978789655753554085703565573238818516254588594497513866508088253727621898347478665593386957598553232780662697618992458924510409036459946339696264729231292522628108751878543189439881' ) ; test( macro , '29' , '5678' , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; test( macro , '-29' , '5678' , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; +test( macro , '1234' , '0' , '1' ) ; +test( macro , '-1234' , '0' , '1' ) ; test( macro , '1234' , '1' , '1234' ) ; test( macro , '-1234' , '1' , '-1234' ) ; test( macro , '1234' , '3' , '1879080904' ) ; @@ -276,6 +311,8 @@ test( macro , '1234' , '1234' , '48184467781382543701667186039468406661059770237 test( macro , '-1234' , '1234' , '48184467781382543701667186039468406661059770237590274727670474872867568934066212120125133953550629961484891523453397766904292741725027019645437267985042784717562212455213265145073576158446772320656790521515384533153285495122560467130551068937365382642309092956110550380937116582823950116105467284919886128590021120491211422848352480419801389040432671756358444906225483817656922238136306002774235317628882806945193646888148396110892049431698226720231373322565553173892155104287328274243305595665720786784052656812367125148945799485499060066329553808509237311004983159894774937428752149540862686417306258598574741354798734543908917749037010338607293558391168741173229347205324015819180886782731783732875096308025479318621477536729557178851277749719374746640105570680704597488214460168162719035143192317718562628271959732323123847141889566569180545843169342410738692059982444746465750802950208574020617939255322870389259522352007286309084437654560750826135123276437360339867137662914521505757477954199067061537563338324827971696801982963501680500285473348151566773437596060788388816834765832275133438433921225741018069257650081651893412763515411183995641907421720698187041665296617342826301233824768831086783439617690340317902242011073693697825044232174730876417203502412742085342749470261962000902738749779130464597185957223365845266728739264096596554562810900489160285087089151363421121896616575007056439552166409310603897415780357105218172824045265515881762471530724320743935876223471758489130857861949736325801719247163392163145092104862730777665632878101469684676983177748845758819134783307275384116307332565581471205450219638137864387568253396048525319846029722597087368081615296780675739066314774724547006391416740049175425483980982557830287877118477623151223431159832554386188341940675670910313367805899112248803570997473057794418174867654496284922646065073429519234590181376956226715629044946363751414558194273837719521633486883608951520130473135848525228767697904589545099613408858934772678955107374792767376297292404355699412788887158297703071562694349633862471115563026643188726923335031942038276485070702440112289573556176109970627523424440589934713944485023114357294128614721641112627517540349238220184422744440362721622786094864017694819354467741507712876404983391152695521440373975295468154208059821687654408426427370963930322531227395895396783921477437273314199002421808939747302217153865116186806351980760710239964563379901328372415061933640351961853616394184876278706277214297206989695471340253866298118966493903627998818702216683968716037963198654625001668768390791943686432733286824675468274040171973201059002888713965690564527215419345100503188258777506372065686193271207542007415422109631813074486204833751677472525228744950194297089998305021078379670692156515896561318156670094486647187285361909788624195866103332184213842805429511053631902833667630273693526699848894312061513323511126288640008264849029913769883352116160378319937025276742846457501369721989078408607355941517261584972558483819760496804231338012065441081939772196754109683768808242484290927174759258520839532703010720373548957783991479615682174614219692539567777715560109326389875468292301222743028820913581258063284673412787274389056140124677069653486630962880192937633527058165237839406307326482619493415666561288774929091975803346338652727476500670928651812154306332363280019281880148780695662032811060669099701522746512853264775139655489705043573689252437465482977809592752059272522878781208311791893662451561020284928906469358115442883064671084339186725298116883304622860824362268174217031187839248915211550033719913619980315078125050194505282396757349145204835262063407488072671571413182055277457862261818131387963934879102237121895980689553963436483304289698371277085427432858554859126640569432899045006806292448711540736' ) ; test( macro , '1234' , '5678' , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; test( macro , '-1234' , '5678' , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; +test( macro , '5678' , '0' , '1' ) ; +test( macro , '-5678' , '0' , '1' ) ; test( macro , '5678' , '1' , '5678' ) ; test( macro , '-5678' , '1' , '-5678' ) ; test( macro , '5678' , '3' , '183056925752' ) ; @@ -300,3 +337,133 @@ test( macro , '5678' , '1234' , '47545457014339923317335752560994105332284586704 test( macro , '-5678' , '1234' , '4754545701433992331733575256099410533228458670475892396381228147140277468895263961376711046431196278059194371543633511738104729515132046647921588948673317858795453334016910038267103044330714716949310557017200499682459199588937173529096934288020024176158267550101701080481254770583881162470132740630857097654899879616282728381172344973405997803534651364288959497452319805334849653833958710102843349430647090705281620494871877782238874887814289734228053896202806354761750369269951229593313010945689761891211258688068066696055485242378613245933537337160634515912577045202472450817451849184207035648874665441200090642213657945355196460821766460825032224534602658525599188179237649065062512691280473121441573617950552334838912754947407978233727886935344811884839323223019614920728343603125258018137019905454492748785128237691020015003872956540230098415206613398448533046207656300960598259213003433022409251838940742693047445967307981951797528065313733200257272599665561813580891071207079215211460876715623293069910550166302272098118272527916433819800298828239405657658438060618142659814207004518209034153803725735869682967280748736992669014651682583009724296577174387664968207473327117061022862388179179805519732871243762549484990925427400006876201981312808033770504367669331073626566876134508721159965417268468228608040850320762590581251984432320891961775899262667965048729940448530756142869126858563901357526390190162408750825956708618281237598759925725241049426257439561800035105159165326290183277107179838103459135561724394264803171431808241820795445711863608586766345039254614846933931024903619561176580056139441625967323631797367126958482941668050957659192162167276197457147030284596116968435975482030070191450200681573163807130339270972064786812978664842441338738386157257657806440916739246453417871760401803525801345778950479694386503103948471086023573572269171237514322085437996393254976781298685048789580780175371793986673922336623057771141110132765327451487041405878107213683772036140143582620048289665134817805568670112167960808287343393646995734701543886022122701209620784296421140764622633595229564449908877625079263109689514631383456799358203288875405982309838110130925886572530681702118654886611249141922200019882428708452245424153239056842500484262106739374720265689912446227419480220842375352629558959175152376134258348738676918576054510702773097564166661175972907344227049028399511499148144890097723715043579731339916022734957419253364608790001408119360562088903660541256901511777417919298919881207626846049705641631114520861910821360106286185700362951871430037373045323853881352479438655780016733428623128344067196426832063335414492412985195862227411532910672295727557475523062269393814283457830004423808768415796967148960731363753261748078031957490406872476713147808646830842062710450030612153443209478241811514340917541321810139916689385477670593954065087892241850261558516392240563145569557862995904133784803099322335109965684092492599160998743520079066871458347318820041040608736708265400811003296782209446700589963177364290058854636845629046307738816633516835431430230362482024920978970474394893679522412954011767859444487351352199067658529260874277691008237384360434306282016514094096768013798147480740509779810560544648455485790268334288880803641971210749525943040368705400269755514646235977621926612279423197054873015209023113609804623745158430744774035859946298137588499302254901538876084525827492824031763727264344218393017853529749735850655796213422695465000659399958563228524294668421953057407346976847682240743601105444694630169017375480155130799595124045461115669497563631224904361329523188370665305938674437690787549882389569867694166936751165216920602732743849889023149711513126398908342104741198863408830097845137505662663458382001009103659839197477448289276824608807661040318889081157573844237090631229284090854577084517143322570965548490565414070261786860900921959546383612702905328456128108405235351119788158687215861758441073018835708344133679077552976919500888460205455433542878586438605353256917018782886441646030034030257088489389720348078103255876838236261154196475758170227577027093408115125958792540599677335099871170489525421378579051844293126380522395565389230525206095904182031294100225265853213565367785174160416143450757600749410617414444540260518189203196008117912073471241250825794798475803391996546423777135418649913067759391180278825562475480988246874450672101428462254341590331425352560400400946802179861512954182324631693500044001899557332925974569520166679673993884049720918350709799494693984974735913494505510527664100089926593875304828031765284659403018738108240944539887468544' ) ; test( macro , '5678' , '5678' , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; test( macro , '-5678' , '5678' , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; +test( macro , '94906265' , '0' , '1' ) ; +test( macro , '-94906265' , '0' , '1' ) ; +test( macro , '94906265' , '1' , '94906265' ) ; +test( macro , '-94906265' , '1' , '-94906265' ) ; +test( macro , '94906265' , '3' , '854839628132734960159625' ) ; +test( macro , '-94906265' , '3' , '-854839628132734960159625' ) ; +test( macro , '94906265' , '7' , '69352828108196345571302714548224840368303639678393515625' ) ; +test( macro , '-94906265' , '7' , '-69352828108196345571302714548224840368303639678393515625' ) ; +test( macro , '94906265' , '9' , '624674733432656449761568667443804634246952025778040170044028517447265625' ) ; +test( macro , '-94906265' , '9' , '-624674733432656449761568667443804634246952025778040170044028517447265625' ) ; +test( macro , '94906265' , '11' , '5626569719411962723650415167546096949953068311825856718044176845859638898840742041015625' ) ; +test( macro , '-94906265' , '11' , '-5626569719411962723650415167546096949953068311825856718044176845859638898840742041015625' ) ; +test( macro , '94906265' , '17' , '4111620266471980471028580099675545097434173613002314680540141671482471036233068045322249236629608058990135835756014486176615142822265625' ) ; +test( macro , '-94906265' , '17' , '-4111620266471980471028580099675545097434173613002314680540141671482471036233068045322249236629608058990135835756014486176615142822265625' ) ; +test( macro , '94906265' , '22' , '31658286807403612933666095532663829606917007814138968876951811776281483501242674522295256018683450991389450689602591230724763634593416216499485344394982531093618869781494140625' ) ; +test( macro , '-94906265' , '22' , '31658286807403612933666095532663829606917007814138968876951811776281483501242674522295256018683450991389450689602591230724763634593416216499485344394982531093618869781494140625' ) ; +test( macro , '94906265' , '24' , '285152493586807715635778250040629704568534899170608577332704172832192470586911307092645490980725710064416470215223489215551076054022142237008690911252732817102771522852071313917636871337890625' ) ; +test( macro , '-94906265' , '24' , '285152493586807715635778250040629704568534899170608577332704172832192470586911307092645490980725710064416470215223489215551076054022142237008690911252732817102771522852071313917636871337890625' ) ; +test( macro , '94906265' , '27' , '243759651578868798217281108206623463735490359085472358472465213305940907210363261308064405033766654095672155830024986524275053959211648897667524575409210697695532573441399310923762601838833141075350344181060791015625' ) ; +test( macro , '-94906265' , '27' , '-243759651578868798217281108206623463735490359085472358472465213305940907210363261308064405033766654095672155830024986524275053959211648897667524575409210697695532573441399310923762601838833141075350344181060791015625' ) ; +test( macro , '94906265' , '29' , '2195591723153842833976375183141740537336638451104209452487233269978099251091719201006853085913307473345723364352547986672429911300801268569150014616303465779606927933392093058172884011727748376587183753730532924272119998931884765625' ) ; +test( macro , '-94906265' , '29' , '-2195591723153842833976375183141740537336638451104209452487233269978099251091719201006853085913307473345723364352547986672429911300801268569150014616303465779606927933392093058172884011727748376587183753730532924272119998931884765625' ) ; +test( macro , '94906265' , '1234' , '9591459179410241572856537719704118795351000902900562305249195472196195265555833412754864166507031793587379195925582803572210371959180740848015702606653712794907807842820287303844298057315437721729780551771436713566743567210455419724786856660298500086372804403816338340320302120440930931829619194880300084268951845577897562834735753784665609019198203233048867661024100257335806608791247129540791927592412584156372409767363191327851323280497596039938628887351085641878361348960836551885434816719856675096140100735098153982014533453294086408481103402371073765234498437942986299185804946033932203517281211025355740639164406513819178508651837986562373156333090579411143890235647767492144926855911961561170349672014614629827840596629153866370535524382716502377298033129875940828099612289849768956366119182226196623644421289199029543705885301848203842046242909504136594099983847607871992398930583777526005880060061677287301121641838813359760623338793918913138129119762743481238358717117820874141719166872107856435512751028932079558518104984922747527693664219154086216948208341876460165162264778277923815846538502672245752434229656583577521062954818225701253649577703058999328419908839977797748333637247291496547242568819156256380939652968563081087936133413669763802314091980457139588435626848957026334101428382680905361934063504702859864753961075493938097121116859339830550708349481985667854659071598612299339127950437953067708898374986402646559951120320721708316727933224792697639478435468027888366917714894730680032991635257046230944591272236530617356025218569172482915774764506872033088367335012521246964352262715392596661114331434581419942425209861303052103159737141838118887593079659533118979010073029109419153504531772178157803880524448253232397504700393645418278010150165092760716226444484244727105637368962191673677518823763517102430372508776552119355215943188635023271972752127662635880598372673204814450697064559754199549908021939030958872733672399702043041508144639801430320943357267841707000400404222832758589098605032942287405982133506381460750004675066342262085479385836480909763864598878090750329455982787911478900279885781537417672577623574196534254896533751763619748632866305445903742663767222380368598056346743790273546285474116657619344057407744566063285106302957424998222958334563469530826042006900334894940507739429822757677948670771646446401475234418995859933358243130008180759536136782698587200342015804405083654362794667043715432498830242795494530307701824122299526072682392416883591382466507093702351999216857924284228844163937090047387165802061654658731296376218866164135568360515357769852411309461140876077518669664598359667926801346716090206666283623307095613238020208838579994957805916629319170228853022067994759954669755848747912031498150020489023940497893018969218903299457329957933615236619153547835202992956280530580346188048475327939781542919126773872016959398231243998998083738131590171425213432398708470769525054179511894591276471224027298513771970571872065972609539084087063890507232242147976054307202299424358550001984668194552970122408292816135793651096260341402739670890290539634652749733051936121647220510837557946150318744548419221954103573224004509428899118772854490532692636349984796523606799588426404592878065079890048662999499258496147403823670334749053718615662500854192465254630734735470592657444348319716921656900540143255754066981370219643196580126846207577613002079274870394367728741824995134268682147619610980271981665849912854000586266885293690909808590352073959622797877167704956570701109840686451917212334062294475098780452199147749227206592489248155417621634742859122288908494376684326737988496746942171234696512068034353612026733019551888985186714851252843134718646972681183302261929938130968961934184204726044095752598480264969769942628031493505879722845317398404404766136527772383991566308125162547193990579656303403990650778044081542434937085597660623254423002156634083383451136994840415138061841621305110130354721521708626026722411562666098237182221903896143296122843453808861853136066713710878415727201422848026825971083548440323207872629926360833682353471434194454802487028406023157541739114399209811757523364508775327465775193793901522174053677751397308082689295814009742424096663245256371127275554813138918104588578788434671001200499772731239526998926007344889536787546023840884563161206866436260069860416345332711835403868298476116559997395850081711369707151087016769352210205207119306587204232943367376612943973885522556573557976798795448483847878609300730594170921845018856616294672752170650749875613401771999207041914676357273072487369912122604321957851850328366064475250473555501861497817846228892630981428024352453509525341771499168825703052936994035249193004718133969293658358477955548441418729299358481051187146133695328375103255617003032549133648324739613350912817202951672035960629467437857895034783268578652695648468049772851048371268571371710174944747089771007951326599571977185536818992501092538130016192595691688560212821744518752775149044137729808714578718821728891394252836114476272385593027217713947689935751224213096850232388887355044336182239209673510124360918794427492709842501901193642964413018899346419597569212619882459708253025895167986898921776318809624757908047351541616537635979411987192357052180741057545474523286703219489442558181392097429272725321723344296968214353129336168551540947872360172324488054726452312277329954745258701008482980205872562874886601633986054729698061958995727041136491083854134975456698587824863774357915870320563386104439619169757774004947293513137570115484537992524054976775958147916672384240363706932507971190885901149565024226836664882553925400415432577255921802822503960734813348624446723667186940497582623354541377084135798028997689173921671637556307023496802420683015459505952557023291016881953450025241190194039097347605093809834451182579729476067653116147891893076896501563815659745545701931892765370873530751133774088803218658236918753605920897832799802629346000755537711655733935247075071309299891485974004737759699085619503402054651496887954393777157718744353085477058515846914858988677376890749563402243352948882704897037289535812374920703566055234002365908807572825594074935358170453507404950430786601077339828001741772715701388696819944246064281597875135795560927360428844682508435674499423211270261087659836015113712490214244874535278179921239117786846524745214093518055485811573243729006472733809020482957747407185981860374708684286717665404920163892211997886941891508113407401561122378383848947830545283520019375170240362580261476918548352375204827546060332812320537368384369528982640547689242779683051606032122941971305898624339279930653319150270488626943146630086882906036938913305489203172190549402764186077691788746463406547058650845093618234570304408010293714213219535645841856212002220491279122623456707919822267373205778074418458267976061672627895374645491069976169809979589349440103658324875263502040561446885715685084316663246874940845565163621245764201813071916375863674116631380809138742411055687043053580097915072331808364438230302858541704366985190788328281686095477247372106110289131615169926634773044198632401845844609052201843461377057755829111540009963815904567488874475681740338761441160651590356825801263089126426348110434911655130477948801617551850940401735494663309897855071592787594192797472071274201046444611408640440198255469724942753747645197415207441629405487586039283351014842032997658344919969847875361248802719615209204137908572720005625473028253292534507900617109339302886404737678812367649587493463409620386788766525441243443799986362150864341695101086395523314350910622578929210926494667836577247786854052224561095458041243543570729768588208531982249642560145100850197699673538324491374450242541091046027877347664044916635890341954130056571906109165828535910311660771647040322593424704180434383930722874810909784652987805377576186746140110566133453382033674431223623092747739626762801126711107898439074620801128156500389898936996902615531151609058915444466355837620116136849729671236565382836790985391828355289305589043017696181139493265426855262772003107393380496127707409944678929356424852897833059161296871451390447310222755068231356889186366469835372570926617460311594138251684705497261398939078673207680734548345027894574941971300910638001809666450203958374908000409224916792685389473093574017125721717855356592625547252288452987636361999067948204782699004847095167966877114318996122727724865218771091724949902821421297230591814912641664070615519836632113388811666884300494853790570587470323050363662041264565613231275086236122271260746561199518073931788593225451290704917920481617412178007269106795348325460845539920221204370405830516943074642362921654055465455434800928688359132339475448945798039732615360945805966700833166246956944923319302325595161448667877444353826406797662051236873687719391027503115161380602709771074129428752412878936468150571495391787113477904397126993393779245665340705023574594518096866873547398021846631398029079316126818030712951745225590953502758227266035049083842517044023925565469150691931514472336278473983933149135274596021969827799475964078993259558154187436736832028197629659375815060480641327952346293832946391116546119290464690718192565154980905423079687235355361273794723342189390564486895833368653165830116560978445940636491307093493704382996066787778813694371282496364727933852217652979786611217060627813202623645589310972893162822106395194215667804608020963575035872246400412133950584855358933001394534546590988260881555615516326633872233229193801821674081770373019020873454877625370262143702522777839078500945310035409751056192714470577586167708182037483154162989501269631312341365910403419220972928202706029721636727127333412883747829822332644925037811467375511290618736599996846385043905631496985453310344382771290838718414306640625' ) ; +test( macro , '-94906265' , '1234' , '9591459179410241572856537719704118795351000902900562305249195472196195265555833412754864166507031793587379195925582803572210371959180740848015702606653712794907807842820287303844298057315437721729780551771436713566743567210455419724786856660298500086372804403816338340320302120440930931829619194880300084268951845577897562834735753784665609019198203233048867661024100257335806608791247129540791927592412584156372409767363191327851323280497596039938628887351085641878361348960836551885434816719856675096140100735098153982014533453294086408481103402371073765234498437942986299185804946033932203517281211025355740639164406513819178508651837986562373156333090579411143890235647767492144926855911961561170349672014614629827840596629153866370535524382716502377298033129875940828099612289849768956366119182226196623644421289199029543705885301848203842046242909504136594099983847607871992398930583777526005880060061677287301121641838813359760623338793918913138129119762743481238358717117820874141719166872107856435512751028932079558518104984922747527693664219154086216948208341876460165162264778277923815846538502672245752434229656583577521062954818225701253649577703058999328419908839977797748333637247291496547242568819156256380939652968563081087936133413669763802314091980457139588435626848957026334101428382680905361934063504702859864753961075493938097121116859339830550708349481985667854659071598612299339127950437953067708898374986402646559951120320721708316727933224792697639478435468027888366917714894730680032991635257046230944591272236530617356025218569172482915774764506872033088367335012521246964352262715392596661114331434581419942425209861303052103159737141838118887593079659533118979010073029109419153504531772178157803880524448253232397504700393645418278010150165092760716226444484244727105637368962191673677518823763517102430372508776552119355215943188635023271972752127662635880598372673204814450697064559754199549908021939030958872733672399702043041508144639801430320943357267841707000400404222832758589098605032942287405982133506381460750004675066342262085479385836480909763864598878090750329455982787911478900279885781537417672577623574196534254896533751763619748632866305445903742663767222380368598056346743790273546285474116657619344057407744566063285106302957424998222958334563469530826042006900334894940507739429822757677948670771646446401475234418995859933358243130008180759536136782698587200342015804405083654362794667043715432498830242795494530307701824122299526072682392416883591382466507093702351999216857924284228844163937090047387165802061654658731296376218866164135568360515357769852411309461140876077518669664598359667926801346716090206666283623307095613238020208838579994957805916629319170228853022067994759954669755848747912031498150020489023940497893018969218903299457329957933615236619153547835202992956280530580346188048475327939781542919126773872016959398231243998998083738131590171425213432398708470769525054179511894591276471224027298513771970571872065972609539084087063890507232242147976054307202299424358550001984668194552970122408292816135793651096260341402739670890290539634652749733051936121647220510837557946150318744548419221954103573224004509428899118772854490532692636349984796523606799588426404592878065079890048662999499258496147403823670334749053718615662500854192465254630734735470592657444348319716921656900540143255754066981370219643196580126846207577613002079274870394367728741824995134268682147619610980271981665849912854000586266885293690909808590352073959622797877167704956570701109840686451917212334062294475098780452199147749227206592489248155417621634742859122288908494376684326737988496746942171234696512068034353612026733019551888985186714851252843134718646972681183302261929938130968961934184204726044095752598480264969769942628031493505879722845317398404404766136527772383991566308125162547193990579656303403990650778044081542434937085597660623254423002156634083383451136994840415138061841621305110130354721521708626026722411562666098237182221903896143296122843453808861853136066713710878415727201422848026825971083548440323207872629926360833682353471434194454802487028406023157541739114399209811757523364508775327465775193793901522174053677751397308082689295814009742424096663245256371127275554813138918104588578788434671001200499772731239526998926007344889536787546023840884563161206866436260069860416345332711835403868298476116559997395850081711369707151087016769352210205207119306587204232943367376612943973885522556573557976798795448483847878609300730594170921845018856616294672752170650749875613401771999207041914676357273072487369912122604321957851850328366064475250473555501861497817846228892630981428024352453509525341771499168825703052936994035249193004718133969293658358477955548441418729299358481051187146133695328375103255617003032549133648324739613350912817202951672035960629467437857895034783268578652695648468049772851048371268571371710174944747089771007951326599571977185536818992501092538130016192595691688560212821744518752775149044137729808714578718821728891394252836114476272385593027217713947689935751224213096850232388887355044336182239209673510124360918794427492709842501901193642964413018899346419597569212619882459708253025895167986898921776318809624757908047351541616537635979411987192357052180741057545474523286703219489442558181392097429272725321723344296968214353129336168551540947872360172324488054726452312277329954745258701008482980205872562874886601633986054729698061958995727041136491083854134975456698587824863774357915870320563386104439619169757774004947293513137570115484537992524054976775958147916672384240363706932507971190885901149565024226836664882553925400415432577255921802822503960734813348624446723667186940497582623354541377084135798028997689173921671637556307023496802420683015459505952557023291016881953450025241190194039097347605093809834451182579729476067653116147891893076896501563815659745545701931892765370873530751133774088803218658236918753605920897832799802629346000755537711655733935247075071309299891485974004737759699085619503402054651496887954393777157718744353085477058515846914858988677376890749563402243352948882704897037289535812374920703566055234002365908807572825594074935358170453507404950430786601077339828001741772715701388696819944246064281597875135795560927360428844682508435674499423211270261087659836015113712490214244874535278179921239117786846524745214093518055485811573243729006472733809020482957747407185981860374708684286717665404920163892211997886941891508113407401561122378383848947830545283520019375170240362580261476918548352375204827546060332812320537368384369528982640547689242779683051606032122941971305898624339279930653319150270488626943146630086882906036938913305489203172190549402764186077691788746463406547058650845093618234570304408010293714213219535645841856212002220491279122623456707919822267373205778074418458267976061672627895374645491069976169809979589349440103658324875263502040561446885715685084316663246874940845565163621245764201813071916375863674116631380809138742411055687043053580097915072331808364438230302858541704366985190788328281686095477247372106110289131615169926634773044198632401845844609052201843461377057755829111540009963815904567488874475681740338761441160651590356825801263089126426348110434911655130477948801617551850940401735494663309897855071592787594192797472071274201046444611408640440198255469724942753747645197415207441629405487586039283351014842032997658344919969847875361248802719615209204137908572720005625473028253292534507900617109339302886404737678812367649587493463409620386788766525441243443799986362150864341695101086395523314350910622578929210926494667836577247786854052224561095458041243543570729768588208531982249642560145100850197699673538324491374450242541091046027877347664044916635890341954130056571906109165828535910311660771647040322593424704180434383930722874810909784652987805377576186746140110566133453382033674431223623092747739626762801126711107898439074620801128156500389898936996902615531151609058915444466355837620116136849729671236565382836790985391828355289305589043017696181139493265426855262772003107393380496127707409944678929356424852897833059161296871451390447310222755068231356889186366469835372570926617460311594138251684705497261398939078673207680734548345027894574941971300910638001809666450203958374908000409224916792685389473093574017125721717855356592625547252288452987636361999067948204782699004847095167966877114318996122727724865218771091724949902821421297230591814912641664070615519836632113388811666884300494853790570587470323050363662041264565613231275086236122271260746561199518073931788593225451290704917920481617412178007269106795348325460845539920221204370405830516943074642362921654055465455434800928688359132339475448945798039732615360945805966700833166246956944923319302325595161448667877444353826406797662051236873687719391027503115161380602709771074129428752412878936468150571495391787113477904397126993393779245665340705023574594518096866873547398021846631398029079316126818030712951745225590953502758227266035049083842517044023925565469150691931514472336278473983933149135274596021969827799475964078993259558154187436736832028197629659375815060480641327952346293832946391116546119290464690718192565154980905423079687235355361273794723342189390564486895833368653165830116560978445940636491307093493704382996066787778813694371282496364727933852217652979786611217060627813202623645589310972893162822106395194215667804608020963575035872246400412133950584855358933001394534546590988260881555615516326633872233229193801821674081770373019020873454877625370262143702522777839078500945310035409751056192714470577586167708182037483154162989501269631312341365910403419220972928202706029721636727127333412883747829822332644925037811467375511290618736599996846385043905631496985453310344382771290838718414306640625' ) ; +test( macro , '94906265' , '5678' , '12032097777224921443610910803648284170512319198440026582654592944907996997711020183354851559738136209876116410482775406152550319519617501575389742141362538671375575270130368782344375460094542930957208982333657039900983512378934606414708547255120509688221248878365002162079958544994081468523927315675060726868126226367119441190130650764598697841259026377226201673036205220245238076301842775410518683141308488299366012792925609747073886802877596666532246689317196865573110094049146280756613633385237048709371024252858686340623252312452593430321228085552943679754605680459379364986804128577790131289118408139954294866373981926459619424848669839958145224015329056251464187884540803724925854941893314508739139448540059027532063346594260009340289063635135268446417517177773306225826478834782126901952841733199463653563757819068049198556549112038207670677005457584687670138285992773936407404706326519609992105860062869525897101616064153489988499260854115519937665672793315389915719723184695407552227493961904033933034506875702096849362495327673029771455889030501830242732676146364350412302869011748293967864940422889128153590781271839942018607109535085227963257602139998078826097049418704998656236212402366601095688523413673512998518901468183798514551196413118699461621524416262734189234150826938615238369409717915433788697444341087319545108423271713647606132458422133503476646278312763913773672381574955638642484777319177742615693192492030931928334799325795983171516582124249978689831869160939605527534908432774284025724078112334305143452973560047389979442428241832752514170684582991619064835042076127845136974614077376818874608487426791468373615242293672741372298898215088365221162041567250511944704729950839359617629579145185451647138688599424451528822613292149181525578785717464355469269950910358964367355548167095991226459148148416836033320461350750016925333661337306860380813570244138594176200254338594713997700943753269483275676699592254818599648860765855658967021173586910470760937291362350281087625944947663940083612371308499706464739236243824369828191050651890831355140821021009799707142643546563126154302728058269983835130462112445179485724829519948644797857100978445782729948146775639685486727347085571030457542493031359599157910012477405633462126888771916787753215333242607039830155744016882502462503818969602202111471162936075917294595421685134910453228619713406894527040532782467138493248067630974131210865224589283318665338359787682806475430520542164582197378961886474218909120025123091615456874986351962126541772414045818060094363742441442667036502961807091952360039303360580900852680604055434020409419268918051690557813552959236488040160958755768871367230392867382735702108578451240872919059355437258914588914059658578625910689412928981898994374868014765744048731178533977420205065542882559318334473630109661521143300821787590642741661630560532599207482636782848372575108230527673435955097474563225203600719908173095140979638933646119901238452049016502626977563080111918315881318986264803301054759949431314581482431408037019249299434256675011740150791380650719740873599060034519923061234283942527829654746500679243122868491752528092330799766780299772695603288900967560796775174207884494845966890228277702276659444815563795433225980503597587408498869891219703208161074827864088098815419234882655313426926283791847398673264577617151571464296912550417563804886979853576821080050211194779490844153380677685847777313137638651644748358202947322079765399238487437874318841114773978903668929164955398911903679705111008999142589544437065672589266355348348971511169575378316208327903577552525930641088538955350354489078111990562226354820551745938135022897672457837517586016736813649699772486263689086502957138019177196070312090344215367177632397930739405411088757771866673597796220471619637645139435250941374184393351858539017096692099099345257001920271362387534252371917508119267325168864330673891152067448719178429752412191066355929358566249659077077560550302293786857736765866388524626228805050725063109877803065961191644600499168820792325163292525536974162404755526606943846795314338495539699560103980570000575730832399241743616051296198894674663823826249501962992317559847798100096759179383956869860153118427566631515292600888345422893802197242997389457528273662177569851158066854725418877583679801690209473560655905719642363040982739123254770408905429249758124187443434793269173022194566001870880813212255626734666407333284872705324976206677741658696075649608364892807470963909485110281558432545948579534204538696827102504407100425376019173981304010256984425288381928914573699655169020850451341503052441205769215186509836760430481696523650279090720163816251521349287308560407457609483984181328774565719714613388489095110023571061353122279353104129328013968956403235071785261847838169630745374996406189906650415573552174116649660276541371408913476854939747876731425608814138059458169543823165972801614100937621904382981944188903180205906327482865751979701901540575440519486923023420935041930682172192953852334672415568738221940582193314983240970450000477463045431237229063460109818726294597730994303217381825651493935869034862652936559019431947352777726119926158367810617503147922958376143964979603245915631333786351234314954623412494887023938633377421208202061177648550247361016141144451615061150414512561947705053352442969412639758719469809823355676287459924284669684459858991524522914802929760964195910108664304507593383032621305399692953057899447189106733091012594841503936991785388985322660311685783354745007380474195833316048135155967714601451196311606046191001166178941116722830537202351353675803239601270737264305300314769429948779160815303098446558150519469320909471850141905795161388126098051093418801571231958217059570635407936987518675272606139316846781769414872368547904423404977322742616034539497477291204678516696339549373290014129953927115273383862176648175885100832898131993707682449845814289537783195056908822732162500604957529260337740262458814285530991622691309191620743536827546586516016261289544348330822509040619411107336690611176859744962777081961711988981244490119102057017123472693131597991997040909096393811129374410032160780720267920557429521283544362429347063129854641992658572996108093014481102752542992814642875292835964120599399273647779564854999067324549593959628020136971251523507807754590744694873740047390084491259174712701241947149566007259569113369875274948363558659130833317516389511341744440804095510223434955552652210614743910169826529392899468656662706962138458679700014949089569408033941330187462290588839847072683578505493439388126630655399425769894783841874574481277512426591408213810373551314332889400820073202400253692361444659207630759168415095760789533492551330583140574981012731074049549919118053417150217808638350432013305694321389747006470410615077305764765120127628910927114025496289209479659319746699938956841225054827585736797719039052465086433182830701745898467197621237268086386733129150280583409523728139312677689819712362202660229834226632997964115903142152545104059172086002463963414350578947905947216633376664142189791562053019113774134585010114509991806040543148515641482014416718677876276580431730562587541020555292496453826361453188845475398099905277525052773545411713921648813979140016300112385588170999474985918656553076765214200080620922916851475745553785133089372514034029601819219527045772849932738904614873836099307092123571006738447715320002736785859704861742282537734067792187177608073549859135742645615364728840961736910729008697313304738536298720611573424123582407824500642154138363464791319257510414579292323013964798548950290960997144513319241370751263381191179501838180558724038708020579905145157293231789686223459443044018289699299028761818401590134930047434655260646434988879638156693278024323812521554624956388982330136290167049424094118582772096018451809597401164846924711716262902829627380939680535156293471439360777268668365604921618839689307971611636791474486517596411076810461187507596434260046979222951771970881882637300844957670414379573068900594030059669462435172746064402491699639256585470646371028345111692685583568972301562562922256758180181085480072911408202795425250027969499463641174613001079713276428421215191667447359883645715478755796737199406110184987838747951054762875131236948669154666701738693610353768722184367702584486223362096024384484603104446694719810676365358898796150078397378880308527506601302713337537470154717940902510142689198467640659012705019749229659196945434251394512811731664749976526521575163913656404283679160697284832403491752877439284481271499113105959231314317691378767826586965558827309006336474296703042302766970494721137069514776117071812137188441976088074396467632977148030639633204112209971813503021630520258087179296520213138286076436343573116739144719310772751735156402034501606390456169140121695688607125183103173251813914671347610021351582630598950972263101156473693547645926791369585126525848123770842541512577658666859445930626122772214914414428878443618845511938720224570647898061530301191130932770667765716795587750061205748309356694807519519675049350933068580375053894078242210199468520630330003161545121375796842051755736417199147757963284334866394276249640731433231049313954526161951624809572619652276996303120934045809848958441871638077879356764855185283339151315501229746330405881302263457753882789573262935098772141915955008754732738429440981828735729272802882701434622480077709131642461504208927055033641377102447767720176633847373823944955329314383832782143590012811927685177026789234911929577093962457115800486427160323294733691288587100842884523422947373759687195747031917611825381748929965338560830322621555697476051991779833983757024224308964473525520615691348057039080995096707558993173247103410555911126189269896588730810492029064501420933855518163570985872578414596537490581577386809453787410688705142748561393081836124251051324584698861388478139283569598076892767321443716553246412277259380509438802329441648705346383613734547877712888220362688053129344779935227318331396329401655637306388721745349393876059195313192731747216875912473534083064724394534423226971274516443125664390773514132844684527673669092932331255685956744208760893026251638308006285281531125557486527757107669977234989257848144696133615593927212707645061711788280447683309281341206400131653863420785992756287508115967050826182726890127091142835164557166691300678394990747493429085386293564966123136506231068567056989317384966475475729360339009395818317246772969137113875763412531168727939516546447462848160915288609593976373135718583011204195966912413852164206268427095555948610761307815791560355585910426147327321102341134387395444132445427019438961472388259276810758042673037214059651545259592406090068506838010231567454628094637254355973489738412673187077409391969169545123360596500128359039361514821593508030148522205228449973734972174002553108195263247639174438853119252163722614381071194775578403064409455019374052283926424489955638366392986417357495741112108742236903909428659619606212619900649574073585165166583918297998340673134762427650800452972036533098907970092878703482852833490281729498858731156264911226877099786698157523214591321994816532369903053664184550576973511700913443461257437675437472098084407017674888009625137498476466436818879720524380130001916537522732804698998210196055682123318139008022653778279715652658727340997456249218032227963658719808122825441145385176983894549215846317551213773007016356738334267963377888011544300061222386574258747191915588698617637837212717814756142051324008302080298650994166585880612515919258375738246207644772437177730335392539644865639849308897774064728887770437363216880581815066468852825832858170229658070845319130874032026316629150366399827042959910139581792401984719737440786491444999030986092724355755641888514009652129027999591099530921894279904701093752999885648973445224343373762636465568559928662660225367743242647517117639887521310379396989258168883666755250191993348321142152864927369234668649063028652063843003316973499048911633219208658516326528768740257621395512872408369502229664467552427061041482906643131699241509502631730714053932028098939427452444970068248194791910834306048571684029297039763506306003677920029786132935369270257069918171451215129218456327859444234926254208150987962386182798994154872735035689186439260489113584084457851762452138367055101379588122088844841306204874692945577566193189114109700874804492781437652540985226374341144719703543609354328682925954034266359991157018716516446223344660092640717378693207071014181491854379467954573981289282127187230877577110472130570576015105977305257910229508244095738723967730842098391729083715169089672956523592451123266861612656114937473953741130882127624277059388150081629717639957137442000516378123556553332349275408205751508548209994904127879234614825403357223962515911129518982040378620086754855361296612014949915205044289352069213501405997863521354165348782511867122622716426639791821261702368775506733831743186020155130943146663966007407244597917005719991265853620211871215693990090865326620251912533146988791177682866417571901522812420520954626741756852429297080414669100168753560040054760117697607946028484195290870973497362267381612404260749108299672450420697873731172732775674054385367218094949835013674973757423265370251319346466334678075474375906897432558238767579231146265140826352088422254545690686302743333477665277149035167938674924154842983621768748297426546172809743534122395481353193555875026625899972752500022321576082052828487883396792123138094495203111492864041134795761256726095663499686254762052539889279642048007404275482585612511343844033096850528226343612783861307535354140366802884442274775822100977205037665851810599890007341178775130240696632601594694061697231625625860004620538862779963203630814410243245714819549757828073441407122131050844039240224163642095196215306864657309686247074858678000635402415836405930550459058799511632845758556493533762990549187485016639012256731683580040073341731704082434264243561194791703596206015014846543656970640029940075455836423615054869940691591288967540111562931377745992026685841553681405592390900507543705586848434089001303884903488059141717942395691356277350339460187131843419289217935265295704356916529054605633813938893737767409366779159372882254232836716324580262988115146013874569597106960026911351914668502679283163961953086528727793944040518851106607715147835491925402383222147418855338357535739845538867786357060338435261036202368258020761466669889670691822601560184917436779215254347489960930087319530836518444337988344598187203191595434829132950413104197804486083026745302512606864460474736420264409880729091060010368627194325379608471121667642965001108323387523924855835054547593985702842329940726838791815501738849577938132081507924442944174718597397264098866829822238109143654804816673202408821440775080110551433710513005759571403757096182158076893681914376156120366821040079723970732533775297717113208811739667056486197044324270922989003211680035846379754027311741122863788335461268176688251174205660568758427931660106752538935307255339039355388757057375250425837093302168454705863145996845095042151313295262463259661279787231685169235050323016586688299833499115629856113737828434665438782484735547300584910063985708776012855041724554864958256185127598519785482694466456563490174364083687348114832431925384869094951858531131186801480404938023454443571034693096579794784282688250620550447004592047288521549204059159028509660096017875307950532319742036173203952041761503785819360687983493313089577551873561446412395575710594370027055187478904534143877344909963663735297933632031693194441131986356078620539658905801102236737444661108267332204176723242428802368200731035237320543765666828751910067807455585241166705139054718355894926417783921107593070742530185305927934025258466866218767376534792597033669822057078961298957496217109258353525748391156704355202862658731864850654926248935721796777991022299873209352867958121188810265931762818554937603100731645526362256769968645627563740131303913187747664074382451124596816950157537126085105444310397381169417181279755364952019062060800318321532221104576465370046063753472086774044100444414676557036622159972786835290325849755928597463426695781953163866965969052547199558811862459755929880206105062693162596966564969090523328485578382332426358809045831759393541573654498007053609291367872036111445231279494806931031841205524707641695256162632063010224942774570614275679640385413454072868377460757627086865145342680411059337436108163325287906190993195903620201661214403352143421814822960031390185721117950110818389291340253326486009897862116192130278391424657241044004963932456332370837203044676250871218583290978562214724386902489542748628396358186325956900204476723680860137151218998668021260767109942583224787827906233417831491624545860788315526165511635197037561922517899904690761031753872124042336536173826882605457634858121101471892751287742889625763093890478605491801544520792057578574375773201143929421480324074646141024278246772158921139478563054405229834847395540267665801516476465649906633858677249697918200443907759577085140538201853478765762117960994914145101764724959407470640463811314680073362866017160216055901670762363844476940433763519832222385027792750981080965530232813715566803117769888159323419674153708883977329384943689553768541789213946129813719122880362388613061590039120847635432704222352763497996891937276538781966653887199495265671013361386797466770701748928272976698049303363099194915667274909798041151694131302731875286034428026186929184304362229619692102502128326871687296959400302085212456821262169947535776150082836000223031048009020371350036539197512764290221947644788009144903781547616778821484803103102745494206849074992779830389209747508799417151536020207175883478394172905960788120783232579015657004053498129914455441618389610549539868266323811924818208880604509127630703993255747870363319837810567597787888248562918900718803552796004261069194657586185596777323973185892714770276436504734272537002948160990428552665125608477771575963058090305035115286941440877623389294911460277602637191173693793231079024899815378902648788493885795214168271309254640593363869703425269994239287771226535309826739493886296423210090644214129966601915093662511467744154185692679773644695709701672608468044373005103438648018171096398607426443413194281519283533259981445906676653664312034448007510997631193422830884833006737772887744686368777653538919592111949951373489944710830951650076413715452663964540719349734000663229824949598114271366375624217568372270930581796391817021771734034804435202600593398262992169912934443430494160632096045871344133239156139910775140126053555363620216919941247411877562901224722321989970134286623258958498605964077449818088184783496838986907729353462388738014823594316384752835667377359432034427008829688816033072344951707746090028382556104976370057205866084666487901937011251702362871920843956238611037186048336332441746362113871081603050950760137657339038936536596933851722041992305843336304901453452571715630307405640050171237176240125222557358332930710738041186084749584740450846611590610786726669986270473854160586469256252168384869883596851589288004569216909578136486049118663430702671507574735910444281915534186018197115110593685299825714958042538520471370923783862810373944427764167480823665142849781516572576659578160735209456505359366276175015044857079506949581097412535399513752605101582122333384186945231604776461746644687207899376798357792653596666581824693709787573041587757626825069517113369429081460885782112243077774167939979145984687560083045973141222583991194116736510260934423567193666909628226271067954142670416399861275578343838128155755377702692215310376282921807545085658277051619371602033888713006177339575658405744622442355225853961935039933219714558173292667708157166916833886949301548495619142336871670282820976529735014754467417983365683174117809170080328865238203402509223643245295215135732316886815093541440338066497831425192534469707791058531207292816542931530093442001376701232809955022738734490848042941077563991314157582176472360317911138496886256725677367798535879492979280051355429572780533908274951671490815885229571886451377910940010012673321183872398403321907312091527491690998932778856646700965310668633894463320063118790564548548680468929222591042338228420943806756554406415931090291538143528789629740994863591079711320495984207677768776056308656173482219428268311986921414524482951641166995052008686213317172019535225407298322183791610925122947801778616107589077345869377990653281139028741071735597803862826823503904687705298499157856081719712796392689492483355489380957823523151647371561894369978535447318492691386953116508279327857453984504066238005909847859372464174431153967057270158951933229971026010966691002647873844722520078261307977064543610448466409873414879293871473093770897730342188974916791516079659719631290440856802730239894028254762897599982086201797037774350455318445666421091272654386376102853322186923651805632319156209526417184248540024807358600433160247811092932618503532768368430167126161193398063991915395134237015963224689432846551459273641605647876407353197376326052974132020864262566344092487103313843164740701039613572905063871725731123431656363638983017301386812075627738970033704925617216698715754404765227506689591570815979652750336513064156973513088297698696477005797931273090405805324066030602361512119840369813400472419573729403873434074573160162870936318068249575178675647763166913751293933551646401329625534493843177325624465230372869642679078724392280172358972274796335813356986697385312329187363931167837979111403879151351225430729247112426650129104919284568825235232455725351552224363906641354967564821570365975247995194169878249598512813403591842113734352236034910030599591245451967209058347539059536190947433656585914973072966125316763518711707788780035041883398613275851057398845335005672095171230325334135754312046899114278318582949758025840627034073495122556098906615537245941205241050630832317495323472933706045476448135324622130249061967088040634256046633681463998139104615271598326353633335243659421316638748257095222430616324419633409773550120132726761874278343852462953247386966597193056825342009690607297567265709899931944826256174731047305094081727770841080440016328196894856028563604702780682709363667848710891858610272205043503944199299286748350079640312927864906304355154798671043210363438224540663084637003896566824195029371811104076856777325671062014465716574261539700730333018675634121018453203461781631294981764229198232448947654253783388204297001920517253136683270888989223979423417588630101697507592396076446071605672776440131159545850932553540460963555258875042206253533925856199633623872569538946264824099914287390183680108014685374620969458668067114850551017647802720372476318759518097294889667098388787511578895623400536394696909686982089754739465395458755824025627145860540874654096413723593095786861445483207390022439985873830588574664429664328016256793764664176593210650680088966473569586028063185778696846067901539484777171526008932126642124726149000234264622535507932061596730778639639322994194566230181315095849815600439054976860942354245780811250583700351160679186551987899007553450837968473873566770319473147476749953987063615776202643846558316122703715582310812032981020745887175302830579849877162396208954934582206235358053066687144876586531305671914153856979556448429896161954702428046020131267519937687942784998876608574424998618033186526320893410380410615897192637383212667814571224040666584728535219469735065470507466917541842491727590582415179332124764074275007615003561577219703985592626963898540408123901920954693863945334300894449076898006775718907497203849104045111950488579240549422430862215686448461635287540273933678378844195074450255145986318612166430395304017670650737974685138684856887920372725287537626880802277074988514877737086561392592097851272353742818024979368746610359299993821608029744496422263548547379227059308330732006560207940874965636535953389748254985558222428424330864460444917636632197361629108476540664208138353154832367022269303011778867713003519669926347227092605460218997631456886988546452742315709205780440409392361149984816382171251958377059474144369328217951856030362908523108523320063836177218545129144151675726728971709295080995491115727738994384523099426017049570788092605348295244510790430809310252002021162900702972004743370313805442485273713185126694838015211112954180162169003605131100343992572258878781008043930175009769360708537294998309182845117912092938413455780854377238800073118887421690605050678371370274063825715320860910620948562818451293617405229491236178678754278932510338478945063584831864172120232848867941761893175916936978589066485863729545344061035238414543782144041420795359232419130120814019590644487393845413057769719569362935783498618412118335138847775489214231071866809710199171908881608454495198717226829803613782208248938966092151102736556383497239013516522084118430594971074187519260946766667423607181318562263393260060663288717977893874080349690289502370587468658530985736835159292642558195601284611160860487456916132188445668274130918453531643472494048279511660213922482152284451162576937159479526872950903047337162660821805029600708501290793495192214286757581386114297917781127145691164585515718567911708522043336429297534300930577150477197470794166974719236537212770910044441149771285775283181049923538686195299106209763353070616873255072368061193988813137514561690385137083968163734396360347928328336563595006220960934830733065521338335841965986235454589498682179372157178621143188814181528148836823240009313917239615618819685916460559824760451892578522401207920356914008125649666362232615846019270768411703026907820785686893329687936007326486259085396965025670221843906365927274024874373060432645146595290306316201392153119798490572148328091329727540219633346941261473165756079426541378711351627269272757052944951094355168530350261245111562524094741072397641389854917843735109228705666266863564318304340300463039112532153772402056001825404569674075795960482695655750098767071905821033260887679978762025881061325337213163524622779581816972175555663637210876981896507755878807206231301747997616278339215979267473884231317543544712452852114555647618822488813490625396727766305946129050714786088423305048954173700588940427019522843104010086905515156909811517470970474323555351456229248573825599238197370105299573364893745750391351067788061060527046812509973058875643642096985994846004078611902478115985749938866763374390207356150215198771166488048581440471218124332859752158358015616660187047654002371295814353685889164385419937001586245963586686123227189249339843703303467679680488282425879611225214199203660669304537817806007418484543257294498646404096533225791315505537497715207372656046521498454410484618808462877318221533855177115026118801994635309492636704866960405453702180044263190730170186585393782170839546858732775601817761449580514710578003629573446698223526303276734226490467503004836350690787693180419256606367206975754427565647193757103622172723445912571921412299915576801160624014585320520435926902108223783097157413714400856842549485204781754909051139596113033072378955171738006815746107126582544226522618574999884662865437801703547910979352686377121384449362061338382596983291230994834971550479538621580428614474707245992895951108596353356806792208588625391355419712148342585326639448556448414437163323753111363340625419447936908942309059384977968558654468049438582343818038934475031358918368904553362235318960285027300982643072000467590624020979094167872273398935195854660177797067882015023199367866518380157778613872943331744050423399154264127572590316747837829937185838805929919930426357165171535205844319577554107598132285773629025750828527147869294916738495703358765482635112741426231530287972819515170191843245039795145568805407271280931405842189126545621691903281208244330021380936941534090926737001841378878232358824105952882091391122376983197385863111377095821200758977598655636124137542127167825095347247242493240787156813316762909697688864136617808861689815132468231141188094757116163402600963896457848764885057333264284354504937279338775019887183472529765242120841857211466394385600886129299536196104160966949461244421470876475635289658360673044133988472412908346503168644044604661248748712465204802503052422913247662994388842262879693084905772957000634196203224713014001316324485989167462563998596759472917793384738934828062167583801086989253946454905163667273365009826486005589759567623881215672865627059042146648672881327891063995694457750315379828488812880269962995872715826927673202525599988948924553574496455072613992039779209442466653855719582532255207207153068979266405561447716075597208003386115629512060258961979286373743813337931101772517953360698302031325001844985453129783938956301615754527286888929780663765211591009120443813269934515079913668898214910192754399304618341831453870034267125170721505066917586198732535221716916597559836503614379370118425547846931569036557590812044714028782560536961879256523449737057538949699208081652250218260123107062251099566298529927581162698576168546631586946049600127140987141317674460410902993224596022062324828491276267223741714140055313279819368014780323282408383224067009467800172584303162404423355760504326823431706740776861818994506012773534445613456631600402675225760377368762722021968052635826828120651984513278838416227839164392949867613026178865022522692004106553797610247860158988661216559547229327484286711157186964559739720520556436315158359781162799170405180320792416230576841207330921642427914971360147358390054635718803605053812837473635557695381145693736966197784412835427730682455377495472116907945998421668486206685639652442308850167256008495070585127947385980542764963491704371533238862062927529061728993687103715584617381449133650067934551429741997596233806357685350458313224546984096007149813473419575258362349731564468684291660239721484472043256211659727453894937763642732739820546069887466309796309447539968295322423746786761899588378272444571292371367413474447197434276820309108466176334054973272331173340111659361442337130792855312977415847609894557657244236135360575415882254468739766648258409923847596862145560111671406474246039147740994441351609557249626167418534932138685355488646277447161488690787234126802880936621565723899904615884548341472638437772090419017559362342062609301959534466652230774497315103874040974426330140216732414915907495369817982025864413682320190304402284550455106186758899229547597245258424329265319033989076324859178607488037746916527718266949417024120162124868059437809624404252426704159384001199136240834740094617360560669898139739645400311944527017550131601104533280441817207649685008412565052535179862086175827433761623348775986952355976268937519226183084278136545349291670649785347842730455081487877293986813649230888836033911523597766312541091611558308804656825040751880201229000742627616764846092999606733478252567564690692669504889322114105282631889525319858323705525911497612288157996632667685670674150846432327565528609123127086077539690737908771138085892200113245294049889922704737554162844306763132343665963132039823822365456559043777707552305193196770793605848172893387453594424454474013959098664586068848120392276052089591591308873830873345317112789906683626082510250289631190568481346881428473945619394593511266715086704096809000035241384030443602237087033327542922826698398494829325813183260408718893212433059617843940587229933901382943262992336198408409788514398330434599960440396485182583066248982823883042200111255085981898391448344844015751684471609252769042652840411485899734910885714254073490007645062005967803838338350515620582705664016191350475064132715818275524670604480386741711701135361668073237815153729800159901327889495086187129604447582390156419305608703427826439346018905984357281977986898496611416847526529975227719636005017771483921982957544197799709954130121091633016282666472057665994141283170246327843904936295814914169455433298130711317392343344536477614717883848576748172715876667106217813834587606343570080150703180822107697621328830605698506305609033356175547929890746964404950767451267747106159270327510593755358827880906472517244109777980040119286343261893970180775124057054774158177970221802579963540456256569061867723885060688202164035260408533918104432069412762092767961756595762676589021880178838196631141734156532209197898820016385683655803586282227835323540770476387548613240989563105953577728703740467085125879358539676422989918253524305042736487362952197862376130430552678640237349729018968430033265542780883750558736743752261945449029876696946612108224851115124942879425375009248761228804637428658896795153370852897642290653016040206069997053451309942591115365763315347798585143808043185383293137605133990375187081546565293976821820681678976667143825155588879797300722377840466564345393925544396615896674799718417150813477090500003898193451616746130407776930778672242012416461426697352259907686766455115834355953750908750468801886412209297018951915865714966322975970231743912119114106738120788423635459798468818392838721078133776550259766032933645790131678864392198922153478445210797007411829472852520896641724546528677899228076406095090087054355112053831012039363483887827931984497205305580640089884147850679614566821898948479674022244113913369887487652583123461801329225543373875617324208320681859309093341218594477765154347005165214923914454731564386152568222327274320958552990828960284112884233856381741112323189817039205176818285148223632011326114683897977754234839539859773555387479931478369465852786548627650813853724070487089026934104735632316188699054916850121902617757361251685208213541489423125264663780298582285404482769756412105522055863664088568917771323306300523891885066913901475208601262155693104850152972747067125562727745608865730314711297367302397805250438620696620826528991710532990343302838492054402628712678922427512444061374297112648006020563822297430010181285771385041656979587178970340526369080649857004814587864116807509544571472638333034374444934753562266027341209926917981677891921750897515727238195821470408569780330165534206129720507627843830335242167825939925171230104851587860224644439220292020253252521515829520218725721656441148152957244204914499245531265109309283531415930597420172103218491273772895034798650668137487351895169131869380823743909292549280691725771478618398588851733810124489829934377473370053370068252656647212635214606968547927504809038433155753162266329616429449015410862283066225309223030055256064379392216273751092054318524673355685810347451754467300668773538268859656515445954574923648729683873935557286856820970937068655945793715092808131171747403868732588043215625794798713241960194139927877235454587568468762746272019100094498768878435303678674043109734750924359994293734355746752800574597686230559451123952878914382180299790800323290843096781932073569058248305026863533285657386011004060766594502913168774569065159241049643726694858160418911013311490706738036543681700409684130695301318926665944626256463817919659855204483526903636334206401621354856147973558569067520506511253677092000344997303422716188357301982404683865947269583956684546963367459758762687671678204149310431797725100520798570137927948407559741374061481883367972415208467850517662863773339874292705113236025748070303373436449698506471836270575534367072477137900735911028494106738086952233620846769094804738713039865343227698048631407498839757989365214479653306186066720098433994778082034252601056288009952122283076954922176813820889628483465616421754123937579558193754200095019239139515555511223697405926455097278440331386885178334434554052038015454864241788988257555470096002158416471742411410132996885100140752406174456919083750028326577637466209951318990330737079201943113542966688636484421817970036239203330453206764934536684736355707322326827785876446310370573555594566522654459815454790470955048621062330510444683333038786245129101219361371510125280334401845995354716355081414363331143924307309675133524204853828824109943599655989890178320729881597902725812942771540675060969003063075143063594335159290803487756279512698080233303983448523903763359578020680403822826869215712204567152735947916516836123801571638451477512947633273928861312235512576987086278058220742708761872709578297417052880180662367826500231390634119435668470543727684869857682890608140863953707420877680764412659167163724061796739633033065005264111522515204885857558654834258914573545195512032180353594911695051378068719810556006895666360047309899697571949998411847437091347874733077520204574436565617262186793285390157914385444947163193179238783098002974102908514885479387830864484899289781518304707739376905740671105223300022583960963928395194012317124630264096534995267171526593770055565730102494501137676561913334587750246583294305250495353130891578871532092316372373133107902309220102841925745042896381868642367418745319420730865142002648204585089869986704818966935411839771621427485830775501646076259582071540977268704166605867826554568530493151242347823449624187048865683437944276656029782106486814685177512298790716326796679143241180948696299889708040355541198052387600659238816546438629657921933326303838039366429868607257229153586409564863587715116286506248407497620036497639682708720641591753907274496783732165772299744820271810956549362372807148941506408038206953482379076431012118157117732910126914164048218394564547100247423760878689918169039921521753045153136140852307023421248049548015885572583792382485175500534204824970481492908940320310430809050323007986533558215703588782544545718278427626486375885747827314014521764649075125614840753558736191501676141412501389041086207604364613946110943290698832808350946105405659106878177534966935163165977743784854970520032448041881269436554799191892238890741452952579974686319705933896006655839221952956620159751151666300129475309250350785976428156893784305478622359782685533113861735520731866174351824115841845075091997649633694047866430158123243404433057388021248152371142388316099631832447205081549938790835458611253943435564824171299287489119366707640567857774181325253233507979780771975461697394241257405396956542526065849971304547348847901021479486605612704247767646084737041513530671846138948561060030258907065141688239455904675293200356117950112887673328192319125625450112001441334554826262046043961154178777018566846299911001936816697919963389400196333444219082726126561961439286151423991499109774369393437975616583894807974648514443152564762608988320176773626728380768044611965217042661464062080139705149376171806476488738827250154569276638342192678366431133871111025133072862691969096467500425521305379670524615424717077214067299329167718710591789934002289122069747920433953864968281665817890773234078288875249889546074590578021210045020175846649075388442769801561868206680361142266963414252212701874669272948450859264833052568909056061160609027359184255550131690394077096720368166451553160609833896170781715866268750533758548369182807948608780968625107433984390434235219689740367237885674707704507030700597244015754049856015155058928190915694812731538478889554953381956036083413176999479211030070256296238738351346477023693051810382793957412886791553484931648794808844286324406999962815018551120571300130535112365975815392599766465092145349546061127412046819415225926986188716476056849908748119793304841105307635909081982031362197358414422316767268043098239315181137479061734502360873745508395271506258881998152137286301123636845012754834291165393438286951173209240049799587871290266306404165115829161019204881466233120224197635902895287152465704419993236013589982120474846271345840260611228369146254161192044127219280174741005492699430065610779347520954299270720650387651378861176589218001361087617775409717699262796015976536682841105021059664122075404910323076215802321801490368864524554178452977152697573396110449811096336643650973261681886798344414251669250224998533937199407689970648423521941761037033886551068960149333137371722361296472034150664556620292222683537040127141078291436736093570890846188142373958232245787503986561211010450137490946828402032613144801907279288018920751978234534610262408946310152037618441950323372778709960576820747366052518528388812006417666180087401861373515895458278191176440767682077611697073274163810947190349871592916000621071323440142391532644306688082924938683364588261228996162358510568247905595841766424855277606907075534470052532713604689867684196360667936729004058748210752703690582852587524292351670119901397237694282959815729865739583855822949365306356393915948828577313698981442774794707665584106781286664956274007171084307394120846271084144220384654297665542790977252203936545409559594221915876466565983276517927312109637452041938454476903708734290815286507123649654266467749616718795331528641404301235882753816634993816753568289004479992478192683752604759132474627756612961000581745982917363087175573302426078515416609069164426643196313914584560126544290921166479054390986891864459370224685320335100411031886752698293827320896578394742343752392404174187327761664303245103880308371741165000643275630023932633142124856864613839455387524460883835247056445230671943050578332861499695214574918673021229404253734683027773313743176432192583951191913236970762565695716840327124880325930914779807518816007401993774234221794461913879164577142778140583620285187482254501254780617476909707221619667136778860802714594724530597985286751745300483760149830490374318122069442090705009423973432872916069092401278307983254836657225071642951238528724138838574504391218505180992122754344306417613772561319645961095192874830637228486233492444491904268558980004614112652158744705099772253265288419466337449702012118823493884966713120693120582224051534971354793790579910847464242156789336422637453846505595136532644728156836277997378127893681071581923934505832928373516022575817127739736575756865378797460471263725175192803271851926819917519383686188517784400435220379006466153404705216541111363986878921739723739896607992639335605097808466640645060973299641467192720137922397898565627219164711374815726090587366358047829903172491757500331384309027495081387152401636448384580814486186637697087649689231216276249532384975371921757162088038760829349873080877249706384919119527981958190516873110807572517264983816623232205603988358157912992461349984204628724405823867426023186896007333398519510459422904668181847357590156918607616331138009353807527538592211061653529680787460840337585919547522274221559932006125164812648451392909851693330515235916955355721591013597659403166816081731576169618811781971177795842089107519036325768932298882133054753656397633873210525368153651341260914098941072219830872711334487119709246568789747359480982755252152430402157014447380207090760786408265205545137559732000800203136750199256298419497315924197202893994081817702434459238430923245234575791683932861682945847124118958937423672717813748011917449413425060927640713687024598045661303952113384013415037432914883493033636158000130588759332472546201048166403710080511673970680927719260588960348045228317232803681187031272506450618629138861001275954148566415095600081015308217088430975829661490651423859763132193660525117633388134158638217519049714767119063945723171578151019595179218912729338551682001453030819043454878245408263437500120254435442376334044602833812761305154890870916870343146715245652773283431041407392860250480796803485192806596809855333297772986668103799435700742354867077311314589712272131788641879710793233868427693207194387420730083062528118643285570520825547326752348837863723225294085957046976403282869202911899456522208121620826458236485403829445741128331629382084816009173825727982745362705478457038425615653445181021898078023754297882055318390558568805474809499629743584484479518248026939110990875290364212204536332706626128176468053408407649243109388979549094928082647431373786179467142988191638288941225785348943868854632528599402913545489154484053068978162863823000366160237819716753451310493666848144862930450839567184713588568720601921059768004898348890777169855867038685678689630104228620027696190848737373593115559489316471614742241241080915717759369507297908390256697208628722732076075083433157804018595982216321305273881207658074452046050754827966442452381402017094824435270368061319011125926752655181876954087858148018718169579570729272694811666295639408633390466351259744410532863779156045567748268573798664900319980347698852661715714418485150351971611338457054814071731561010311297700803013892035659824806376504489316277200564467982215399291293815609566984236664361860965342421210479582059584960463891055303905596666930735260688627851937917438369125360883055927544388560027145080571797004532153325269863702949511264830010485917986200317248423836494080716911582330878681178100817517430784215819553290074107638543118831542337780918612111718398640817469867853658537784796684100354795672647383581298428564496194855634992668338556800017467144246309114053233502145105635100954667476387259109043659409570451628107003693334435646437801867855817503020706261095751735198245598952555068326031742238547524726553387803327296382780133921837788043654626876383362945442953469045674139219118842149941525260493144551517231835450076117034756695289843264617957174777984619140625' ) ; +test( macro , '-94906265' , '5678' , '12032097777224921443610910803648284170512319198440026582654592944907996997711020183354851559738136209876116410482775406152550319519617501575389742141362538671375575270130368782344375460094542930957208982333657039900983512378934606414708547255120509688221248878365002162079958544994081468523927315675060726868126226367119441190130650764598697841259026377226201673036205220245238076301842775410518683141308488299366012792925609747073886802877596666532246689317196865573110094049146280756613633385237048709371024252858686340623252312452593430321228085552943679754605680459379364986804128577790131289118408139954294866373981926459619424848669839958145224015329056251464187884540803724925854941893314508739139448540059027532063346594260009340289063635135268446417517177773306225826478834782126901952841733199463653563757819068049198556549112038207670677005457584687670138285992773936407404706326519609992105860062869525897101616064153489988499260854115519937665672793315389915719723184695407552227493961904033933034506875702096849362495327673029771455889030501830242732676146364350412302869011748293967864940422889128153590781271839942018607109535085227963257602139998078826097049418704998656236212402366601095688523413673512998518901468183798514551196413118699461621524416262734189234150826938615238369409717915433788697444341087319545108423271713647606132458422133503476646278312763913773672381574955638642484777319177742615693192492030931928334799325795983171516582124249978689831869160939605527534908432774284025724078112334305143452973560047389979442428241832752514170684582991619064835042076127845136974614077376818874608487426791468373615242293672741372298898215088365221162041567250511944704729950839359617629579145185451647138688599424451528822613292149181525578785717464355469269950910358964367355548167095991226459148148416836033320461350750016925333661337306860380813570244138594176200254338594713997700943753269483275676699592254818599648860765855658967021173586910470760937291362350281087625944947663940083612371308499706464739236243824369828191050651890831355140821021009799707142643546563126154302728058269983835130462112445179485724829519948644797857100978445782729948146775639685486727347085571030457542493031359599157910012477405633462126888771916787753215333242607039830155744016882502462503818969602202111471162936075917294595421685134910453228619713406894527040532782467138493248067630974131210865224589283318665338359787682806475430520542164582197378961886474218909120025123091615456874986351962126541772414045818060094363742441442667036502961807091952360039303360580900852680604055434020409419268918051690557813552959236488040160958755768871367230392867382735702108578451240872919059355437258914588914059658578625910689412928981898994374868014765744048731178533977420205065542882559318334473630109661521143300821787590642741661630560532599207482636782848372575108230527673435955097474563225203600719908173095140979638933646119901238452049016502626977563080111918315881318986264803301054759949431314581482431408037019249299434256675011740150791380650719740873599060034519923061234283942527829654746500679243122868491752528092330799766780299772695603288900967560796775174207884494845966890228277702276659444815563795433225980503597587408498869891219703208161074827864088098815419234882655313426926283791847398673264577617151571464296912550417563804886979853576821080050211194779490844153380677685847777313137638651644748358202947322079765399238487437874318841114773978903668929164955398911903679705111008999142589544437065672589266355348348971511169575378316208327903577552525930641088538955350354489078111990562226354820551745938135022897672457837517586016736813649699772486263689086502957138019177196070312090344215367177632397930739405411088757771866673597796220471619637645139435250941374184393351858539017096692099099345257001920271362387534252371917508119267325168864330673891152067448719178429752412191066355929358566249659077077560550302293786857736765866388524626228805050725063109877803065961191644600499168820792325163292525536974162404755526606943846795314338495539699560103980570000575730832399241743616051296198894674663823826249501962992317559847798100096759179383956869860153118427566631515292600888345422893802197242997389457528273662177569851158066854725418877583679801690209473560655905719642363040982739123254770408905429249758124187443434793269173022194566001870880813212255626734666407333284872705324976206677741658696075649608364892807470963909485110281558432545948579534204538696827102504407100425376019173981304010256984425288381928914573699655169020850451341503052441205769215186509836760430481696523650279090720163816251521349287308560407457609483984181328774565719714613388489095110023571061353122279353104129328013968956403235071785261847838169630745374996406189906650415573552174116649660276541371408913476854939747876731425608814138059458169543823165972801614100937621904382981944188903180205906327482865751979701901540575440519486923023420935041930682172192953852334672415568738221940582193314983240970450000477463045431237229063460109818726294597730994303217381825651493935869034862652936559019431947352777726119926158367810617503147922958376143964979603245915631333786351234314954623412494887023938633377421208202061177648550247361016141144451615061150414512561947705053352442969412639758719469809823355676287459924284669684459858991524522914802929760964195910108664304507593383032621305399692953057899447189106733091012594841503936991785388985322660311685783354745007380474195833316048135155967714601451196311606046191001166178941116722830537202351353675803239601270737264305300314769429948779160815303098446558150519469320909471850141905795161388126098051093418801571231958217059570635407936987518675272606139316846781769414872368547904423404977322742616034539497477291204678516696339549373290014129953927115273383862176648175885100832898131993707682449845814289537783195056908822732162500604957529260337740262458814285530991622691309191620743536827546586516016261289544348330822509040619411107336690611176859744962777081961711988981244490119102057017123472693131597991997040909096393811129374410032160780720267920557429521283544362429347063129854641992658572996108093014481102752542992814642875292835964120599399273647779564854999067324549593959628020136971251523507807754590744694873740047390084491259174712701241947149566007259569113369875274948363558659130833317516389511341744440804095510223434955552652210614743910169826529392899468656662706962138458679700014949089569408033941330187462290588839847072683578505493439388126630655399425769894783841874574481277512426591408213810373551314332889400820073202400253692361444659207630759168415095760789533492551330583140574981012731074049549919118053417150217808638350432013305694321389747006470410615077305764765120127628910927114025496289209479659319746699938956841225054827585736797719039052465086433182830701745898467197621237268086386733129150280583409523728139312677689819712362202660229834226632997964115903142152545104059172086002463963414350578947905947216633376664142189791562053019113774134585010114509991806040543148515641482014416718677876276580431730562587541020555292496453826361453188845475398099905277525052773545411713921648813979140016300112385588170999474985918656553076765214200080620922916851475745553785133089372514034029601819219527045772849932738904614873836099307092123571006738447715320002736785859704861742282537734067792187177608073549859135742645615364728840961736910729008697313304738536298720611573424123582407824500642154138363464791319257510414579292323013964798548950290960997144513319241370751263381191179501838180558724038708020579905145157293231789686223459443044018289699299028761818401590134930047434655260646434988879638156693278024323812521554624956388982330136290167049424094118582772096018451809597401164846924711716262902829627380939680535156293471439360777268668365604921618839689307971611636791474486517596411076810461187507596434260046979222951771970881882637300844957670414379573068900594030059669462435172746064402491699639256585470646371028345111692685583568972301562562922256758180181085480072911408202795425250027969499463641174613001079713276428421215191667447359883645715478755796737199406110184987838747951054762875131236948669154666701738693610353768722184367702584486223362096024384484603104446694719810676365358898796150078397378880308527506601302713337537470154717940902510142689198467640659012705019749229659196945434251394512811731664749976526521575163913656404283679160697284832403491752877439284481271499113105959231314317691378767826586965558827309006336474296703042302766970494721137069514776117071812137188441976088074396467632977148030639633204112209971813503021630520258087179296520213138286076436343573116739144719310772751735156402034501606390456169140121695688607125183103173251813914671347610021351582630598950972263101156473693547645926791369585126525848123770842541512577658666859445930626122772214914414428878443618845511938720224570647898061530301191130932770667765716795587750061205748309356694807519519675049350933068580375053894078242210199468520630330003161545121375796842051755736417199147757963284334866394276249640731433231049313954526161951624809572619652276996303120934045809848958441871638077879356764855185283339151315501229746330405881302263457753882789573262935098772141915955008754732738429440981828735729272802882701434622480077709131642461504208927055033641377102447767720176633847373823944955329314383832782143590012811927685177026789234911929577093962457115800486427160323294733691288587100842884523422947373759687195747031917611825381748929965338560830322621555697476051991779833983757024224308964473525520615691348057039080995096707558993173247103410555911126189269896588730810492029064501420933855518163570985872578414596537490581577386809453787410688705142748561393081836124251051324584698861388478139283569598076892767321443716553246412277259380509438802329441648705346383613734547877712888220362688053129344779935227318331396329401655637306388721745349393876059195313192731747216875912473534083064724394534423226971274516443125664390773514132844684527673669092932331255685956744208760893026251638308006285281531125557486527757107669977234989257848144696133615593927212707645061711788280447683309281341206400131653863420785992756287508115967050826182726890127091142835164557166691300678394990747493429085386293564966123136506231068567056989317384966475475729360339009395818317246772969137113875763412531168727939516546447462848160915288609593976373135718583011204195966912413852164206268427095555948610761307815791560355585910426147327321102341134387395444132445427019438961472388259276810758042673037214059651545259592406090068506838010231567454628094637254355973489738412673187077409391969169545123360596500128359039361514821593508030148522205228449973734972174002553108195263247639174438853119252163722614381071194775578403064409455019374052283926424489955638366392986417357495741112108742236903909428659619606212619900649574073585165166583918297998340673134762427650800452972036533098907970092878703482852833490281729498858731156264911226877099786698157523214591321994816532369903053664184550576973511700913443461257437675437472098084407017674888009625137498476466436818879720524380130001916537522732804698998210196055682123318139008022653778279715652658727340997456249218032227963658719808122825441145385176983894549215846317551213773007016356738334267963377888011544300061222386574258747191915588698617637837212717814756142051324008302080298650994166585880612515919258375738246207644772437177730335392539644865639849308897774064728887770437363216880581815066468852825832858170229658070845319130874032026316629150366399827042959910139581792401984719737440786491444999030986092724355755641888514009652129027999591099530921894279904701093752999885648973445224343373762636465568559928662660225367743242647517117639887521310379396989258168883666755250191993348321142152864927369234668649063028652063843003316973499048911633219208658516326528768740257621395512872408369502229664467552427061041482906643131699241509502631730714053932028098939427452444970068248194791910834306048571684029297039763506306003677920029786132935369270257069918171451215129218456327859444234926254208150987962386182798994154872735035689186439260489113584084457851762452138367055101379588122088844841306204874692945577566193189114109700874804492781437652540985226374341144719703543609354328682925954034266359991157018716516446223344660092640717378693207071014181491854379467954573981289282127187230877577110472130570576015105977305257910229508244095738723967730842098391729083715169089672956523592451123266861612656114937473953741130882127624277059388150081629717639957137442000516378123556553332349275408205751508548209994904127879234614825403357223962515911129518982040378620086754855361296612014949915205044289352069213501405997863521354165348782511867122622716426639791821261702368775506733831743186020155130943146663966007407244597917005719991265853620211871215693990090865326620251912533146988791177682866417571901522812420520954626741756852429297080414669100168753560040054760117697607946028484195290870973497362267381612404260749108299672450420697873731172732775674054385367218094949835013674973757423265370251319346466334678075474375906897432558238767579231146265140826352088422254545690686302743333477665277149035167938674924154842983621768748297426546172809743534122395481353193555875026625899972752500022321576082052828487883396792123138094495203111492864041134795761256726095663499686254762052539889279642048007404275482585612511343844033096850528226343612783861307535354140366802884442274775822100977205037665851810599890007341178775130240696632601594694061697231625625860004620538862779963203630814410243245714819549757828073441407122131050844039240224163642095196215306864657309686247074858678000635402415836405930550459058799511632845758556493533762990549187485016639012256731683580040073341731704082434264243561194791703596206015014846543656970640029940075455836423615054869940691591288967540111562931377745992026685841553681405592390900507543705586848434089001303884903488059141717942395691356277350339460187131843419289217935265295704356916529054605633813938893737767409366779159372882254232836716324580262988115146013874569597106960026911351914668502679283163961953086528727793944040518851106607715147835491925402383222147418855338357535739845538867786357060338435261036202368258020761466669889670691822601560184917436779215254347489960930087319530836518444337988344598187203191595434829132950413104197804486083026745302512606864460474736420264409880729091060010368627194325379608471121667642965001108323387523924855835054547593985702842329940726838791815501738849577938132081507924442944174718597397264098866829822238109143654804816673202408821440775080110551433710513005759571403757096182158076893681914376156120366821040079723970732533775297717113208811739667056486197044324270922989003211680035846379754027311741122863788335461268176688251174205660568758427931660106752538935307255339039355388757057375250425837093302168454705863145996845095042151313295262463259661279787231685169235050323016586688299833499115629856113737828434665438782484735547300584910063985708776012855041724554864958256185127598519785482694466456563490174364083687348114832431925384869094951858531131186801480404938023454443571034693096579794784282688250620550447004592047288521549204059159028509660096017875307950532319742036173203952041761503785819360687983493313089577551873561446412395575710594370027055187478904534143877344909963663735297933632031693194441131986356078620539658905801102236737444661108267332204176723242428802368200731035237320543765666828751910067807455585241166705139054718355894926417783921107593070742530185305927934025258466866218767376534792597033669822057078961298957496217109258353525748391156704355202862658731864850654926248935721796777991022299873209352867958121188810265931762818554937603100731645526362256769968645627563740131303913187747664074382451124596816950157537126085105444310397381169417181279755364952019062060800318321532221104576465370046063753472086774044100444414676557036622159972786835290325849755928597463426695781953163866965969052547199558811862459755929880206105062693162596966564969090523328485578382332426358809045831759393541573654498007053609291367872036111445231279494806931031841205524707641695256162632063010224942774570614275679640385413454072868377460757627086865145342680411059337436108163325287906190993195903620201661214403352143421814822960031390185721117950110818389291340253326486009897862116192130278391424657241044004963932456332370837203044676250871218583290978562214724386902489542748628396358186325956900204476723680860137151218998668021260767109942583224787827906233417831491624545860788315526165511635197037561922517899904690761031753872124042336536173826882605457634858121101471892751287742889625763093890478605491801544520792057578574375773201143929421480324074646141024278246772158921139478563054405229834847395540267665801516476465649906633858677249697918200443907759577085140538201853478765762117960994914145101764724959407470640463811314680073362866017160216055901670762363844476940433763519832222385027792750981080965530232813715566803117769888159323419674153708883977329384943689553768541789213946129813719122880362388613061590039120847635432704222352763497996891937276538781966653887199495265671013361386797466770701748928272976698049303363099194915667274909798041151694131302731875286034428026186929184304362229619692102502128326871687296959400302085212456821262169947535776150082836000223031048009020371350036539197512764290221947644788009144903781547616778821484803103102745494206849074992779830389209747508799417151536020207175883478394172905960788120783232579015657004053498129914455441618389610549539868266323811924818208880604509127630703993255747870363319837810567597787888248562918900718803552796004261069194657586185596777323973185892714770276436504734272537002948160990428552665125608477771575963058090305035115286941440877623389294911460277602637191173693793231079024899815378902648788493885795214168271309254640593363869703425269994239287771226535309826739493886296423210090644214129966601915093662511467744154185692679773644695709701672608468044373005103438648018171096398607426443413194281519283533259981445906676653664312034448007510997631193422830884833006737772887744686368777653538919592111949951373489944710830951650076413715452663964540719349734000663229824949598114271366375624217568372270930581796391817021771734034804435202600593398262992169912934443430494160632096045871344133239156139910775140126053555363620216919941247411877562901224722321989970134286623258958498605964077449818088184783496838986907729353462388738014823594316384752835667377359432034427008829688816033072344951707746090028382556104976370057205866084666487901937011251702362871920843956238611037186048336332441746362113871081603050950760137657339038936536596933851722041992305843336304901453452571715630307405640050171237176240125222557358332930710738041186084749584740450846611590610786726669986270473854160586469256252168384869883596851589288004569216909578136486049118663430702671507574735910444281915534186018197115110593685299825714958042538520471370923783862810373944427764167480823665142849781516572576659578160735209456505359366276175015044857079506949581097412535399513752605101582122333384186945231604776461746644687207899376798357792653596666581824693709787573041587757626825069517113369429081460885782112243077774167939979145984687560083045973141222583991194116736510260934423567193666909628226271067954142670416399861275578343838128155755377702692215310376282921807545085658277051619371602033888713006177339575658405744622442355225853961935039933219714558173292667708157166916833886949301548495619142336871670282820976529735014754467417983365683174117809170080328865238203402509223643245295215135732316886815093541440338066497831425192534469707791058531207292816542931530093442001376701232809955022738734490848042941077563991314157582176472360317911138496886256725677367798535879492979280051355429572780533908274951671490815885229571886451377910940010012673321183872398403321907312091527491690998932778856646700965310668633894463320063118790564548548680468929222591042338228420943806756554406415931090291538143528789629740994863591079711320495984207677768776056308656173482219428268311986921414524482951641166995052008686213317172019535225407298322183791610925122947801778616107589077345869377990653281139028741071735597803862826823503904687705298499157856081719712796392689492483355489380957823523151647371561894369978535447318492691386953116508279327857453984504066238005909847859372464174431153967057270158951933229971026010966691002647873844722520078261307977064543610448466409873414879293871473093770897730342188974916791516079659719631290440856802730239894028254762897599982086201797037774350455318445666421091272654386376102853322186923651805632319156209526417184248540024807358600433160247811092932618503532768368430167126161193398063991915395134237015963224689432846551459273641605647876407353197376326052974132020864262566344092487103313843164740701039613572905063871725731123431656363638983017301386812075627738970033704925617216698715754404765227506689591570815979652750336513064156973513088297698696477005797931273090405805324066030602361512119840369813400472419573729403873434074573160162870936318068249575178675647763166913751293933551646401329625534493843177325624465230372869642679078724392280172358972274796335813356986697385312329187363931167837979111403879151351225430729247112426650129104919284568825235232455725351552224363906641354967564821570365975247995194169878249598512813403591842113734352236034910030599591245451967209058347539059536190947433656585914973072966125316763518711707788780035041883398613275851057398845335005672095171230325334135754312046899114278318582949758025840627034073495122556098906615537245941205241050630832317495323472933706045476448135324622130249061967088040634256046633681463998139104615271598326353633335243659421316638748257095222430616324419633409773550120132726761874278343852462953247386966597193056825342009690607297567265709899931944826256174731047305094081727770841080440016328196894856028563604702780682709363667848710891858610272205043503944199299286748350079640312927864906304355154798671043210363438224540663084637003896566824195029371811104076856777325671062014465716574261539700730333018675634121018453203461781631294981764229198232448947654253783388204297001920517253136683270888989223979423417588630101697507592396076446071605672776440131159545850932553540460963555258875042206253533925856199633623872569538946264824099914287390183680108014685374620969458668067114850551017647802720372476318759518097294889667098388787511578895623400536394696909686982089754739465395458755824025627145860540874654096413723593095786861445483207390022439985873830588574664429664328016256793764664176593210650680088966473569586028063185778696846067901539484777171526008932126642124726149000234264622535507932061596730778639639322994194566230181315095849815600439054976860942354245780811250583700351160679186551987899007553450837968473873566770319473147476749953987063615776202643846558316122703715582310812032981020745887175302830579849877162396208954934582206235358053066687144876586531305671914153856979556448429896161954702428046020131267519937687942784998876608574424998618033186526320893410380410615897192637383212667814571224040666584728535219469735065470507466917541842491727590582415179332124764074275007615003561577219703985592626963898540408123901920954693863945334300894449076898006775718907497203849104045111950488579240549422430862215686448461635287540273933678378844195074450255145986318612166430395304017670650737974685138684856887920372725287537626880802277074988514877737086561392592097851272353742818024979368746610359299993821608029744496422263548547379227059308330732006560207940874965636535953389748254985558222428424330864460444917636632197361629108476540664208138353154832367022269303011778867713003519669926347227092605460218997631456886988546452742315709205780440409392361149984816382171251958377059474144369328217951856030362908523108523320063836177218545129144151675726728971709295080995491115727738994384523099426017049570788092605348295244510790430809310252002021162900702972004743370313805442485273713185126694838015211112954180162169003605131100343992572258878781008043930175009769360708537294998309182845117912092938413455780854377238800073118887421690605050678371370274063825715320860910620948562818451293617405229491236178678754278932510338478945063584831864172120232848867941761893175916936978589066485863729545344061035238414543782144041420795359232419130120814019590644487393845413057769719569362935783498618412118335138847775489214231071866809710199171908881608454495198717226829803613782208248938966092151102736556383497239013516522084118430594971074187519260946766667423607181318562263393260060663288717977893874080349690289502370587468658530985736835159292642558195601284611160860487456916132188445668274130918453531643472494048279511660213922482152284451162576937159479526872950903047337162660821805029600708501290793495192214286757581386114297917781127145691164585515718567911708522043336429297534300930577150477197470794166974719236537212770910044441149771285775283181049923538686195299106209763353070616873255072368061193988813137514561690385137083968163734396360347928328336563595006220960934830733065521338335841965986235454589498682179372157178621143188814181528148836823240009313917239615618819685916460559824760451892578522401207920356914008125649666362232615846019270768411703026907820785686893329687936007326486259085396965025670221843906365927274024874373060432645146595290306316201392153119798490572148328091329727540219633346941261473165756079426541378711351627269272757052944951094355168530350261245111562524094741072397641389854917843735109228705666266863564318304340300463039112532153772402056001825404569674075795960482695655750098767071905821033260887679978762025881061325337213163524622779581816972175555663637210876981896507755878807206231301747997616278339215979267473884231317543544712452852114555647618822488813490625396727766305946129050714786088423305048954173700588940427019522843104010086905515156909811517470970474323555351456229248573825599238197370105299573364893745750391351067788061060527046812509973058875643642096985994846004078611902478115985749938866763374390207356150215198771166488048581440471218124332859752158358015616660187047654002371295814353685889164385419937001586245963586686123227189249339843703303467679680488282425879611225214199203660669304537817806007418484543257294498646404096533225791315505537497715207372656046521498454410484618808462877318221533855177115026118801994635309492636704866960405453702180044263190730170186585393782170839546858732775601817761449580514710578003629573446698223526303276734226490467503004836350690787693180419256606367206975754427565647193757103622172723445912571921412299915576801160624014585320520435926902108223783097157413714400856842549485204781754909051139596113033072378955171738006815746107126582544226522618574999884662865437801703547910979352686377121384449362061338382596983291230994834971550479538621580428614474707245992895951108596353356806792208588625391355419712148342585326639448556448414437163323753111363340625419447936908942309059384977968558654468049438582343818038934475031358918368904553362235318960285027300982643072000467590624020979094167872273398935195854660177797067882015023199367866518380157778613872943331744050423399154264127572590316747837829937185838805929919930426357165171535205844319577554107598132285773629025750828527147869294916738495703358765482635112741426231530287972819515170191843245039795145568805407271280931405842189126545621691903281208244330021380936941534090926737001841378878232358824105952882091391122376983197385863111377095821200758977598655636124137542127167825095347247242493240787156813316762909697688864136617808861689815132468231141188094757116163402600963896457848764885057333264284354504937279338775019887183472529765242120841857211466394385600886129299536196104160966949461244421470876475635289658360673044133988472412908346503168644044604661248748712465204802503052422913247662994388842262879693084905772957000634196203224713014001316324485989167462563998596759472917793384738934828062167583801086989253946454905163667273365009826486005589759567623881215672865627059042146648672881327891063995694457750315379828488812880269962995872715826927673202525599988948924553574496455072613992039779209442466653855719582532255207207153068979266405561447716075597208003386115629512060258961979286373743813337931101772517953360698302031325001844985453129783938956301615754527286888929780663765211591009120443813269934515079913668898214910192754399304618341831453870034267125170721505066917586198732535221716916597559836503614379370118425547846931569036557590812044714028782560536961879256523449737057538949699208081652250218260123107062251099566298529927581162698576168546631586946049600127140987141317674460410902993224596022062324828491276267223741714140055313279819368014780323282408383224067009467800172584303162404423355760504326823431706740776861818994506012773534445613456631600402675225760377368762722021968052635826828120651984513278838416227839164392949867613026178865022522692004106553797610247860158988661216559547229327484286711157186964559739720520556436315158359781162799170405180320792416230576841207330921642427914971360147358390054635718803605053812837473635557695381145693736966197784412835427730682455377495472116907945998421668486206685639652442308850167256008495070585127947385980542764963491704371533238862062927529061728993687103715584617381449133650067934551429741997596233806357685350458313224546984096007149813473419575258362349731564468684291660239721484472043256211659727453894937763642732739820546069887466309796309447539968295322423746786761899588378272444571292371367413474447197434276820309108466176334054973272331173340111659361442337130792855312977415847609894557657244236135360575415882254468739766648258409923847596862145560111671406474246039147740994441351609557249626167418534932138685355488646277447161488690787234126802880936621565723899904615884548341472638437772090419017559362342062609301959534466652230774497315103874040974426330140216732414915907495369817982025864413682320190304402284550455106186758899229547597245258424329265319033989076324859178607488037746916527718266949417024120162124868059437809624404252426704159384001199136240834740094617360560669898139739645400311944527017550131601104533280441817207649685008412565052535179862086175827433761623348775986952355976268937519226183084278136545349291670649785347842730455081487877293986813649230888836033911523597766312541091611558308804656825040751880201229000742627616764846092999606733478252567564690692669504889322114105282631889525319858323705525911497612288157996632667685670674150846432327565528609123127086077539690737908771138085892200113245294049889922704737554162844306763132343665963132039823822365456559043777707552305193196770793605848172893387453594424454474013959098664586068848120392276052089591591308873830873345317112789906683626082510250289631190568481346881428473945619394593511266715086704096809000035241384030443602237087033327542922826698398494829325813183260408718893212433059617843940587229933901382943262992336198408409788514398330434599960440396485182583066248982823883042200111255085981898391448344844015751684471609252769042652840411485899734910885714254073490007645062005967803838338350515620582705664016191350475064132715818275524670604480386741711701135361668073237815153729800159901327889495086187129604447582390156419305608703427826439346018905984357281977986898496611416847526529975227719636005017771483921982957544197799709954130121091633016282666472057665994141283170246327843904936295814914169455433298130711317392343344536477614717883848576748172715876667106217813834587606343570080150703180822107697621328830605698506305609033356175547929890746964404950767451267747106159270327510593755358827880906472517244109777980040119286343261893970180775124057054774158177970221802579963540456256569061867723885060688202164035260408533918104432069412762092767961756595762676589021880178838196631141734156532209197898820016385683655803586282227835323540770476387548613240989563105953577728703740467085125879358539676422989918253524305042736487362952197862376130430552678640237349729018968430033265542780883750558736743752261945449029876696946612108224851115124942879425375009248761228804637428658896795153370852897642290653016040206069997053451309942591115365763315347798585143808043185383293137605133990375187081546565293976821820681678976667143825155588879797300722377840466564345393925544396615896674799718417150813477090500003898193451616746130407776930778672242012416461426697352259907686766455115834355953750908750468801886412209297018951915865714966322975970231743912119114106738120788423635459798468818392838721078133776550259766032933645790131678864392198922153478445210797007411829472852520896641724546528677899228076406095090087054355112053831012039363483887827931984497205305580640089884147850679614566821898948479674022244113913369887487652583123461801329225543373875617324208320681859309093341218594477765154347005165214923914454731564386152568222327274320958552990828960284112884233856381741112323189817039205176818285148223632011326114683897977754234839539859773555387479931478369465852786548627650813853724070487089026934104735632316188699054916850121902617757361251685208213541489423125264663780298582285404482769756412105522055863664088568917771323306300523891885066913901475208601262155693104850152972747067125562727745608865730314711297367302397805250438620696620826528991710532990343302838492054402628712678922427512444061374297112648006020563822297430010181285771385041656979587178970340526369080649857004814587864116807509544571472638333034374444934753562266027341209926917981677891921750897515727238195821470408569780330165534206129720507627843830335242167825939925171230104851587860224644439220292020253252521515829520218725721656441148152957244204914499245531265109309283531415930597420172103218491273772895034798650668137487351895169131869380823743909292549280691725771478618398588851733810124489829934377473370053370068252656647212635214606968547927504809038433155753162266329616429449015410862283066225309223030055256064379392216273751092054318524673355685810347451754467300668773538268859656515445954574923648729683873935557286856820970937068655945793715092808131171747403868732588043215625794798713241960194139927877235454587568468762746272019100094498768878435303678674043109734750924359994293734355746752800574597686230559451123952878914382180299790800323290843096781932073569058248305026863533285657386011004060766594502913168774569065159241049643726694858160418911013311490706738036543681700409684130695301318926665944626256463817919659855204483526903636334206401621354856147973558569067520506511253677092000344997303422716188357301982404683865947269583956684546963367459758762687671678204149310431797725100520798570137927948407559741374061481883367972415208467850517662863773339874292705113236025748070303373436449698506471836270575534367072477137900735911028494106738086952233620846769094804738713039865343227698048631407498839757989365214479653306186066720098433994778082034252601056288009952122283076954922176813820889628483465616421754123937579558193754200095019239139515555511223697405926455097278440331386885178334434554052038015454864241788988257555470096002158416471742411410132996885100140752406174456919083750028326577637466209951318990330737079201943113542966688636484421817970036239203330453206764934536684736355707322326827785876446310370573555594566522654459815454790470955048621062330510444683333038786245129101219361371510125280334401845995354716355081414363331143924307309675133524204853828824109943599655989890178320729881597902725812942771540675060969003063075143063594335159290803487756279512698080233303983448523903763359578020680403822826869215712204567152735947916516836123801571638451477512947633273928861312235512576987086278058220742708761872709578297417052880180662367826500231390634119435668470543727684869857682890608140863953707420877680764412659167163724061796739633033065005264111522515204885857558654834258914573545195512032180353594911695051378068719810556006895666360047309899697571949998411847437091347874733077520204574436565617262186793285390157914385444947163193179238783098002974102908514885479387830864484899289781518304707739376905740671105223300022583960963928395194012317124630264096534995267171526593770055565730102494501137676561913334587750246583294305250495353130891578871532092316372373133107902309220102841925745042896381868642367418745319420730865142002648204585089869986704818966935411839771621427485830775501646076259582071540977268704166605867826554568530493151242347823449624187048865683437944276656029782106486814685177512298790716326796679143241180948696299889708040355541198052387600659238816546438629657921933326303838039366429868607257229153586409564863587715116286506248407497620036497639682708720641591753907274496783732165772299744820271810956549362372807148941506408038206953482379076431012118157117732910126914164048218394564547100247423760878689918169039921521753045153136140852307023421248049548015885572583792382485175500534204824970481492908940320310430809050323007986533558215703588782544545718278427626486375885747827314014521764649075125614840753558736191501676141412501389041086207604364613946110943290698832808350946105405659106878177534966935163165977743784854970520032448041881269436554799191892238890741452952579974686319705933896006655839221952956620159751151666300129475309250350785976428156893784305478622359782685533113861735520731866174351824115841845075091997649633694047866430158123243404433057388021248152371142388316099631832447205081549938790835458611253943435564824171299287489119366707640567857774181325253233507979780771975461697394241257405396956542526065849971304547348847901021479486605612704247767646084737041513530671846138948561060030258907065141688239455904675293200356117950112887673328192319125625450112001441334554826262046043961154178777018566846299911001936816697919963389400196333444219082726126561961439286151423991499109774369393437975616583894807974648514443152564762608988320176773626728380768044611965217042661464062080139705149376171806476488738827250154569276638342192678366431133871111025133072862691969096467500425521305379670524615424717077214067299329167718710591789934002289122069747920433953864968281665817890773234078288875249889546074590578021210045020175846649075388442769801561868206680361142266963414252212701874669272948450859264833052568909056061160609027359184255550131690394077096720368166451553160609833896170781715866268750533758548369182807948608780968625107433984390434235219689740367237885674707704507030700597244015754049856015155058928190915694812731538478889554953381956036083413176999479211030070256296238738351346477023693051810382793957412886791553484931648794808844286324406999962815018551120571300130535112365975815392599766465092145349546061127412046819415225926986188716476056849908748119793304841105307635909081982031362197358414422316767268043098239315181137479061734502360873745508395271506258881998152137286301123636845012754834291165393438286951173209240049799587871290266306404165115829161019204881466233120224197635902895287152465704419993236013589982120474846271345840260611228369146254161192044127219280174741005492699430065610779347520954299270720650387651378861176589218001361087617775409717699262796015976536682841105021059664122075404910323076215802321801490368864524554178452977152697573396110449811096336643650973261681886798344414251669250224998533937199407689970648423521941761037033886551068960149333137371722361296472034150664556620292222683537040127141078291436736093570890846188142373958232245787503986561211010450137490946828402032613144801907279288018920751978234534610262408946310152037618441950323372778709960576820747366052518528388812006417666180087401861373515895458278191176440767682077611697073274163810947190349871592916000621071323440142391532644306688082924938683364588261228996162358510568247905595841766424855277606907075534470052532713604689867684196360667936729004058748210752703690582852587524292351670119901397237694282959815729865739583855822949365306356393915948828577313698981442774794707665584106781286664956274007171084307394120846271084144220384654297665542790977252203936545409559594221915876466565983276517927312109637452041938454476903708734290815286507123649654266467749616718795331528641404301235882753816634993816753568289004479992478192683752604759132474627756612961000581745982917363087175573302426078515416609069164426643196313914584560126544290921166479054390986891864459370224685320335100411031886752698293827320896578394742343752392404174187327761664303245103880308371741165000643275630023932633142124856864613839455387524460883835247056445230671943050578332861499695214574918673021229404253734683027773313743176432192583951191913236970762565695716840327124880325930914779807518816007401993774234221794461913879164577142778140583620285187482254501254780617476909707221619667136778860802714594724530597985286751745300483760149830490374318122069442090705009423973432872916069092401278307983254836657225071642951238528724138838574504391218505180992122754344306417613772561319645961095192874830637228486233492444491904268558980004614112652158744705099772253265288419466337449702012118823493884966713120693120582224051534971354793790579910847464242156789336422637453846505595136532644728156836277997378127893681071581923934505832928373516022575817127739736575756865378797460471263725175192803271851926819917519383686188517784400435220379006466153404705216541111363986878921739723739896607992639335605097808466640645060973299641467192720137922397898565627219164711374815726090587366358047829903172491757500331384309027495081387152401636448384580814486186637697087649689231216276249532384975371921757162088038760829349873080877249706384919119527981958190516873110807572517264983816623232205603988358157912992461349984204628724405823867426023186896007333398519510459422904668181847357590156918607616331138009353807527538592211061653529680787460840337585919547522274221559932006125164812648451392909851693330515235916955355721591013597659403166816081731576169618811781971177795842089107519036325768932298882133054753656397633873210525368153651341260914098941072219830872711334487119709246568789747359480982755252152430402157014447380207090760786408265205545137559732000800203136750199256298419497315924197202893994081817702434459238430923245234575791683932861682945847124118958937423672717813748011917449413425060927640713687024598045661303952113384013415037432914883493033636158000130588759332472546201048166403710080511673970680927719260588960348045228317232803681187031272506450618629138861001275954148566415095600081015308217088430975829661490651423859763132193660525117633388134158638217519049714767119063945723171578151019595179218912729338551682001453030819043454878245408263437500120254435442376334044602833812761305154890870916870343146715245652773283431041407392860250480796803485192806596809855333297772986668103799435700742354867077311314589712272131788641879710793233868427693207194387420730083062528118643285570520825547326752348837863723225294085957046976403282869202911899456522208121620826458236485403829445741128331629382084816009173825727982745362705478457038425615653445181021898078023754297882055318390558568805474809499629743584484479518248026939110990875290364212204536332706626128176468053408407649243109388979549094928082647431373786179467142988191638288941225785348943868854632528599402913545489154484053068978162863823000366160237819716753451310493666848144862930450839567184713588568720601921059768004898348890777169855867038685678689630104228620027696190848737373593115559489316471614742241241080915717759369507297908390256697208628722732076075083433157804018595982216321305273881207658074452046050754827966442452381402017094824435270368061319011125926752655181876954087858148018718169579570729272694811666295639408633390466351259744410532863779156045567748268573798664900319980347698852661715714418485150351971611338457054814071731561010311297700803013892035659824806376504489316277200564467982215399291293815609566984236664361860965342421210479582059584960463891055303905596666930735260688627851937917438369125360883055927544388560027145080571797004532153325269863702949511264830010485917986200317248423836494080716911582330878681178100817517430784215819553290074107638543118831542337780918612111718398640817469867853658537784796684100354795672647383581298428564496194855634992668338556800017467144246309114053233502145105635100954667476387259109043659409570451628107003693334435646437801867855817503020706261095751735198245598952555068326031742238547524726553387803327296382780133921837788043654626876383362945442953469045674139219118842149941525260493144551517231835450076117034756695289843264617957174777984619140625' ) ; +test( macro , '94906266' , '0' , '1' ) ; +test( macro , '-94906266' , '0' , '1' ) ; +test( macro , '94906266' , '1' , '94906266' ) ; +test( macro , '-94906266' , '1' , '-94906266' ) ; +test( macro , '94906266' , '3' , '854839655154332653629096' ) ; +test( macro , '-94906266' , '3' , '-854839655154332653629096' ) ; +test( macro , '94906266' , '7' , '69352833223452036048019660867447049048422594495110435456' ) ; +test( macro , '-94906266' , '7' , '-69352833223452036048019660867447049048422594495110435456' ) ; +test( macro , '94906266' , '9' , '624674792670819892886821348974247157367038441509612832874984853143476736' ) ; +test( macro , '-94906266' , '9' , '-624674792670819892886821348974247157367038441509612832874984853143476736' ) ; +test( macro , '94906266' , '11' , '5626570371553000770366419421961255147770032439589200995227891474434035187239751962044416' ) ; +test( macro , '-94906266' , '11' , '-5626570371553000770366419421961255147770032439589200995227891474434035187239751962044416' ) ; +test( macro , '94906266' , '17' , '4111621002962352544426035475002050767022502971311441626541763763792261198666994629509192961845858718231919984114833985236172441304825856' ) ; +test( macro , '-94906266' , '17' , '-4111621002962352544426035475002050767022502971311441626541763763792261198666994629509192961845858718231919984114833985236172441304825856' ) ; +test( macro , '94906266' , '22' , '31658294146038073140673550517958143193937503699159895257943887308245045293131342388364082990134400198608168678756490519887562990165044958599474575834979005035731090290356781056' ) ; +test( macro , '-94906266' , '22' , '31658294146038073140673550517958143193937503699159895257943887308245045293131342388364082990134400198608168678756490519887562990165044958599474575834979005035731090290356781056' ) ; +test( macro , '94906266' , '24' , '285152565696490625870442272729395647608950351839474257315727256295452252799048325652363949074270810510446637480253626162460689279863201482867682864836827407863087624820569082929394398407950336' ) ; +test( macro , '-94906266' , '24' , '285152565696490625870442272729395647608950351839474257315727256295452252799048325652363949074270810510446637480253626162460689279863201482867682864836827407863087624820569082929394398407950336' ) ; +test( macro , '94906266' , '27' , '243759720926361233482907476667027740766805627065699088178027236643247725320494107064742082561094618490109236612895062687353584665860859991879415575955849317191261917932396860642093944856375991467562330107969332576256' ) ; +test( macro , '-94906266' , '27' , '-243759720926361233482907476667027740766805627065699088178027236643247725320494107064742082561094618490109236612895062687353584665860859991879415575955849317191261917932396860642093944856375991467562330107969332576256' ) ; +test( macro , '94906266' , '29' , '2195592394049166382906227581924066334663790360178733838688076505880403691220571309390729652591082755619543107564008226799137799080033434887927401578673812379447379840039807149661750004725486244752615902332029221197778610238611521536' ) ; +test( macro , '-94906266' , '29' , '-2195592394049166382906227581924066334663790360178733838688076505880403691220571309390729652591082755619543107564008226799137799080033434887927401578673812379447379840039807149661750004725486244752615902332029221197778610238611521536' ) ; +test( macro , '94906266' , '1234' , '9591583891277388505525115654797253189447136886605641096683226693736396854292872290512151998759360923701943145747583511134137237540129219701865806527338039412393513087835762990942813556773080107716234535870561191650361302039829302403412946075446106825412751297892836531217239269776359674130746921131965972537264150037423340241624478540689955102073116137675285513450572840589026258095131250791322081023453951176768841489407000043160535726118339631576838850502482585592200779524367753458287644483993004333076374919449019351020134267799153173432760508245927226301565370359856673809842061641312175092790578128981482583891661097755340718832041897219562172618233303238094263205645877970358113993768074445674320377240792952208045529432335140630061808861188401135379799521387052163956136888910117971768073860253216476475927368994288414942490447092525755875965929318466574353873454174423568978107060092961912237658617656324665296966703692085594297491801246417796157302870670019421897078307859164701722985884435622838840530890375919184262292483249645237441871417071068806838100941596745962353204182500699553236401634245625283851805217533262792073996012743903038338818229229536055186386872511025680807437338096861815569495459484486460365583028341745944192156249359977394771788868182593957987578355313292235026581979280145300928658410955632509870162005244044559296175541745959995285799355003323443377883778100846086239675150873016131996875930350018015992219350113946152537456877585388442767668614805636644492157477034654015002200777424371801710940679802301822648705115099704427481311918749176783544920736529548586139472683949148040458809863320043994900963476851393707718685357960075583333452093866553065546077049928960672319740544152092427005399888194730320253239832076741315219908647683627978170933321554476794379260071113837209591838667536304118212015385101618506499462338145076365933116172453086230618448544984434420121504363011969733490863691026519845481227162596252154043336808666820679272401041855392723131101974634161808347994859566559136073803551874710780721574809835031749728330936601228289711332942475487049804198344632033302735878413333870324928721703861529246383352099214222474224938703923296131257451581782344657338446171822905587284519270798848617615383853637901599987735072168595913644523892204610491256735570544171294439722701186324784813173174483048007173966323269225972341862131385921920832169574095034230665694523080098106542220271445953212355824376796872664899930405078699681023392941095533624834406183151593571978375085934954718772261954055173766598828049519860162686382244143267595319712518638744666104806572606245449198069667116209595882863289884166226287944224244325912368780394022898051057039098547506174697498113971272667929236765997561816214125329832660683430329906332085061140646573555743366393621599195976267935743727788827183517095321230820637742126067889019665213164390290062070086490541490087922889187502866643165223474222152292371630635439138794711457873999619661458114893978180017319683380126983120641424939879059628457874620836535554946801030253436946381021247115406263632484804383695320385114124544559909521290483278475119817164333705567704791958463532021771160857295222557768598737275557446539702002377398605084666447155176033668026697232370808420470009321148824428418389705572556366704189822047227135423662015737971723144128915366318163252037686350939438961105050312976676967329177197952756021289597791397338470443572707715044081895964751092291481135333163500784426335086969222350790452151470682249035744789451673722795644580346446427237748663833724773055738574222477446871501122860335729438705137534047869725490906711494592485106885753816974753130866230360407926506022819960149735054814022037339465954340178612152040319878077106430592659196961703359784146025873205470608826469128543078279531426173587139642452817225181534576963768759115834369507960533557518872119645633087366816494975254571143679899649491717075104399517306160274939826782873377728147095270888144396760865832963585642969396605820937742695276189538284034362525529116594250112268646631014509298531366336740362116463524994112518288361022718725186733909161021464483147766958810416653193317981915259425065001767448497554577639274204071071705244125471084327932064913256116544625655097111357879218899746235180031762344942760169055331365226140925327502639728177654134067427560672144839015071652189807317452445009056094721496371835728117777604974208279421394708930008595905196768223073852631733496851110527349046730941946132098007584486429686144893021869768040494264750853862282987486806138208661684993068425524750265051353734028906190482450851078570663574840036302550770980899456380758967689998731148592509807498959236086788270504035504990430792437032016856376680319178405811261802074955061597795727228291245608975661248511105127641151300865259290562972594488780807006164810445138616615841618866683247778933343790417183231981709585853401070402352247880227834733605154654208405827367703397973124817867577312294892836600548995170550964519017755920491134728378033326750515727791786492541954821643732033152252733475994603308334780140629373474610355068194857748405815128125330220343480629589196619680550886899725922137105216388200442015479933602992398666447348073001184279416147051990832666558273496164807310852154387305610527877711252422415258565032409894506552122659357455434448999509546516876567873333914554650709822738555250110914569231361810681278643896615945548615899639843813666952141996624167611621492507842243902766221696245619381375774605289899874210671753440701163534059875806083218591213612602297792283259653398593217024941897584586879309412954558704641934429167525386399311944692329646781017786882955521326213679515731031183203986702444464679264883058444930210295590055606165224085189224526495039065334701181368385574370869084681514830806912736541133960881470315237742308529215400374398116689039427221492261470641437661432564644402005790004197437786314907560361356740707196128715870019180872806279505931484886218059480821987893092959069213150697966414731390314378598567994448063764696914845544937095976949556292692796483284851190274166372600687071534820393215816026820899675947738834985468497728922675033232726987359807157258554534363387708729838351923974285515021519390503787211158967755318117395341875443593494088249677470509256804069203968911906532856935833859629624953249282547694462129874921376210457781519780672138068580237523242109758156352510154248725657237885230051785607446612712455877439910598727422322236228918026459822218149591970911650199903977933286839068419271139224493809573534424910810569507347636018232048772842840705740610444557659804248321191219347571463409422539969701913590898411004567236097895765842127957787359469025195874392074029652861324112210670977858242810226625126442091294631154867160280576157087207127738748079837969738346736272907326954078228907240806250022030103243471070942620769424250383227664179624295113595650922927103176569104163069362275506704125229083883227741648535784720713916998425594827704884440884048570231868405014498867352517286315804797924811180126154783110497902148043082659366781977209563715381227919869341778767396699280870862522931948944127530770998030252387371682413803951145767257140559728875692368709218878174221849437349204586631919443118989273373652595227172082496817103834248085354242741398581443429002334727240172368808661300231451115291328199507370065934925021969833175256299351306328641830228271353568846058387616229810955704081192557684947405779884509699286099118817298430699433547211009079482595408740285359093432367204533672009970779486719368138866188648840163573708869681067182080546042978337057745453023016747935779322389017812077413454635572131138070447390064042098690495563990815384766717508180920795876792077075958862404761890064984999921424416035664890724207484476976948663181789371914701106962448405463092701988465606503300165084244328789019795067098840871060483436479149382772059422903723115301669510704882112896208019251794996975248024340609600192493149267102552688418448337310468569703642800278151785183841360284358832347643596421881526596665057964053827050804071884062288727904628572069704994983452228398970557246268968220658737939309295962851885135390864007109076454907858176227575944339250250806424963701992166486681083315296440885760692193722152386434371762373410590481977858473872297435270131851901627945492845960665561756900237380050320337739114937222692715636345829089022971742750975497841816680681521790589482652539674743477542852811800520246939928822189145763731846324657221289024648931687399148099267044885671733352094184536756797510551247165871717923549062099764463998166198147288178913216151413981763321707683229249020148234875195737760846468403561985525050842464738232714775172951842741929209903518935372911660933298610653450385567441423081564273457132625038138122267839275539394488317379385537074050425412207154034127084217300615381424425706034294800775550428346687417563346954606915929811701307971860847947436154534973614176016275979962289620596506204146325423963174288918311054000291798070696992896378237251211848896156990492511653866861708727175129743629232669035317239800711664336916352757273273019680964663040723297535426909582937904934585625428123881208162294614263698939436684681006337738069910841585236458607359914206604759267241756962489475530594581950179263984531751086934103867126900494224276800810684669857022045988157595957258035294079410835500711458127756501041160821464860452114868285466846677033681168740753966890869829905162812697068968738906495545558280538657098494992456740410755232449109163731371774089491724693292280219243313432709883187604627083249554581032445654578001281629105731324709943235755260023344512209169158809774752301507192585314852433760106795543790072985084166023044553539415733291732895468679601579454025049341590670709620736' ) ; +test( macro , '-94906266' , '1234' , '9591583891277388505525115654797253189447136886605641096683226693736396854292872290512151998759360923701943145747583511134137237540129219701865806527338039412393513087835762990942813556773080107716234535870561191650361302039829302403412946075446106825412751297892836531217239269776359674130746921131965972537264150037423340241624478540689955102073116137675285513450572840589026258095131250791322081023453951176768841489407000043160535726118339631576838850502482585592200779524367753458287644483993004333076374919449019351020134267799153173432760508245927226301565370359856673809842061641312175092790578128981482583891661097755340718832041897219562172618233303238094263205645877970358113993768074445674320377240792952208045529432335140630061808861188401135379799521387052163956136888910117971768073860253216476475927368994288414942490447092525755875965929318466574353873454174423568978107060092961912237658617656324665296966703692085594297491801246417796157302870670019421897078307859164701722985884435622838840530890375919184262292483249645237441871417071068806838100941596745962353204182500699553236401634245625283851805217533262792073996012743903038338818229229536055186386872511025680807437338096861815569495459484486460365583028341745944192156249359977394771788868182593957987578355313292235026581979280145300928658410955632509870162005244044559296175541745959995285799355003323443377883778100846086239675150873016131996875930350018015992219350113946152537456877585388442767668614805636644492157477034654015002200777424371801710940679802301822648705115099704427481311918749176783544920736529548586139472683949148040458809863320043994900963476851393707718685357960075583333452093866553065546077049928960672319740544152092427005399888194730320253239832076741315219908647683627978170933321554476794379260071113837209591838667536304118212015385101618506499462338145076365933116172453086230618448544984434420121504363011969733490863691026519845481227162596252154043336808666820679272401041855392723131101974634161808347994859566559136073803551874710780721574809835031749728330936601228289711332942475487049804198344632033302735878413333870324928721703861529246383352099214222474224938703923296131257451581782344657338446171822905587284519270798848617615383853637901599987735072168595913644523892204610491256735570544171294439722701186324784813173174483048007173966323269225972341862131385921920832169574095034230665694523080098106542220271445953212355824376796872664899930405078699681023392941095533624834406183151593571978375085934954718772261954055173766598828049519860162686382244143267595319712518638744666104806572606245449198069667116209595882863289884166226287944224244325912368780394022898051057039098547506174697498113971272667929236765997561816214125329832660683430329906332085061140646573555743366393621599195976267935743727788827183517095321230820637742126067889019665213164390290062070086490541490087922889187502866643165223474222152292371630635439138794711457873999619661458114893978180017319683380126983120641424939879059628457874620836535554946801030253436946381021247115406263632484804383695320385114124544559909521290483278475119817164333705567704791958463532021771160857295222557768598737275557446539702002377398605084666447155176033668026697232370808420470009321148824428418389705572556366704189822047227135423662015737971723144128915366318163252037686350939438961105050312976676967329177197952756021289597791397338470443572707715044081895964751092291481135333163500784426335086969222350790452151470682249035744789451673722795644580346446427237748663833724773055738574222477446871501122860335729438705137534047869725490906711494592485106885753816974753130866230360407926506022819960149735054814022037339465954340178612152040319878077106430592659196961703359784146025873205470608826469128543078279531426173587139642452817225181534576963768759115834369507960533557518872119645633087366816494975254571143679899649491717075104399517306160274939826782873377728147095270888144396760865832963585642969396605820937742695276189538284034362525529116594250112268646631014509298531366336740362116463524994112518288361022718725186733909161021464483147766958810416653193317981915259425065001767448497554577639274204071071705244125471084327932064913256116544625655097111357879218899746235180031762344942760169055331365226140925327502639728177654134067427560672144839015071652189807317452445009056094721496371835728117777604974208279421394708930008595905196768223073852631733496851110527349046730941946132098007584486429686144893021869768040494264750853862282987486806138208661684993068425524750265051353734028906190482450851078570663574840036302550770980899456380758967689998731148592509807498959236086788270504035504990430792437032016856376680319178405811261802074955061597795727228291245608975661248511105127641151300865259290562972594488780807006164810445138616615841618866683247778933343790417183231981709585853401070402352247880227834733605154654208405827367703397973124817867577312294892836600548995170550964519017755920491134728378033326750515727791786492541954821643732033152252733475994603308334780140629373474610355068194857748405815128125330220343480629589196619680550886899725922137105216388200442015479933602992398666447348073001184279416147051990832666558273496164807310852154387305610527877711252422415258565032409894506552122659357455434448999509546516876567873333914554650709822738555250110914569231361810681278643896615945548615899639843813666952141996624167611621492507842243902766221696245619381375774605289899874210671753440701163534059875806083218591213612602297792283259653398593217024941897584586879309412954558704641934429167525386399311944692329646781017786882955521326213679515731031183203986702444464679264883058444930210295590055606165224085189224526495039065334701181368385574370869084681514830806912736541133960881470315237742308529215400374398116689039427221492261470641437661432564644402005790004197437786314907560361356740707196128715870019180872806279505931484886218059480821987893092959069213150697966414731390314378598567994448063764696914845544937095976949556292692796483284851190274166372600687071534820393215816026820899675947738834985468497728922675033232726987359807157258554534363387708729838351923974285515021519390503787211158967755318117395341875443593494088249677470509256804069203968911906532856935833859629624953249282547694462129874921376210457781519780672138068580237523242109758156352510154248725657237885230051785607446612712455877439910598727422322236228918026459822218149591970911650199903977933286839068419271139224493809573534424910810569507347636018232048772842840705740610444557659804248321191219347571463409422539969701913590898411004567236097895765842127957787359469025195874392074029652861324112210670977858242810226625126442091294631154867160280576157087207127738748079837969738346736272907326954078228907240806250022030103243471070942620769424250383227664179624295113595650922927103176569104163069362275506704125229083883227741648535784720713916998425594827704884440884048570231868405014498867352517286315804797924811180126154783110497902148043082659366781977209563715381227919869341778767396699280870862522931948944127530770998030252387371682413803951145767257140559728875692368709218878174221849437349204586631919443118989273373652595227172082496817103834248085354242741398581443429002334727240172368808661300231451115291328199507370065934925021969833175256299351306328641830228271353568846058387616229810955704081192557684947405779884509699286099118817298430699433547211009079482595408740285359093432367204533672009970779486719368138866188648840163573708869681067182080546042978337057745453023016747935779322389017812077413454635572131138070447390064042098690495563990815384766717508180920795876792077075958862404761890064984999921424416035664890724207484476976948663181789371914701106962448405463092701988465606503300165084244328789019795067098840871060483436479149382772059422903723115301669510704882112896208019251794996975248024340609600192493149267102552688418448337310468569703642800278151785183841360284358832347643596421881526596665057964053827050804071884062288727904628572069704994983452228398970557246268968220658737939309295962851885135390864007109076454907858176227575944339250250806424963701992166486681083315296440885760692193722152386434371762373410590481977858473872297435270131851901627945492845960665561756900237380050320337739114937222692715636345829089022971742750975497841816680681521790589482652539674743477542852811800520246939928822189145763731846324657221289024648931687399148099267044885671733352094184536756797510551247165871717923549062099764463998166198147288178913216151413981763321707683229249020148234875195737760846468403561985525050842464738232714775172951842741929209903518935372911660933298610653450385567441423081564273457132625038138122267839275539394488317379385537074050425412207154034127084217300615381424425706034294800775550428346687417563346954606915929811701307971860847947436154534973614176016275979962289620596506204146325423963174288918311054000291798070696992896378237251211848896156990492511653866861708727175129743629232669035317239800711664336916352757273273019680964663040723297535426909582937904934585625428123881208162294614263698939436684681006337738069910841585236458607359914206604759267241756962489475530594581950179263984531751086934103867126900494224276800810684669857022045988157595957258035294079410835500711458127756501041160821464860452114868285466846677033681168740753966890869829905162812697068968738906495545558280538657098494992456740410755232449109163731371774089491724693292280219243313432709883187604627083249554581032445654578001281629105731324709943235755260023344512209169158809774752301507192585314852433760106795543790072985084166023044553539415733291732895468679601579454025049341590670709620736' ) ; +test( macro , '94906266' , '5678' , '12032817648505424732206470115984402822087851800458754279636201919240648069545320866560153680915753098175361305527571944284392752569770663535206811189003646879509578656245380134150984700793677615365069140988087774074093292666569225253766058544069550347050527174441848464033769865947958339935711577356378541412264423970226396093645375936214905159261610350242858917417274825574404844112579056015150088968297195170716956710849024033030314901530321313136125969347224049980779583582657176881341711446052030096202772974538698445525008118596374161589518848084436336526803665941965555491104046737440894040963947109593967956480178145670129677453883803551841426177253469183865084475725595826142523985262137749463269279257798034486481726137836527313367452357290671314328438612857618515953366030368261430360540763695870271485039165724885752553866509861096959097856524796407276935782076995718449804132659747765788304047343356811406221119007276554404855974610764195529043031625022180466201811329438874115924370207854394962989072466937684755950839558855381231468598531110161791599549283779948049180898253978038930131391965203934491358832834904237088198978460478436435260346993291323788040533668759476466237387161215852475434944660862309069972151382884427559495414208822804115701913705271785723745174681820409251541457004542480297333724163305849231905385022165131472866706690289906743159860846280981424473469229829927326830076613963484251270728729574503814307791762786013555601416538606549575141032711025523511415888723638864251522238403514209615257991112949184147400897053839753457149809381976922528684839893079020417567683858076689900826568207181631852815210327645775199600779525983840187855012090137702437886138818889991865427565806357553975294746020041388619646758784835829444515981357443648673117967946792507459637166782407266051469231502300232276219189698940875042523547644156383005262958119279161427467899540186226164668917413440447866544343462167108862890696625841719457545138663417647004060269444482339780740345497612893664834632640370620127200676855405941531569747479245411572674091251818894475403815473239183886002466157193530057684670655605573446847521994094849382549641374712884009164471656571372198449910168561787316766669347248358805643837182081303781837240736436136105361562692457596834668246060064085754181237451898863990804515605190388337710712867999191679779786712129894970664010407413944105206949638872966539657011251994137558113271215952893544638320085154429394938826746648785358611940674926917169614084840845838330085461611673093497785528104711054917591387941532664903919365872012413967652428893771254783514729383993987904033719641464047625904368835612214247748109590039950324488045520862407963337473558506985216736383673379753911040520601562793518299011996503309262568208883619152964120357680502143243237914460301562979082299253093538389428819917042632652200784610277098397358002737455993489830854317722387980601693621640290144850488960430945867613445370736462277356198969776749170074469142959139228103077704779948067569593268552335250360809034517777505978089487420438155196173015195413707500749188879413696451279508390758428449841376760780035529721795084992757493136169128293321086137318909063123039058397266188325938039949845723539644433753473294540228295834513955127390193735537175144046212555694020714759166871608060391688382739009845903946202459806666413942788393631458788321174919289511304789355666166018710631603596670860213317167734166889129692249373293565808930204157031991011885528221419033566927244666672894213270515941662085431325595906230594776340409294990273749504264542573465334640502232608314606771517369952134843645398223542989247175132652279714716937433111501880963356885109815217790196450752957228567594353774344623557404477791808889243706743536894781675724627289947304719225770725660654839527433954061516841146022327990899330817724998757824990111295998009049097615922407581255190739491092231346117657541300062685972295196237757295575969914209258890395384934110805224837375196790993957760232726873726409663790983348867817606845992238136671232375378383442128153562558993510087405303974930371982970935436148399729480315961683220510601978266384119209049691241779665749455934311999233053059017638411476295376290561801091208176239186699145687486729178616233651626665713543619439901912710580944645778155158797462852234495229231406539206472287577297378192253982740258520802032184319738335496087808027150192808403729360390814153726899607792522414861087778808864723924610633595805110618744865362177310122714818412795648247881041310195803062313215902474261741174952685814591966714305480767184438698736320248721848847642234552533028696642298731293921638337742568224929679203340715151738759154672955264904729487192815222409704216298143439170015879950939045057249309073969228984931579994969781518397426907617306970452320824844550818387028299796381307177696815835155244322539561008715495766453539759717077193466845576102664991398263517768253493037683951482880594999592487164043876965317780003505760527667863680438637377024026769527929551980088550989890140816338761108689882533404008958689956441208348099517790655163832888672441196339023333523558262873440940381150551323449813051211874782355328615332116487157592812281631495362815861059878771091573384226171301604486063550985885547526084873950124641753676687247950243102682512625690242813329639053488889144642576604385864315139668920318181435129690631047099936094981891064896430786909547908075022480142180945007023530760518540471631799916726591085967028615767603414815858484391191419226449103172750734862583321173181611826808717155895467441107144481818474820145538915123191086233889850661674240080442220814781759930155904531817862470486365345886110364369758405347228549431644962312521692584793216958186300617894642831369657323204177058526995631057099851113254417633669886363824556236862260831309128178167803213227296932516696703169947834651505156750711821678584827987720266958112228898408860533624224495113943886752312598411859670081240718595741432294942764857421091909115884148224555916194806655809926642996956901825501253612530105826618755517164012710830281242388235631527379824843157390117320858596018324726028114634513731910537333745080425512204214923714850269287802358237211241477533384595700504349352943037853153152826576013563379638817785556868194091209215931133480115980056464675106593427706835334947158188177836411830984886508981465689899139213351717298512840062197481925426346012965958263308687858310254839246643736356288094423514700890181531946170936255870492888090106543963957053638462537602324269379083493214926494662001476819723144975153483394390016211234911521305578087159665053195506910683427552629512701423004114557334590767201287380253575889880716924180835742565545587297372230588277744954790269429956487792324583964844408254629753937326834163368789921452639360922619001644423905992054827955523551707437217080870067136099865977482032198335037959434533270675522876697240093272437334734369226923188059535469846991641709332683658104575190444624146274210567461025953960170291512193215781838523322046313242892959796365884825784776849648185822682474064256026698235271594627736075157465861135739641700807125348820678293047370189781363932882694927128285410177891393529704049003357809736578523395638279194743744900566551317265479571829718951144370147604490513174682721505873577926782362538993812368812010097486662549501136198241341798084746545706437440426878375892211248824662555732459007737499801554781654267879320262704068105933519284285796739713621966126525083860893611057628869197088116263187425689411609090653720984344418988835030010895382016374020344833711823116640310985731777663607552620413465337138339866989132413420055538428253299998808303388845963185188581487436300195905101117842154869015140378602684126069213877902049366627282585389279538334206573795995374258165195704570108297045710018639586996443344402990380550529595121860257242747783754028054652596757584727739810928998066179549536463070344995795834380103032675101592624345721957432323326573571256893898028138781425679040966486628547984753574864434930008117523845237304478890899718331660641419486842158394473459007167484277217322766481893195761391938895623708651566392702159311537448090535583956495076752757058074862172390454533499093851240951296540985779357629233421157703016528130291156343737642593244088633852787614747817627060006991669568592280723672383298225466281340956636710431940328427911743530915134552931031391690006021236672575108176444082447291342833803642309708607039528118937917030486917866538554824932145847913873347906410715580065154707297637925304057208331186121542705437629918199561558440077780020149125928636524680160377906904253706618745984744483286494859496634897033537125257750234158366566522768726012073504864415325607039305152748943100533772051166644314150037384337861942612593701611683871218292642963890517076695142661403572711320388033047007398654918216722136161411678662937623850123091604556006551841441589614125921909593939770390437476075298171895573919863135651088828848336011726492799841320111649935389358931258373693459145057553136475922751342605359538155293383583876955561910069358749936951011082089615693841896629336961254394974036986721026940350856347077152772939451280308399363104652576626172429793776211333913295809413213919318285255196490381055544205313396583888277769550637211217647203529389040683316967313521879297011278503165986866646581137787534538214235999303080897442666172258679022325039014548620740672684311806497429047056530576223713193356973396804439208879107248745042555605441287111013049709202762299259851107012441701468738419926890133556245430056477998293002461917643271629591853938120614647619772495115562085600504853146424640985096824494050598829781714618733157799877227971474455616632639023850925729720213591779252776369176312110497936405970870772189359848240927140061006848080799072830556306659756678997694657936924990345096410314626570672149731543628000558026533834459167842889970614149005288838811229513837405392153251553605330473659867312295620005340633564023904208178972115034037935254190823029327420408002622341072381223538257497215682930180996569122652703053739471871654162569414951520531206458862671624276235522538318964461432849995356820683233465138675410827490596964352422796420736525862662409202276892082905745273014755041772993819374747043291676296825571338645605019288235828607460219104472171905393978286058711994994075946946904501719626129891297785262794903831823520324741271326470009925340248044413698893160087471101115598827156017322849926448246890250940872800969912833939106037661646340854638183562189382226457787900923987531877913431946108694947652717492923066187775746930063437977519195800521298729848366280723108648799156318978065768015360592367479405252285966318000015191998608772683676758058031311468294723167697582272502760859874036909801930740974001192058591430098287098021570441654592505727247768282011756726844525801256651444301950079120380718219338329468008534442846077685713544194007524327955071955226200530986913459845314710510719058167265959825133876149104200332459364223361260375456263610906578083438476313348490161343553564484692187424842603773823747426008609267536178919597384345623591288999415207111940819590820240164261067200326676758012794725260339664703418163303398007586421287243859016657962176274532712513078145376826038329107151236318002243613099209970831731135481008172826345298961517973963163916705165676097591487481466079223465813873607872273761995059993093591322303896613664321628779241192911035846341115545622374501606127977756985292882117778296500478276339993749813331078686903702537331445966445686036256887898585809843950252338373839157713280364698259134024338989451358780140559424371687870519586950515334379886144076554360694721608275939343734737390935610438901882220547279311828445041103639111103188607674601360722196695674871077543938123944828376247570522481733445127428507577252676752726828669296273888040688955392452214259080886549295627930544496374040482414174429554699068859457610531632589984450033487991393950194379605142460240622750964605904319347162317103632880464489765441781176775360255307983114046972917021261575999747919513175356289269738252254493902081778863456041493700800804759871388208118144666431845192191907729537903174959385672176640184810677326710369561461912187493932368918706337698762794615949381684820435117964874003383886204354335841513328726838198927086809536254198720567097588143419818644573075112705490751622292191492544793418111741658483532767411666600528233897824313428372479855025933866719301492980684042893544902172403475761202059963960896638007212043160771550410552889811065116740233744236032304871579001993160935959555347073311004243774883544443676731406104831265297661674183379974269379741288515676564618943733469021389351199332674318818115012130962124777380484159115171369334822744164229342075923978372260068788894241149239047819830879098322853736363606047921128478685310683095184709943048770806054769494926160412480736093641419077309213991679052703634396648375610853612922041643781461899880570131047760466065993555093987696077930050904841973329976985820417577209060155514571722895551726144444596204596782453047002156424345570004197583274416101355362390738881463523630967387072211376360805282936674787380880650737793203297867993622101141663905879536696169691639238866186158654641243673999077254707876292273024963076334728546666159776798341058364962760500123648903436613222992540337677988477671022338118694216304682423334130149852860681684099263517683335157344038308938179479603858917811593200169277994326389000742115999246806304045702432487140508819529399245059884575934708946209516322574789907597746226957553035886293114377154459544505608389208459380956440963140789343305699658278203986551812398932069405456026560759534279324948812804513062587167345623977971097453549344764469259507711376402428457076157055436430677764738886674081844106383742912023140510418552281742188746389236111863491148474361612517064934024896521322519834851151242772104556306598929440002152036519490819251376805450957184749544824693635603569605225972053841581004501584100912328333976003102107491085953159226069012834587327259971112025925123819947881840747175767809667062611411996051112013271091350150777864798314871955256044949338844757948457477116889094191094382540558054779516264683712607043026838398910328428087833751980730006443119069122334166099941402646601365567136347123203738359088947443981087204456279328714404539183793412240994826870342095392017313400572110318532747843060607288706258394994682842520556381575601014199010490404397191138445152855809707016425452959778664359588040560748735412597512323836013768239677434435239189168997928071347187463000837985697466045497488955639372562589230908251673255473804486520327695043897071532175037437036938183448706068445520270184271860267785443607757449987645862550853844492488331774133732177529596230056374085739368318799336491781716721031643253122590074871792724944404133795117394685504903169776472613579323786988436816555044871147023821295375315968422237070919604915553260798754019817204005435917338028778866898767783201988249690480208167510788846166868446591501548151404396048081597044050075742974387127512894683131544017091983972922897201447567071326201918658162425054687848305577141613831948331736546313547366384763806330342036329442085133559102820443474867650075586800703988545083847887658720938137520387462853564941611748541059186958982227681935894334481608643024722381659381938989731023292291485815605912701175709672139292877678190348729760666157907954715630362098750256936461038759071141133514628511273752727853532279858408268908582987443368819679334383388270166337798654040644855690261540077459818835228437887729301076041005381936867843411337332815350029407543350462675437781165812720616995958519407473614668214152449569347793047763581660230557418465248972034336442550080954052153006780131714480535397523095413274750723701383225842109411649460720870423187520888470553057940395347526767669497718524603967849112705432812547718499111843247323011841160686418751692868907882025078560674843768816179401584803887200747810776387544791913903025938435744852431951915576190055048231754367790804864233775987695188801541755557892125771674773775596365864929152862381755401283073853655055425091448611697016439954534260814030388938640509188143381711317813476900790628429257746511202468312957230036100116864480097621669013542313504580498125607583068356957065062879843861421422680449125994612477774818757161945326684776971564527300842862017927612360118968033138171953084120164381524148059624459163118084096733232992442581634862069037490046169948238393108530288105627559374357574375901411757444196980563141505220137571144388964279304678461638650126063683382309278978344376529180243251205221507357892280444330744741037298325319700933898637890602101615296398869580920345296280236271953557041411865760773333961802153204654733800918538855539998075391359632003872695291240543210415227135533202642183404859216781849310678370931836038236340074191979283348256435037626347573331738056630737544630627819667754832890022502410501605907042038148659166291897056811128443400490554763520515617080334010077029504407741614050704547796928760915765587321003086708428633478958994497231881728742148146582878333513294577932133195398397292515911616512890368305984393578729868207205694140862127741104528308067361504231110165275192585475375358000676577709244330704876174208560189889742189118009170492691256513264181013828227165086680711420434651576133518693155463307951273683890278139573807332751907304778544307753690835516724244324828301915566152584064392368154012296367388561296655115159377964858217285140994654349136595083503371058992673764518566714682145847493882822893394347204092233214651141128348419317600574953305420152824611858556704207679618775670228729011916634895546083736101005758230326310636673429185051800939052184453293132762586281584909086427718838454160054742974280328396661361347295963302563629881389597757395692922460506227719569272480843843963982294218088153904303273847479651330200041676283719440322315419856051041525940239722748989045813626337663435654703148317669134876847555469792411025033420364193061667681444556983341506990373187827551963387220108573965968914968862001608003924039023517819236072227063268657970009813282109838740945014605897718935027854417422516891716032864362714644753952562246051636958846719430334197522545309124095753712501839140881772202359462149006967535743381987382494199903798783450128864108137711379338678990406261945617986484478017729513417966059143295468448727905734551655932034516014732958476725736677666360745474765405553207731525120976743153206626090160055202221435671053558239271799027644260676893678561236876461169942483963790905593236778663204622182700607533615177816293194243328323059827764195754067310463910960166786833097658112569805863287752396504825639025116157475645847961748673868648985763576921316360028625597643145982378614155913337308072899028630354506317000731973048320498440559655009741229059616821075679153626408071146949434874870710442443607598092254881233946034011674932649197951588391079113646195367873645750872572676353074784800670128148448926212428049339412055475920927927064266795956572600200498190491828386978461485683642086665791764122916337004769909968407222832293743026188332895081447303907350456907104380292438133354568556580913923940135089837451503139566900151184776483065461722434703576835856162451903500950263460660059609102492532142956330352718793762144273337958725209863219465403332730360337994136681320539676141959170028609571573318264331511603324410628374361114137620410932826988141316635961417071437490827691742173260234374302730791524687955576187003866752766949337018264318503626167264228405496153334243531140332510516296899883807675047755079172377866058979779109219361302539854229267521185113459426964212674944243036359083834041693510700598946606285775592307909800370642066904336886030146957671455743670251078744477019985475848795376334708946576839355982663342271782974876971670099428998708971102417217050194310201496909274080129838572650933663158961486164318754012103629249337765151672364719569977796470263610483643241743081238512099346318125509126340730907301902331865609410500322101548902016145028474991172896518663299753954359738145858524256241079822888388025974877315851174825234099588922307983039849059328140405070220292462966857742931975247086268060742036088901447914159791901545682768198127862624633726084182944519076169341611788879344467332624457235181005489161468437468286277927595231710889035229963620976542808014437720825245958218422545401854965717001947936025069441351490369482405131546123008735270958799806732505582384557603513044063735545265173441077422655347016647100822557881227410017918031724818941284851218632476074548990913121757687254853114905647152161232816453294063938585231011698346476850219902049515565302989770984364797494877746871059691242951446947928616748412677311316689309276924328166978373287156127637754250091827262880001580912029087294416597708081303921574616792751138598416609282955474549781919323050366795607116559122995449444513824012921931191554790229338378408917767888764757481247942357523387981462036482918774775255481502617812032424350337757705134963581392988233010269239543026399000590407670292541798141931143957825519431024943808265104606375893000801021372156629170649936482063505577146268662962099488092098200661611049654157290575516049458547343584333829118330105341165469101287828518455011376471874002702126745604311883893741228949110274354393717306210252780458508823091743222111041747254441747473986354767554852139796930960587571954051842952106734815850369832317500044882713313649500485928442503705962330735475241650188479077738536979346401179945139932535355966728284296269303465382689387382904506131090629101374506641285879526447951961592499074899803465202603048622508966269246410248303951769201230670090880245754249900954768059240928580835677018471478117764727507460788000454066509256352049419001433619066501137325877958902450951248012775946853069206507022910965027828695344876662390444745223071764327986092164128821369419529923449745342622529520337107152499452702345241141322434371161845076945400253720116974932841155231559246404477495415318558856170762805541331599037682445748096007207307457259420504514213233031560297159337458934773052943897370160719593071005636639052337398910516328917458761997763791052147675868492052732846056244343846856562859110918170514850638431897116103962577287557650861624128410941073015672545799355272188821573142146157647220592136501403389440498405045979220449287529240951068425759059315541517416653195735778257997109940532355650068087437125593263015404801959966170854247359416368888999714143993665160871834991848566207054598521044690133585142761653289736942697455812090483602711809497731994035628689666322904923368824343322943897077533662696509093532125560433883239720615037830617553062569400982442551469212711958432874003095252511501251544368163946986793533762477996739664587856894977815882349958159300266076187992625866248371863178211081986479246265805496439281433789465210502472287353963749371542009248496304898171325225431490404443696275192260731587223678231773234700501786989060062073372663103468326762818735022839079304658268264383403675611385203208802610883443153396372155598085767531581987651375303196560138048749012301078065330371665264754684135929975327450958445710569685713002470385735812499009271125281912305498904570924803427650562790575789311044993863517834700777416970146268592915939173835339588498234255520467622101245918125290891960721252962341466913538814589814214723753781664749478425706364352461070224233708179564135246880492730639677674623872309076224196922090720446752424962016499908060928640446088590198190025780328393379622363600793252241003767266825105789787022775751765687273282872681784817235974474959304500106923652827770175776376057866784637584218919587715646859185759124581929407837290204615476399831255232642772149604749965883742550558896424909600890318701200878005426405783690223803023797534308676408970377177829432708888482899871770661919987560426133634342816194791652942901002649991930864509397547495136799464971411961885951448364705084776854218557154068032421447791593957493800552595011736497560627402048363722641737191562791467192752850831819871126942696603819688457632571061264341307436496659871052442884327358088521230434779757325515620881755317489614893979565115465466459134952019342787508889329177160466567164607203135727175727007576133217386625201585733132524102256267135974095667268967387808616588507490403645684015340306735062054190431238197422650374750608082120129477961774411707229963815811485877200700501734026677170462507781454324736384494629139100648590234634063450890873793218123159652262636940460561659812567660405111805037271771919133677053378340571763804818663579984080144826950600742568620996921074204543790255158895558727569627833033922369940173618424508834111810651656048535574444567986963711635689671493979686086392051590735412326987468072321026945906095052728783747681972245983868013037928884763904299129826301670561248217272709934758302637217436483609049259979017913572017677999917451517664593806401100830094206113930664869181230286977905241453163705128560161844356057897016629444587321825339889932073812247330853655199279654850681643123911145550445824784071197446536929226480929787125781620877835455757799725872429412183788180777229189273296533362017032457858813870135280647619436731981832381160911893129851064121020987511004669726225726728447523886592540185823062928562680797115677436491664945960425463840352618701257065715147975721913145513121975941816861627415802916250662475683313221460810083733560259082176304656979800876036280685013224264755601477814078188584904150365677219720532288211268983178369847544314641858955739505549156547927819249161988086454580912459896288180831839198694747159727783540431533139780840118503526092188395999937083438859471424422484895173339353662013418404633914278270531257635152842306416202901968927515006838776193126399890861893238570955140721902636602451481280533397113331997181668368168114113211417441091536660280740752073688197951869383500740801485250371189839664555255637862300294894725338807388545090253060968823072953675487974449697590292547112002691372243223615249165249747041660867764509155511159477802075808850762651193636610867311554992969899613510446151689019965900866044828778159525923906714414752885574464308524982926278589922516043567064422228451889411464404645562403027336145425521604775172340420217961207569279554941274837915390099345785110541869546066004279176509714969623554456015482986407451412652305793262123648552417609567710229212341687156454311883528279150390985919008321641915631234630542109381453293097771127251164835846456017032621220535159510911806712579812990017904201396748639648986580416830392353504059649048195263808560060144490097812861709892171321718078141652344634889987253449435365479232110959791057112787715767591956424199236727218939549730947807636035618617124214592974632640888278642920646150269913678711900700105591753932021927544248495416598915245127805617973028286807341594473386206410511414428389049099794186454102765796914905933255458663787331998410234134210186357410895835541247415216366309533445597853759036910747535179357644751896549954802762133472758890605527381638477541022802894735646799360073180253868675653146890507692412609328780793399715860489456638327779713788516054313521050756108383748787190630773384260645245277015038626404267544599526329137987727604904731562738505220497843816310101861170621100872755427778464809073169584368881349788891479628643600529445515580370114613383736664314978973619136220173478287784163951945648158666739841536848953175419910538486514713806203315648665785618237610350582300314779025897090284284080969250933457877228872443367222249154142248644276474288044127432827952859178595732895202190015471726020796066245204963376906354394976290239211712022794927835141158864526574570946923047666699485949903120984263356978168759479817623935013795014196775910220111958690782426346191285770042525098984695899814199136259926824361465285823048578317155487790775485313929046655222874042698387928987865423117119839944817973165334672655644240394784576751152259628370824434663024024418575011518490382064521827913667162089667112747753535124207783675418967511974700275667309012046788487060329223754816307592779170924531501164340119876000139327544408024106973184674625473383812276564724893335841539005571654820183265759775079589751747626589104877587523415006319142401438844584683685256184472651725051979384269512266601971450685653366718533020065953355981712508860345534161752796241189385496331101145400268056092980486470369444513019881534614061799341395392897417347975110433595794498856720510672308772750213294104276272132667497463492787282710357371813082428478468377819129538727211815622333666816660354583565438907819881292081303387043386670876926764469958036489231885191131050114302131977936474847279924851923137714263077854243985023606988127523596289821331500111059950584764623037107983656960989438380956968393260575271072778863957365450795572899629582643385628639710611546711708409238271955614736601631291370395060012833231421354443797341554577170376506036564132217557077652411894117329603768900109332749511859736210742285027560130448468034446432758727729638990040491574996250063104797738677059556962784396811723371443252662772605997510646452758982125426031044458649357552995121303204693338942472794723310009789920455359278131277695870668310315876389946031424494549763773146136063430889417701887448847015328003015451499112860909942403248329916941358489871131665319203260702546158995642204910162911659670018116940727018797217171686323023556118323193198342370803796953278053782977187454671829418430921721985095232819212480102940486000736338657164939674716847410850866338919788038362565117722358348690989096737227059283378387520150072310475969531030512284930329368248541131113766926569221020923296593566377299675247629189109056398144800021591742635347744703956072123890797151089046108298526010507197557242777201909634714422471270603537857950184437259093361956113283048564569574122170292703201825073022983566835511332308338851334507372273081202885655714787807833951944184851958437229989794757451452736941245634812065844048175235449024407397606058411010621436622691612507865446029785762584964939590202876090478392978007566584355372687291804000734909051848660440791202433127588453190203200783903284912792280548420676834695155901857566765932088926634171356382407121102180333281700812579308596278561884268236429082157465746397088329202574170766452511505505609003041124950089258440827042552762430618486885201276510552341532342351164734524285396714462005001978788690975960312082731929333386050252112006807345880064713266643891024391700346350471880262858040712474770262634884317585612572195523131314179386278947285577465324615711086122333531902738278585784646020600313701514942125391959071309667102965885213697839889156290939743771636780743647494786980566347580750783699119643179162204062000548787439490012304199473697303589997900840621652874808426421326071990248127528436949608115779005494179734937511431781806145857785045035166485825750634750296960306410410179563289780730826789234509202931820390586826950654104129396809093876099264731036820798174964438055115624044199738101662825807851197445426685021856220844261848759266200674656511060029362486031624820819678918152181355926111923461166345822665086176145950743789341584980812952752231860843257985965288802261190266665922655937859396637134691957840093532444525473306658768602008060074798781369928554199058085681741549030727173827517234927484381244144270371887360574934364399214113609316363985218988683805111173090608023338304021000410004993333783004263450282560060958459050745590194592895933947062092079507573081523402757767724788144449830636192589330164576778830549052766661774876685632674136307814153444590770266999239828355457576813955421195065159397418434372715876860476997930972151568408519046320497117726447903332629934498123201460718775034315147902361476205883702162559670339483592737874161365824447049081019047867077729938161516575462820068029800463721563526770860295002450363435919771658499908957051051713169210155056685711478948292601652283703664279729412723327993385676972068945177529247890734902739568992396004082005895239640239584914895675194441732990455908284962508388272481664809644013695108530643590237328537639688567194704667459259852194847009346130261141412179411299994375826249494565666674099752312940749960678432841327379608811354294970105991967067932527833097758928415762643944723789054971807292766811411062804902336531718448905647640615296706335520835436041593386648611858094071235308269292644418143791110200993361422914793119640919331990182443330345380585754214640238824260774995215366915341497235208474057031765422776345411042327893101949992571577825558691897895422945443680380208657578495349595586606235401227143323363094432958840171215550050203924175856785197077586124718868813101246599573589030798669834807255201536300814627715056943239448585159116823195136012406495891984611338805585159868346247052637564031114665756371321951326231045738075829116360629934323624216434728253094934162532761445177538547165024471725562255682921126585840210275028026032072889156454737530566706272562834758199753126146886585122828302440171763025247744940890748240827209734322451822354861070551316853275578081420600654807730862579379336164296300651251035620903073641444759072951433003329108395228654468968443998724991943750648399825412774577834064138787246298154005871653201690041161564805619094094950177728315165333892502449398614595846310753261175601850635807705775203998921942871973931019055845469784764447913903988508253744480825540367906677867871057567478493188656741810436755808948879038430592843598118575241573451984420451874438273802788249941071249303464372879792957737080283657705694830680260355087766018017548240826889393233567613079361639516134438559058561470248595710630583243521624876087878849326799727058325744525127686358697175227126042729704763198212221500110961927927031953451726345983879650304506115735253749823992717894744913635383053788207368902228723257035589214660773099731574328578894614609958412257841707173544840654053687963529161718339377820673974804275660397594495763320761934541624154607081082091431381630887662852444276208094195753892541482888964133078632756060019952316521890141964819830541862502886279942861929515434864567266354539499955976735355894393495991004445955069390234829281284926336527704287398385545271066278910515123558177655155124804872688188708038652699563430158718539676417362165324740950301161676147226987091336686975730078772316774484804082212792921345388911884307584665906933970070288913666161767306556816492529686126542330576930427952309859851945687695616787391724886208606078219586577521157997471925755521830252778574776276558662045076936010197431001405073169538271205697390441457933908374685337544753066892359751986805458682161120599250577029450471790531116688637592044725816809350715401468061886209608998308808761053155925047485763330982810135796784437153235684378855933935608225979566539014908874229318867856908106633416008188397781368955225608754496472366002973989622781331076327936906421333836156329940767987829949219414282739937552368742050095369670510834581278968845142676270307586970560344050293627832921967047772968940770231187440894414891611957992234348384361908134992564366682665696510978419367665490400052255968546785818638881481409824051219338973454619317589006191281840488521392932267525779747925510077945960279398495734167739330399574628957203655424637187995438121309889157318399563297897718347938915006476879059728332276590034174776666804805807585137415933903539371546508657211772037063013142093943376911484717585548985036753668986990778732349370860695937442389869679255309585195314500199898018163496806602205369815418049524140539038443752983715573321216713716303309876573223472073494658660387196143966238355254434272031875166654429112534708035265585042313178039140504966786200157779032253018379775395031624177802409362800776274088937204606438009792960229334141357316853027529326270934813060617513040349194939506111829667596679721724554842338458197057324866302813949134291966549465895240393949176765935059682165276533388253260395177273452448414734481084363051946017495590145528378728694589718770632641502417259843086559611204202453814610339462803726715365311373975645333786896813006476033470456391277472796397664318741782445580539265623629643719879907041630801149589490342214249683643075413638713825740975202255710524519005628410890292248754754939152754157107953000785347651731062707781298031248059008088083511571893341447743035315052308357772390705357815401965655229378522974863831081531326498095411458206016343526704502197334552693425313951442693600699979416793419044571047950054591933973470783926474430571876070606494546076496652235432486913277445868254001418092467524424087719936981330245844189018050669626927477561635971967675947936667840573264315222817706208841363096504161459299455789615473844664822043191643886065072888244114235145369904453860898233956764637008735231406874585372559803108174040402975992668970470323458706663340829004120177247777909390407650943557103557176164798280730176947885600023350422406684015217003439639897364954618944020288720946937413542886098604075227026482788702174057857719036625711012261058982176805769679934893705049041439972935657555686872759565537429136163222780629831139827737682328273538007173604361766686339194080863757502388242360541635097206494291599132259373964992477759699130503679859467387685858969458881363954404384016848950761974795313353392698993567078740170008504367063192312102584020548165945222524105239691877251826775214235888083623030633684703867930130650125295968428623742677462191715457239299389032287069336032372302828098382506936703358757555827103340491155787211743066715263418577384309801993728612813203556766993754656540038816495840381520797028440484282254884632112821925210033546824602794396854826423202843726689970480869195071650949154727258460224485143154709172855637969394753939537534842454461823870448127360033316087549390339491932603424096663377705656553981384251344651715053403923964417851970419752086799349480032265992581424000705801737101791445964258963875786190924396690033057790178748531407381054411659092462411237526877645210411022521678216396060020924621034172725054413396654304600511543838181495559908429007654906632941883397253075597857634654462449755501594356663254192887988476758127961551318345779438588059118960711018114915926214069348039421926460721297822408069255012690250178221901583499188663372994201653644081755046119923887957198992066054340294114974546071159657605660183300202102344309467802093991861862965216891368515339833603657760186751215707978850910662690444513903724718434232835066662847876807387275374320546636913075891542321272611108399646743762333862252602882930547232324311990485665318593042026396489306780598510984447945017700408320977028919172057048382181924135570226760960898139417290817645998917756855185172967724992933123052909118247462398492666928951967247431522756106437050491531797002473836449419068540277472068963138393177448233961148030322348372301545504016732072510497336139578845609651207819365400056853303027235062359420018098760449076899084941741369357339039371012080828320780934162749276755522409809098153174862234168142466848375913203535996417859932173938627851656219636450621416451865792169471928789091851626456347026830292184338577370915000158169528450080894744186642838772985819834529563611933373632440708524703027899883434677586606441445529530405836184308602571764765354456106254643446906140012957381572512463660138820345199166078432074790037248546139205726353557158090656959024185745345956546890947422882539337183883406929169297400044137877815260349485959875657881972792337911693367611917919131915027920557706737769810315715359926487713855353321793871564010753738106086321230546595044476485010200470235649943642098272637082343166210803794993910337605136239806876905139720151979070575500255076889855737572108112919425325518445248006933632368025157148533351689787936121880720836116653840743617415571493745387797691042574418704937861768435997110148267844022966899508273305125680545431462825242960113760480968529000760808009707472576440561766071700939806743526995640583592236944120793230124851216017592161718568695361629331621064836815339177400421921220156618102527651553489597482005681543009594232948075392858721451225712296026349598054076571694498983982619415761813379326410749885515537518666751789095081260226732887008501369033072022423311241991556050372244766164397155244356247926874588767338935163683327933554702277547935287703755133035368418595728953591127644725043878325718984441974471692217612825126396314128770579712175562666092567978624210753782825275802681456221191328149519567354816438303073809218496633499815268520022429717046018825658842467015385712669468265707555696525948903227914864246346468870618605734062682911322413808861525616756567945364657325139882917475692209277183304968538734947428728388582797185751925085125363729075173796643775804671009928949220293268670456975658752584332903400349503949011586021175082326448210272758388252815782194585442203117090992668634959462750022443452546012055002758055127454792702255890205631701275211122693794920290417833369691631162589900706279105985583858392017695508708913053733434385675958920310284847781339811291863191093386084475914087239356382800972352347223372355619360570354411451544244307940032823148529609638296958288902010391872278763245256372127500248817419151015466871343223054572424151488837160849087690844793830186151432135847711240614541446439183938044066695316622116741046472939622004638961665608819717101930135624767270181741989733125492003140924411241153224900070754907516184957543551611208022204023968376636880451822691297708293688894074998217185540931850449663735709971989960908519813174658217406440733137654410084264390199313344416298280201059159586221741529060546858446825609039282323617534880583845852642034407748295813317970457691956263225675641685811512670217066518907796204233575773817564814095574905621916350619556603859001230105241016047652273704404479564336649968708539745125105915160022240368627482259079202336430778070946622175011973214230565495684814465576107906033710595350568611341645767396110859401880245617579689883266256409894693280104365291970684730005887925438391662019569596571533373614115187189312356643389006800187024689032302797342271128282171799878713212117329036060371547786892810406560993783700207922558468011335587906261901093629494719347614610784908347727972664981060886160896302867201510015108566161825129634975425024272081557002265941815391290337945136518047397974376034831138219062938133831604578871761305972624279786410979461568839594456833208172319195856872204542603316087926558321489377543723491132201816700479397540948217989075370768230671731249702531673564543406062253586483721876364885815656468440728188332621030006260484399864535626813077449518708844252479808421884652431126530875716970356579193081754594545979226680522690302736699184607929615623142663354132052863597405323796639870431453066308061197943832308479553993128427148101202879692518240366933913835269757022542403389041102563931777385856395150760422381552306943437155154770876052232484595793376372779715779096638669304485249549423986081793893310670696881891161170144901546778001550049111602186286345163199534989815372560517348564641269606632792272652115204168983118001639477232503487517975266466538605885310375386323449185231709798124778365598533541593980958124433491037239259424061787818955206789639301137224039378855362946151869759563140264720906997750013611877360612394880182302599632772460731913224265247765843851870907483675299829361720529022209380906861000458689821676603902075564791012594713699959332168445898305343858211764958004751287406251595999467293204674470870715167851421656776355939143657993736347249925156645471605043233097281630642396809038021750687833536173404097614118680059037340312341605883455235067338752800787033133391707487966849528493075647320868840934380554883195960251773502083727624240339456212211925683490737454112277877641954542607470029658579411795883383494012636284071606370192505278671353911009904407560251382987723241502706898676119014622076654875776162540892477299357715761700750960446391506332058899436675190871956939800022687432780180818392178709073123353331373011315965680280896735755650091675680722007667153708728485188186965653450591919415129897772500704531083484204256009802043625565542287774299566636078316295125113411325583706020566573294986977164698547137703200443022008505653377365378947288543862725055911788727943036314460020086504429170778872386381956215475209306444914466262735267509651875004139279370893320240127688827675054296294093093354920744403327434214120799757340314496705538078219995180518082515428583740839433883842984823268317117814453641785347046845620463915826027190815790559731433923858312882529042132987246860789417898096245935117545754705002593969747758470845487352156660639391962457416095124403612942059946284579486042861317902103275464677157584106545775551518446983441064825708631574744541847215534147110002165755331087323942894411304556036096' ) ; +test( macro , '-94906266' , '5678' , '12032817648505424732206470115984402822087851800458754279636201919240648069545320866560153680915753098175361305527571944284392752569770663535206811189003646879509578656245380134150984700793677615365069140988087774074093292666569225253766058544069550347050527174441848464033769865947958339935711577356378541412264423970226396093645375936214905159261610350242858917417274825574404844112579056015150088968297195170716956710849024033030314901530321313136125969347224049980779583582657176881341711446052030096202772974538698445525008118596374161589518848084436336526803665941965555491104046737440894040963947109593967956480178145670129677453883803551841426177253469183865084475725595826142523985262137749463269279257798034486481726137836527313367452357290671314328438612857618515953366030368261430360540763695870271485039165724885752553866509861096959097856524796407276935782076995718449804132659747765788304047343356811406221119007276554404855974610764195529043031625022180466201811329438874115924370207854394962989072466937684755950839558855381231468598531110161791599549283779948049180898253978038930131391965203934491358832834904237088198978460478436435260346993291323788040533668759476466237387161215852475434944660862309069972151382884427559495414208822804115701913705271785723745174681820409251541457004542480297333724163305849231905385022165131472866706690289906743159860846280981424473469229829927326830076613963484251270728729574503814307791762786013555601416538606549575141032711025523511415888723638864251522238403514209615257991112949184147400897053839753457149809381976922528684839893079020417567683858076689900826568207181631852815210327645775199600779525983840187855012090137702437886138818889991865427565806357553975294746020041388619646758784835829444515981357443648673117967946792507459637166782407266051469231502300232276219189698940875042523547644156383005262958119279161427467899540186226164668917413440447866544343462167108862890696625841719457545138663417647004060269444482339780740345497612893664834632640370620127200676855405941531569747479245411572674091251818894475403815473239183886002466157193530057684670655605573446847521994094849382549641374712884009164471656571372198449910168561787316766669347248358805643837182081303781837240736436136105361562692457596834668246060064085754181237451898863990804515605190388337710712867999191679779786712129894970664010407413944105206949638872966539657011251994137558113271215952893544638320085154429394938826746648785358611940674926917169614084840845838330085461611673093497785528104711054917591387941532664903919365872012413967652428893771254783514729383993987904033719641464047625904368835612214247748109590039950324488045520862407963337473558506985216736383673379753911040520601562793518299011996503309262568208883619152964120357680502143243237914460301562979082299253093538389428819917042632652200784610277098397358002737455993489830854317722387980601693621640290144850488960430945867613445370736462277356198969776749170074469142959139228103077704779948067569593268552335250360809034517777505978089487420438155196173015195413707500749188879413696451279508390758428449841376760780035529721795084992757493136169128293321086137318909063123039058397266188325938039949845723539644433753473294540228295834513955127390193735537175144046212555694020714759166871608060391688382739009845903946202459806666413942788393631458788321174919289511304789355666166018710631603596670860213317167734166889129692249373293565808930204157031991011885528221419033566927244666672894213270515941662085431325595906230594776340409294990273749504264542573465334640502232608314606771517369952134843645398223542989247175132652279714716937433111501880963356885109815217790196450752957228567594353774344623557404477791808889243706743536894781675724627289947304719225770725660654839527433954061516841146022327990899330817724998757824990111295998009049097615922407581255190739491092231346117657541300062685972295196237757295575969914209258890395384934110805224837375196790993957760232726873726409663790983348867817606845992238136671232375378383442128153562558993510087405303974930371982970935436148399729480315961683220510601978266384119209049691241779665749455934311999233053059017638411476295376290561801091208176239186699145687486729178616233651626665713543619439901912710580944645778155158797462852234495229231406539206472287577297378192253982740258520802032184319738335496087808027150192808403729360390814153726899607792522414861087778808864723924610633595805110618744865362177310122714818412795648247881041310195803062313215902474261741174952685814591966714305480767184438698736320248721848847642234552533028696642298731293921638337742568224929679203340715151738759154672955264904729487192815222409704216298143439170015879950939045057249309073969228984931579994969781518397426907617306970452320824844550818387028299796381307177696815835155244322539561008715495766453539759717077193466845576102664991398263517768253493037683951482880594999592487164043876965317780003505760527667863680438637377024026769527929551980088550989890140816338761108689882533404008958689956441208348099517790655163832888672441196339023333523558262873440940381150551323449813051211874782355328615332116487157592812281631495362815861059878771091573384226171301604486063550985885547526084873950124641753676687247950243102682512625690242813329639053488889144642576604385864315139668920318181435129690631047099936094981891064896430786909547908075022480142180945007023530760518540471631799916726591085967028615767603414815858484391191419226449103172750734862583321173181611826808717155895467441107144481818474820145538915123191086233889850661674240080442220814781759930155904531817862470486365345886110364369758405347228549431644962312521692584793216958186300617894642831369657323204177058526995631057099851113254417633669886363824556236862260831309128178167803213227296932516696703169947834651505156750711821678584827987720266958112228898408860533624224495113943886752312598411859670081240718595741432294942764857421091909115884148224555916194806655809926642996956901825501253612530105826618755517164012710830281242388235631527379824843157390117320858596018324726028114634513731910537333745080425512204214923714850269287802358237211241477533384595700504349352943037853153152826576013563379638817785556868194091209215931133480115980056464675106593427706835334947158188177836411830984886508981465689899139213351717298512840062197481925426346012965958263308687858310254839246643736356288094423514700890181531946170936255870492888090106543963957053638462537602324269379083493214926494662001476819723144975153483394390016211234911521305578087159665053195506910683427552629512701423004114557334590767201287380253575889880716924180835742565545587297372230588277744954790269429956487792324583964844408254629753937326834163368789921452639360922619001644423905992054827955523551707437217080870067136099865977482032198335037959434533270675522876697240093272437334734369226923188059535469846991641709332683658104575190444624146274210567461025953960170291512193215781838523322046313242892959796365884825784776849648185822682474064256026698235271594627736075157465861135739641700807125348820678293047370189781363932882694927128285410177891393529704049003357809736578523395638279194743744900566551317265479571829718951144370147604490513174682721505873577926782362538993812368812010097486662549501136198241341798084746545706437440426878375892211248824662555732459007737499801554781654267879320262704068105933519284285796739713621966126525083860893611057628869197088116263187425689411609090653720984344418988835030010895382016374020344833711823116640310985731777663607552620413465337138339866989132413420055538428253299998808303388845963185188581487436300195905101117842154869015140378602684126069213877902049366627282585389279538334206573795995374258165195704570108297045710018639586996443344402990380550529595121860257242747783754028054652596757584727739810928998066179549536463070344995795834380103032675101592624345721957432323326573571256893898028138781425679040966486628547984753574864434930008117523845237304478890899718331660641419486842158394473459007167484277217322766481893195761391938895623708651566392702159311537448090535583956495076752757058074862172390454533499093851240951296540985779357629233421157703016528130291156343737642593244088633852787614747817627060006991669568592280723672383298225466281340956636710431940328427911743530915134552931031391690006021236672575108176444082447291342833803642309708607039528118937917030486917866538554824932145847913873347906410715580065154707297637925304057208331186121542705437629918199561558440077780020149125928636524680160377906904253706618745984744483286494859496634897033537125257750234158366566522768726012073504864415325607039305152748943100533772051166644314150037384337861942612593701611683871218292642963890517076695142661403572711320388033047007398654918216722136161411678662937623850123091604556006551841441589614125921909593939770390437476075298171895573919863135651088828848336011726492799841320111649935389358931258373693459145057553136475922751342605359538155293383583876955561910069358749936951011082089615693841896629336961254394974036986721026940350856347077152772939451280308399363104652576626172429793776211333913295809413213919318285255196490381055544205313396583888277769550637211217647203529389040683316967313521879297011278503165986866646581137787534538214235999303080897442666172258679022325039014548620740672684311806497429047056530576223713193356973396804439208879107248745042555605441287111013049709202762299259851107012441701468738419926890133556245430056477998293002461917643271629591853938120614647619772495115562085600504853146424640985096824494050598829781714618733157799877227971474455616632639023850925729720213591779252776369176312110497936405970870772189359848240927140061006848080799072830556306659756678997694657936924990345096410314626570672149731543628000558026533834459167842889970614149005288838811229513837405392153251553605330473659867312295620005340633564023904208178972115034037935254190823029327420408002622341072381223538257497215682930180996569122652703053739471871654162569414951520531206458862671624276235522538318964461432849995356820683233465138675410827490596964352422796420736525862662409202276892082905745273014755041772993819374747043291676296825571338645605019288235828607460219104472171905393978286058711994994075946946904501719626129891297785262794903831823520324741271326470009925340248044413698893160087471101115598827156017322849926448246890250940872800969912833939106037661646340854638183562189382226457787900923987531877913431946108694947652717492923066187775746930063437977519195800521298729848366280723108648799156318978065768015360592367479405252285966318000015191998608772683676758058031311468294723167697582272502760859874036909801930740974001192058591430098287098021570441654592505727247768282011756726844525801256651444301950079120380718219338329468008534442846077685713544194007524327955071955226200530986913459845314710510719058167265959825133876149104200332459364223361260375456263610906578083438476313348490161343553564484692187424842603773823747426008609267536178919597384345623591288999415207111940819590820240164261067200326676758012794725260339664703418163303398007586421287243859016657962176274532712513078145376826038329107151236318002243613099209970831731135481008172826345298961517973963163916705165676097591487481466079223465813873607872273761995059993093591322303896613664321628779241192911035846341115545622374501606127977756985292882117778296500478276339993749813331078686903702537331445966445686036256887898585809843950252338373839157713280364698259134024338989451358780140559424371687870519586950515334379886144076554360694721608275939343734737390935610438901882220547279311828445041103639111103188607674601360722196695674871077543938123944828376247570522481733445127428507577252676752726828669296273888040688955392452214259080886549295627930544496374040482414174429554699068859457610531632589984450033487991393950194379605142460240622750964605904319347162317103632880464489765441781176775360255307983114046972917021261575999747919513175356289269738252254493902081778863456041493700800804759871388208118144666431845192191907729537903174959385672176640184810677326710369561461912187493932368918706337698762794615949381684820435117964874003383886204354335841513328726838198927086809536254198720567097588143419818644573075112705490751622292191492544793418111741658483532767411666600528233897824313428372479855025933866719301492980684042893544902172403475761202059963960896638007212043160771550410552889811065116740233744236032304871579001993160935959555347073311004243774883544443676731406104831265297661674183379974269379741288515676564618943733469021389351199332674318818115012130962124777380484159115171369334822744164229342075923978372260068788894241149239047819830879098322853736363606047921128478685310683095184709943048770806054769494926160412480736093641419077309213991679052703634396648375610853612922041643781461899880570131047760466065993555093987696077930050904841973329976985820417577209060155514571722895551726144444596204596782453047002156424345570004197583274416101355362390738881463523630967387072211376360805282936674787380880650737793203297867993622101141663905879536696169691639238866186158654641243673999077254707876292273024963076334728546666159776798341058364962760500123648903436613222992540337677988477671022338118694216304682423334130149852860681684099263517683335157344038308938179479603858917811593200169277994326389000742115999246806304045702432487140508819529399245059884575934708946209516322574789907597746226957553035886293114377154459544505608389208459380956440963140789343305699658278203986551812398932069405456026560759534279324948812804513062587167345623977971097453549344764469259507711376402428457076157055436430677764738886674081844106383742912023140510418552281742188746389236111863491148474361612517064934024896521322519834851151242772104556306598929440002152036519490819251376805450957184749544824693635603569605225972053841581004501584100912328333976003102107491085953159226069012834587327259971112025925123819947881840747175767809667062611411996051112013271091350150777864798314871955256044949338844757948457477116889094191094382540558054779516264683712607043026838398910328428087833751980730006443119069122334166099941402646601365567136347123203738359088947443981087204456279328714404539183793412240994826870342095392017313400572110318532747843060607288706258394994682842520556381575601014199010490404397191138445152855809707016425452959778664359588040560748735412597512323836013768239677434435239189168997928071347187463000837985697466045497488955639372562589230908251673255473804486520327695043897071532175037437036938183448706068445520270184271860267785443607757449987645862550853844492488331774133732177529596230056374085739368318799336491781716721031643253122590074871792724944404133795117394685504903169776472613579323786988436816555044871147023821295375315968422237070919604915553260798754019817204005435917338028778866898767783201988249690480208167510788846166868446591501548151404396048081597044050075742974387127512894683131544017091983972922897201447567071326201918658162425054687848305577141613831948331736546313547366384763806330342036329442085133559102820443474867650075586800703988545083847887658720938137520387462853564941611748541059186958982227681935894334481608643024722381659381938989731023292291485815605912701175709672139292877678190348729760666157907954715630362098750256936461038759071141133514628511273752727853532279858408268908582987443368819679334383388270166337798654040644855690261540077459818835228437887729301076041005381936867843411337332815350029407543350462675437781165812720616995958519407473614668214152449569347793047763581660230557418465248972034336442550080954052153006780131714480535397523095413274750723701383225842109411649460720870423187520888470553057940395347526767669497718524603967849112705432812547718499111843247323011841160686418751692868907882025078560674843768816179401584803887200747810776387544791913903025938435744852431951915576190055048231754367790804864233775987695188801541755557892125771674773775596365864929152862381755401283073853655055425091448611697016439954534260814030388938640509188143381711317813476900790628429257746511202468312957230036100116864480097621669013542313504580498125607583068356957065062879843861421422680449125994612477774818757161945326684776971564527300842862017927612360118968033138171953084120164381524148059624459163118084096733232992442581634862069037490046169948238393108530288105627559374357574375901411757444196980563141505220137571144388964279304678461638650126063683382309278978344376529180243251205221507357892280444330744741037298325319700933898637890602101615296398869580920345296280236271953557041411865760773333961802153204654733800918538855539998075391359632003872695291240543210415227135533202642183404859216781849310678370931836038236340074191979283348256435037626347573331738056630737544630627819667754832890022502410501605907042038148659166291897056811128443400490554763520515617080334010077029504407741614050704547796928760915765587321003086708428633478958994497231881728742148146582878333513294577932133195398397292515911616512890368305984393578729868207205694140862127741104528308067361504231110165275192585475375358000676577709244330704876174208560189889742189118009170492691256513264181013828227165086680711420434651576133518693155463307951273683890278139573807332751907304778544307753690835516724244324828301915566152584064392368154012296367388561296655115159377964858217285140994654349136595083503371058992673764518566714682145847493882822893394347204092233214651141128348419317600574953305420152824611858556704207679618775670228729011916634895546083736101005758230326310636673429185051800939052184453293132762586281584909086427718838454160054742974280328396661361347295963302563629881389597757395692922460506227719569272480843843963982294218088153904303273847479651330200041676283719440322315419856051041525940239722748989045813626337663435654703148317669134876847555469792411025033420364193061667681444556983341506990373187827551963387220108573965968914968862001608003924039023517819236072227063268657970009813282109838740945014605897718935027854417422516891716032864362714644753952562246051636958846719430334197522545309124095753712501839140881772202359462149006967535743381987382494199903798783450128864108137711379338678990406261945617986484478017729513417966059143295468448727905734551655932034516014732958476725736677666360745474765405553207731525120976743153206626090160055202221435671053558239271799027644260676893678561236876461169942483963790905593236778663204622182700607533615177816293194243328323059827764195754067310463910960166786833097658112569805863287752396504825639025116157475645847961748673868648985763576921316360028625597643145982378614155913337308072899028630354506317000731973048320498440559655009741229059616821075679153626408071146949434874870710442443607598092254881233946034011674932649197951588391079113646195367873645750872572676353074784800670128148448926212428049339412055475920927927064266795956572600200498190491828386978461485683642086665791764122916337004769909968407222832293743026188332895081447303907350456907104380292438133354568556580913923940135089837451503139566900151184776483065461722434703576835856162451903500950263460660059609102492532142956330352718793762144273337958725209863219465403332730360337994136681320539676141959170028609571573318264331511603324410628374361114137620410932826988141316635961417071437490827691742173260234374302730791524687955576187003866752766949337018264318503626167264228405496153334243531140332510516296899883807675047755079172377866058979779109219361302539854229267521185113459426964212674944243036359083834041693510700598946606285775592307909800370642066904336886030146957671455743670251078744477019985475848795376334708946576839355982663342271782974876971670099428998708971102417217050194310201496909274080129838572650933663158961486164318754012103629249337765151672364719569977796470263610483643241743081238512099346318125509126340730907301902331865609410500322101548902016145028474991172896518663299753954359738145858524256241079822888388025974877315851174825234099588922307983039849059328140405070220292462966857742931975247086268060742036088901447914159791901545682768198127862624633726084182944519076169341611788879344467332624457235181005489161468437468286277927595231710889035229963620976542808014437720825245958218422545401854965717001947936025069441351490369482405131546123008735270958799806732505582384557603513044063735545265173441077422655347016647100822557881227410017918031724818941284851218632476074548990913121757687254853114905647152161232816453294063938585231011698346476850219902049515565302989770984364797494877746871059691242951446947928616748412677311316689309276924328166978373287156127637754250091827262880001580912029087294416597708081303921574616792751138598416609282955474549781919323050366795607116559122995449444513824012921931191554790229338378408917767888764757481247942357523387981462036482918774775255481502617812032424350337757705134963581392988233010269239543026399000590407670292541798141931143957825519431024943808265104606375893000801021372156629170649936482063505577146268662962099488092098200661611049654157290575516049458547343584333829118330105341165469101287828518455011376471874002702126745604311883893741228949110274354393717306210252780458508823091743222111041747254441747473986354767554852139796930960587571954051842952106734815850369832317500044882713313649500485928442503705962330735475241650188479077738536979346401179945139932535355966728284296269303465382689387382904506131090629101374506641285879526447951961592499074899803465202603048622508966269246410248303951769201230670090880245754249900954768059240928580835677018471478117764727507460788000454066509256352049419001433619066501137325877958902450951248012775946853069206507022910965027828695344876662390444745223071764327986092164128821369419529923449745342622529520337107152499452702345241141322434371161845076945400253720116974932841155231559246404477495415318558856170762805541331599037682445748096007207307457259420504514213233031560297159337458934773052943897370160719593071005636639052337398910516328917458761997763791052147675868492052732846056244343846856562859110918170514850638431897116103962577287557650861624128410941073015672545799355272188821573142146157647220592136501403389440498405045979220449287529240951068425759059315541517416653195735778257997109940532355650068087437125593263015404801959966170854247359416368888999714143993665160871834991848566207054598521044690133585142761653289736942697455812090483602711809497731994035628689666322904923368824343322943897077533662696509093532125560433883239720615037830617553062569400982442551469212711958432874003095252511501251544368163946986793533762477996739664587856894977815882349958159300266076187992625866248371863178211081986479246265805496439281433789465210502472287353963749371542009248496304898171325225431490404443696275192260731587223678231773234700501786989060062073372663103468326762818735022839079304658268264383403675611385203208802610883443153396372155598085767531581987651375303196560138048749012301078065330371665264754684135929975327450958445710569685713002470385735812499009271125281912305498904570924803427650562790575789311044993863517834700777416970146268592915939173835339588498234255520467622101245918125290891960721252962341466913538814589814214723753781664749478425706364352461070224233708179564135246880492730639677674623872309076224196922090720446752424962016499908060928640446088590198190025780328393379622363600793252241003767266825105789787022775751765687273282872681784817235974474959304500106923652827770175776376057866784637584218919587715646859185759124581929407837290204615476399831255232642772149604749965883742550558896424909600890318701200878005426405783690223803023797534308676408970377177829432708888482899871770661919987560426133634342816194791652942901002649991930864509397547495136799464971411961885951448364705084776854218557154068032421447791593957493800552595011736497560627402048363722641737191562791467192752850831819871126942696603819688457632571061264341307436496659871052442884327358088521230434779757325515620881755317489614893979565115465466459134952019342787508889329177160466567164607203135727175727007576133217386625201585733132524102256267135974095667268967387808616588507490403645684015340306735062054190431238197422650374750608082120129477961774411707229963815811485877200700501734026677170462507781454324736384494629139100648590234634063450890873793218123159652262636940460561659812567660405111805037271771919133677053378340571763804818663579984080144826950600742568620996921074204543790255158895558727569627833033922369940173618424508834111810651656048535574444567986963711635689671493979686086392051590735412326987468072321026945906095052728783747681972245983868013037928884763904299129826301670561248217272709934758302637217436483609049259979017913572017677999917451517664593806401100830094206113930664869181230286977905241453163705128560161844356057897016629444587321825339889932073812247330853655199279654850681643123911145550445824784071197446536929226480929787125781620877835455757799725872429412183788180777229189273296533362017032457858813870135280647619436731981832381160911893129851064121020987511004669726225726728447523886592540185823062928562680797115677436491664945960425463840352618701257065715147975721913145513121975941816861627415802916250662475683313221460810083733560259082176304656979800876036280685013224264755601477814078188584904150365677219720532288211268983178369847544314641858955739505549156547927819249161988086454580912459896288180831839198694747159727783540431533139780840118503526092188395999937083438859471424422484895173339353662013418404633914278270531257635152842306416202901968927515006838776193126399890861893238570955140721902636602451481280533397113331997181668368168114113211417441091536660280740752073688197951869383500740801485250371189839664555255637862300294894725338807388545090253060968823072953675487974449697590292547112002691372243223615249165249747041660867764509155511159477802075808850762651193636610867311554992969899613510446151689019965900866044828778159525923906714414752885574464308524982926278589922516043567064422228451889411464404645562403027336145425521604775172340420217961207569279554941274837915390099345785110541869546066004279176509714969623554456015482986407451412652305793262123648552417609567710229212341687156454311883528279150390985919008321641915631234630542109381453293097771127251164835846456017032621220535159510911806712579812990017904201396748639648986580416830392353504059649048195263808560060144490097812861709892171321718078141652344634889987253449435365479232110959791057112787715767591956424199236727218939549730947807636035618617124214592974632640888278642920646150269913678711900700105591753932021927544248495416598915245127805617973028286807341594473386206410511414428389049099794186454102765796914905933255458663787331998410234134210186357410895835541247415216366309533445597853759036910747535179357644751896549954802762133472758890605527381638477541022802894735646799360073180253868675653146890507692412609328780793399715860489456638327779713788516054313521050756108383748787190630773384260645245277015038626404267544599526329137987727604904731562738505220497843816310101861170621100872755427778464809073169584368881349788891479628643600529445515580370114613383736664314978973619136220173478287784163951945648158666739841536848953175419910538486514713806203315648665785618237610350582300314779025897090284284080969250933457877228872443367222249154142248644276474288044127432827952859178595732895202190015471726020796066245204963376906354394976290239211712022794927835141158864526574570946923047666699485949903120984263356978168759479817623935013795014196775910220111958690782426346191285770042525098984695899814199136259926824361465285823048578317155487790775485313929046655222874042698387928987865423117119839944817973165334672655644240394784576751152259628370824434663024024418575011518490382064521827913667162089667112747753535124207783675418967511974700275667309012046788487060329223754816307592779170924531501164340119876000139327544408024106973184674625473383812276564724893335841539005571654820183265759775079589751747626589104877587523415006319142401438844584683685256184472651725051979384269512266601971450685653366718533020065953355981712508860345534161752796241189385496331101145400268056092980486470369444513019881534614061799341395392897417347975110433595794498856720510672308772750213294104276272132667497463492787282710357371813082428478468377819129538727211815622333666816660354583565438907819881292081303387043386670876926764469958036489231885191131050114302131977936474847279924851923137714263077854243985023606988127523596289821331500111059950584764623037107983656960989438380956968393260575271072778863957365450795572899629582643385628639710611546711708409238271955614736601631291370395060012833231421354443797341554577170376506036564132217557077652411894117329603768900109332749511859736210742285027560130448468034446432758727729638990040491574996250063104797738677059556962784396811723371443252662772605997510646452758982125426031044458649357552995121303204693338942472794723310009789920455359278131277695870668310315876389946031424494549763773146136063430889417701887448847015328003015451499112860909942403248329916941358489871131665319203260702546158995642204910162911659670018116940727018797217171686323023556118323193198342370803796953278053782977187454671829418430921721985095232819212480102940486000736338657164939674716847410850866338919788038362565117722358348690989096737227059283378387520150072310475969531030512284930329368248541131113766926569221020923296593566377299675247629189109056398144800021591742635347744703956072123890797151089046108298526010507197557242777201909634714422471270603537857950184437259093361956113283048564569574122170292703201825073022983566835511332308338851334507372273081202885655714787807833951944184851958437229989794757451452736941245634812065844048175235449024407397606058411010621436622691612507865446029785762584964939590202876090478392978007566584355372687291804000734909051848660440791202433127588453190203200783903284912792280548420676834695155901857566765932088926634171356382407121102180333281700812579308596278561884268236429082157465746397088329202574170766452511505505609003041124950089258440827042552762430618486885201276510552341532342351164734524285396714462005001978788690975960312082731929333386050252112006807345880064713266643891024391700346350471880262858040712474770262634884317585612572195523131314179386278947285577465324615711086122333531902738278585784646020600313701514942125391959071309667102965885213697839889156290939743771636780743647494786980566347580750783699119643179162204062000548787439490012304199473697303589997900840621652874808426421326071990248127528436949608115779005494179734937511431781806145857785045035166485825750634750296960306410410179563289780730826789234509202931820390586826950654104129396809093876099264731036820798174964438055115624044199738101662825807851197445426685021856220844261848759266200674656511060029362486031624820819678918152181355926111923461166345822665086176145950743789341584980812952752231860843257985965288802261190266665922655937859396637134691957840093532444525473306658768602008060074798781369928554199058085681741549030727173827517234927484381244144270371887360574934364399214113609316363985218988683805111173090608023338304021000410004993333783004263450282560060958459050745590194592895933947062092079507573081523402757767724788144449830636192589330164576778830549052766661774876685632674136307814153444590770266999239828355457576813955421195065159397418434372715876860476997930972151568408519046320497117726447903332629934498123201460718775034315147902361476205883702162559670339483592737874161365824447049081019047867077729938161516575462820068029800463721563526770860295002450363435919771658499908957051051713169210155056685711478948292601652283703664279729412723327993385676972068945177529247890734902739568992396004082005895239640239584914895675194441732990455908284962508388272481664809644013695108530643590237328537639688567194704667459259852194847009346130261141412179411299994375826249494565666674099752312940749960678432841327379608811354294970105991967067932527833097758928415762643944723789054971807292766811411062804902336531718448905647640615296706335520835436041593386648611858094071235308269292644418143791110200993361422914793119640919331990182443330345380585754214640238824260774995215366915341497235208474057031765422776345411042327893101949992571577825558691897895422945443680380208657578495349595586606235401227143323363094432958840171215550050203924175856785197077586124718868813101246599573589030798669834807255201536300814627715056943239448585159116823195136012406495891984611338805585159868346247052637564031114665756371321951326231045738075829116360629934323624216434728253094934162532761445177538547165024471725562255682921126585840210275028026032072889156454737530566706272562834758199753126146886585122828302440171763025247744940890748240827209734322451822354861070551316853275578081420600654807730862579379336164296300651251035620903073641444759072951433003329108395228654468968443998724991943750648399825412774577834064138787246298154005871653201690041161564805619094094950177728315165333892502449398614595846310753261175601850635807705775203998921942871973931019055845469784764447913903988508253744480825540367906677867871057567478493188656741810436755808948879038430592843598118575241573451984420451874438273802788249941071249303464372879792957737080283657705694830680260355087766018017548240826889393233567613079361639516134438559058561470248595710630583243521624876087878849326799727058325744525127686358697175227126042729704763198212221500110961927927031953451726345983879650304506115735253749823992717894744913635383053788207368902228723257035589214660773099731574328578894614609958412257841707173544840654053687963529161718339377820673974804275660397594495763320761934541624154607081082091431381630887662852444276208094195753892541482888964133078632756060019952316521890141964819830541862502886279942861929515434864567266354539499955976735355894393495991004445955069390234829281284926336527704287398385545271066278910515123558177655155124804872688188708038652699563430158718539676417362165324740950301161676147226987091336686975730078772316774484804082212792921345388911884307584665906933970070288913666161767306556816492529686126542330576930427952309859851945687695616787391724886208606078219586577521157997471925755521830252778574776276558662045076936010197431001405073169538271205697390441457933908374685337544753066892359751986805458682161120599250577029450471790531116688637592044725816809350715401468061886209608998308808761053155925047485763330982810135796784437153235684378855933935608225979566539014908874229318867856908106633416008188397781368955225608754496472366002973989622781331076327936906421333836156329940767987829949219414282739937552368742050095369670510834581278968845142676270307586970560344050293627832921967047772968940770231187440894414891611957992234348384361908134992564366682665696510978419367665490400052255968546785818638881481409824051219338973454619317589006191281840488521392932267525779747925510077945960279398495734167739330399574628957203655424637187995438121309889157318399563297897718347938915006476879059728332276590034174776666804805807585137415933903539371546508657211772037063013142093943376911484717585548985036753668986990778732349370860695937442389869679255309585195314500199898018163496806602205369815418049524140539038443752983715573321216713716303309876573223472073494658660387196143966238355254434272031875166654429112534708035265585042313178039140504966786200157779032253018379775395031624177802409362800776274088937204606438009792960229334141357316853027529326270934813060617513040349194939506111829667596679721724554842338458197057324866302813949134291966549465895240393949176765935059682165276533388253260395177273452448414734481084363051946017495590145528378728694589718770632641502417259843086559611204202453814610339462803726715365311373975645333786896813006476033470456391277472796397664318741782445580539265623629643719879907041630801149589490342214249683643075413638713825740975202255710524519005628410890292248754754939152754157107953000785347651731062707781298031248059008088083511571893341447743035315052308357772390705357815401965655229378522974863831081531326498095411458206016343526704502197334552693425313951442693600699979416793419044571047950054591933973470783926474430571876070606494546076496652235432486913277445868254001418092467524424087719936981330245844189018050669626927477561635971967675947936667840573264315222817706208841363096504161459299455789615473844664822043191643886065072888244114235145369904453860898233956764637008735231406874585372559803108174040402975992668970470323458706663340829004120177247777909390407650943557103557176164798280730176947885600023350422406684015217003439639897364954618944020288720946937413542886098604075227026482788702174057857719036625711012261058982176805769679934893705049041439972935657555686872759565537429136163222780629831139827737682328273538007173604361766686339194080863757502388242360541635097206494291599132259373964992477759699130503679859467387685858969458881363954404384016848950761974795313353392698993567078740170008504367063192312102584020548165945222524105239691877251826775214235888083623030633684703867930130650125295968428623742677462191715457239299389032287069336032372302828098382506936703358757555827103340491155787211743066715263418577384309801993728612813203556766993754656540038816495840381520797028440484282254884632112821925210033546824602794396854826423202843726689970480869195071650949154727258460224485143154709172855637969394753939537534842454461823870448127360033316087549390339491932603424096663377705656553981384251344651715053403923964417851970419752086799349480032265992581424000705801737101791445964258963875786190924396690033057790178748531407381054411659092462411237526877645210411022521678216396060020924621034172725054413396654304600511543838181495559908429007654906632941883397253075597857634654462449755501594356663254192887988476758127961551318345779438588059118960711018114915926214069348039421926460721297822408069255012690250178221901583499188663372994201653644081755046119923887957198992066054340294114974546071159657605660183300202102344309467802093991861862965216891368515339833603657760186751215707978850910662690444513903724718434232835066662847876807387275374320546636913075891542321272611108399646743762333862252602882930547232324311990485665318593042026396489306780598510984447945017700408320977028919172057048382181924135570226760960898139417290817645998917756855185172967724992933123052909118247462398492666928951967247431522756106437050491531797002473836449419068540277472068963138393177448233961148030322348372301545504016732072510497336139578845609651207819365400056853303027235062359420018098760449076899084941741369357339039371012080828320780934162749276755522409809098153174862234168142466848375913203535996417859932173938627851656219636450621416451865792169471928789091851626456347026830292184338577370915000158169528450080894744186642838772985819834529563611933373632440708524703027899883434677586606441445529530405836184308602571764765354456106254643446906140012957381572512463660138820345199166078432074790037248546139205726353557158090656959024185745345956546890947422882539337183883406929169297400044137877815260349485959875657881972792337911693367611917919131915027920557706737769810315715359926487713855353321793871564010753738106086321230546595044476485010200470235649943642098272637082343166210803794993910337605136239806876905139720151979070575500255076889855737572108112919425325518445248006933632368025157148533351689787936121880720836116653840743617415571493745387797691042574418704937861768435997110148267844022966899508273305125680545431462825242960113760480968529000760808009707472576440561766071700939806743526995640583592236944120793230124851216017592161718568695361629331621064836815339177400421921220156618102527651553489597482005681543009594232948075392858721451225712296026349598054076571694498983982619415761813379326410749885515537518666751789095081260226732887008501369033072022423311241991556050372244766164397155244356247926874588767338935163683327933554702277547935287703755133035368418595728953591127644725043878325718984441974471692217612825126396314128770579712175562666092567978624210753782825275802681456221191328149519567354816438303073809218496633499815268520022429717046018825658842467015385712669468265707555696525948903227914864246346468870618605734062682911322413808861525616756567945364657325139882917475692209277183304968538734947428728388582797185751925085125363729075173796643775804671009928949220293268670456975658752584332903400349503949011586021175082326448210272758388252815782194585442203117090992668634959462750022443452546012055002758055127454792702255890205631701275211122693794920290417833369691631162589900706279105985583858392017695508708913053733434385675958920310284847781339811291863191093386084475914087239356382800972352347223372355619360570354411451544244307940032823148529609638296958288902010391872278763245256372127500248817419151015466871343223054572424151488837160849087690844793830186151432135847711240614541446439183938044066695316622116741046472939622004638961665608819717101930135624767270181741989733125492003140924411241153224900070754907516184957543551611208022204023968376636880451822691297708293688894074998217185540931850449663735709971989960908519813174658217406440733137654410084264390199313344416298280201059159586221741529060546858446825609039282323617534880583845852642034407748295813317970457691956263225675641685811512670217066518907796204233575773817564814095574905621916350619556603859001230105241016047652273704404479564336649968708539745125105915160022240368627482259079202336430778070946622175011973214230565495684814465576107906033710595350568611341645767396110859401880245617579689883266256409894693280104365291970684730005887925438391662019569596571533373614115187189312356643389006800187024689032302797342271128282171799878713212117329036060371547786892810406560993783700207922558468011335587906261901093629494719347614610784908347727972664981060886160896302867201510015108566161825129634975425024272081557002265941815391290337945136518047397974376034831138219062938133831604578871761305972624279786410979461568839594456833208172319195856872204542603316087926558321489377543723491132201816700479397540948217989075370768230671731249702531673564543406062253586483721876364885815656468440728188332621030006260484399864535626813077449518708844252479808421884652431126530875716970356579193081754594545979226680522690302736699184607929615623142663354132052863597405323796639870431453066308061197943832308479553993128427148101202879692518240366933913835269757022542403389041102563931777385856395150760422381552306943437155154770876052232484595793376372779715779096638669304485249549423986081793893310670696881891161170144901546778001550049111602186286345163199534989815372560517348564641269606632792272652115204168983118001639477232503487517975266466538605885310375386323449185231709798124778365598533541593980958124433491037239259424061787818955206789639301137224039378855362946151869759563140264720906997750013611877360612394880182302599632772460731913224265247765843851870907483675299829361720529022209380906861000458689821676603902075564791012594713699959332168445898305343858211764958004751287406251595999467293204674470870715167851421656776355939143657993736347249925156645471605043233097281630642396809038021750687833536173404097614118680059037340312341605883455235067338752800787033133391707487966849528493075647320868840934380554883195960251773502083727624240339456212211925683490737454112277877641954542607470029658579411795883383494012636284071606370192505278671353911009904407560251382987723241502706898676119014622076654875776162540892477299357715761700750960446391506332058899436675190871956939800022687432780180818392178709073123353331373011315965680280896735755650091675680722007667153708728485188186965653450591919415129897772500704531083484204256009802043625565542287774299566636078316295125113411325583706020566573294986977164698547137703200443022008505653377365378947288543862725055911788727943036314460020086504429170778872386381956215475209306444914466262735267509651875004139279370893320240127688827675054296294093093354920744403327434214120799757340314496705538078219995180518082515428583740839433883842984823268317117814453641785347046845620463915826027190815790559731433923858312882529042132987246860789417898096245935117545754705002593969747758470845487352156660639391962457416095124403612942059946284579486042861317902103275464677157584106545775551518446983441064825708631574744541847215534147110002165755331087323942894411304556036096' ) ; +test( macro , '1073741824' , '0' , '1' ) ; +test( macro , '-1073741824' , '0' , '1' ) ; +test( macro , '1073741824' , '1' , '1073741824' ) ; +test( macro , '-1073741824' , '1' , '-1073741824' ) ; +test( macro , '1073741824' , '3' , '1237940039285380274899124224' ) ; +test( macro , '-1073741824' , '3' , '-1237940039285380274899124224' ) ; +test( macro , '1073741824' , '7' , '1645504557321206042154969182557350504982735865633579863348609024' ) ; +test( macro , '-1073741824' , '7' , '-1645504557321206042154969182557350504982735865633579863348609024' ) ; +test( macro , '1073741824' , '9' , '1897137590064188545819787018382342682267975428761855001222473056385648716020711424' ) ; +test( macro , '-1073741824' , '9' , '-1897137590064188545819787018382342682267975428761855001222473056385648716020711424' ) ; +test( macro , '1073741824' , '11' , '2187250724783011924372502227117621365353169430893212436425770606409952999199375923223513177023053824' ) ; +test( macro , '-1073741824' , '11' , '-2187250724783011924372502227117621365353169430893212436425770606409952999199375923223513177023053824' ) ; +test( macro , '1073741824' , '17' , '3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024' ) ; +test( macro , '-1073741824' , '17' , '-3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024' ) ; +test( macro , '1073741824' , '22' , '4784065733063810973581885157618788676291241975216665977767007373648750357731006099232824032039924032894289638403441329240212719241920971274455782595989040464660523567661989180298099889009174801022976' ) ; +test( macro , '-1073741824' , '22' , '4784065733063810973581885157618788676291241975216665977767007373648750357731006099232824032039924032894289638403441329240212719241920971274455782595989040464660523567661989180298099889009174801022976' ) ; +test( macro , '1073741824' , '24' , '5515652263101987298728728207430913795608113109085112352897269396216198887424215820128660001943808587833784893551335930816647064191168732319583111500951066614122648616177179922993422016587311577585463592732098692120576' ) ; +test( macro , '-1073741824' , '24' , '5515652263101987298728728207430913795608113109085112352897269396216198887424215820128660001943808587833784893551335930816647064191168732319583111500951066614122648616177179922993422016587311577585463592732098692120576' ) ; +test( macro , '1073741824' , '27' , '6828046779268970776657768233698567984276232522051489956245767999246374131525255241237946573692471593720760228447675638216590132893818229842292076597586769967201441361422350907866192164773697561322460176523147880429251325990375896362151810433024' ) ; +test( macro , '-1073741824' , '27' , '-6828046779268970776657768233698567984276232522051489956245767999246374131525255241237946573692471593720760228447675638216590132893818229842292076597586769967201441361422350907866192164773697561322460176523147880429251325990375896362151810433024' ) ; +test( macro , '1073741824' , '29' , '7872201966280717348342236651726314522606839627565764220475565031568317153405023507392663596386569558004653379220621715171372109048108541030444785631640845193093816697582678260933332408613360539868835105124282664122403089594119217080450011771426148362301864935424' ) ; +test( macro , '-1073741824' , '29' , '-7872201966280717348342236651726314522606839627565764220475565031568317153405023507392663596386569558004653379220621715171372109048108541030444785631640845193093816697582678260933332408613360539868835105124282664122403089594119217080450011771426148362301864935424' ) ; +test( macro , '1073741824' , '1234' , '135032864495417264161796347776955705785892222817973553418838034178314956028897546684160639856425763595503385824329054755201421463563212980917112733900937587464576847323832924136423515380546856668025289567166571296527646275461473028717333267141003518332467805495676717695347879685792063703697070949206732122179518994434776335316458684468092377731792188239016034485284630253586964894185124335453057822293914949906863158326432012623661553678396250401107915138994915256878813546994860886329001648396962604356523710403969300362981938297962596264354907403355610003410746213618666434661128903020244869263896170471066369182082892608827489848219714660341764073206537992528782425500311374732638679622889592596379830695201794132135693911769551065799954240113610377067376683502257705550961373070910821982440913313765403579054599921224319207778610832609088192808064360990585104697667138615140446175879997439210654552913976627035980457885269693547247688226220637387637045378917414583352542513965899437900025330512737621517111697083031434057763772292768696151657707923184295380055081923115043272032888153271224470285860092716037417011085867348183777640814999517894828296507433835585929567261420420462344313146389909474179332054613893650718599796623059768279453815288538594004374465681087299360879696203325418022962651748866461417173042714747088991460375318785407702300361444578324217092319160985594722221278104937860539603355035209045656876866415381803837578632001346316535288568593998708433385135715755188408423372052774222216062791048328356892426522413633286855317150328892404110603628893696215163566867442031835287126762113760377467604420360968473120576018581379277564986140009067855235173575587538977545428601733720192069320627430054733306784720670681238722112369930138992200505842377717496879786984447202871740228658026814953856942888153479080568126661272713405724755303867126253550104922434031984783644501692789857112933381811554363124855689663968314433936452490388268436076601610796805828686914442925663191706651004835742754007540713785525346442305287873815143574033326807511787052642265739017004565917956613363367471933672846629587711796258007368503719485449080451730511414011638477972141851445718086957116808591931107452359052957804865633522313939899601083954314084664652521357737845635635594429769313821802217558277658299721865464301558666750790259183567098179113274454668640485452931068066002908997277843409635151859336573513012860151545891329235097673549964928547801966932932777277610659955980339629366284864226600662175274920200231799911374929694310790998989788523133581837411706270099109279459393672455713820011546843294753524645198035778900516714217425354013155387659200293566814809279617708397538819427548364362324788662653106656895970337977138117687158105548389244431881662586459290188692191645535827574319724588383784870507646115475296972326304672165083538472785124541284886058416994446142617361494723365850552096782926362377318561314608226102827450344958934465468245954006024257745239912802322669809977564421376969565655823452390561157232875258411436971600411470668202989843565841480016584687122684712266492502542278163229587079707811073162054156571019054961062952927977983554302015866971342580754327070415115073966145426561158662194502911612889959593112256884020821481134001501231980935188947653774740923939867063867862219999510114357601167654576478400771215648552504675553652631911512293697639701046365273307557081624386985153768458592210790101466864820465666077389235557282441554467556137942439039191407590628851042708228500292413849444833651262460968069570764996387290215723393788781245642804553333508408301261343724697551028018989537881749905976076338448452394908535816426586597030779896515482117647557447860634450527101713121746502484479941152499856376739864275419495610691316310634478200363068897623674033337430538837932663020502333882835672567028049270502480555370060999493787391837671108324652717939749490597481250676971715293682844252870745501145551758940066811058992261248151841276017611811411887274572413802287051107702233361626519940861991365151787177732149135343171325963570255705926609298821759763745740605618507883067662117450926227987106288796642374051280660094717537306446983341125766514345467801301022109170850857456333788167674306579695352752143676166869626035002861003680151141687395013408918901196436576953798322233993027260775444170722889022629783177992510442629535947158550432935980049655104057058621049474066059547684213926506563385023004213643849612559790681501591969143956634858312507054320677326538188275884275107886773666192492559052155330294262524555672315514034789884026392912345926416901360808651772382910047100655600280544831642567723450232097407181605364971159781140990727057283670253338705128542777670983899963185946930240111611346828021014300849527667380963493241772072243503208897153563615767202700820461479775801950340023203862180599061144940297631835377016813742279451921894644661911014611402981461194280564179453079023523411900246837570509101994534431957542873784483700881074971158165429546479001645257417913405525852266215205603087742174929432327288507482831107662551472614657976383161884377268463657025482687656063877010334242025290874089994813121457120585350369438678750482445541628164325776911259393529988611879496239373025342855694600744246027039218591404431155722013586923335365589621061845464264820717668612915592171183491557882072775450347227785803371128754402118852662696497779734299037300726805751376345509065452470499771152338656741540759667286001807828234665941391188447950478415299791715469552242795959977483249749098144154729856726398843394843136479906418546581912783694281934186249899746840563706877029836122779488478015849960103559937024687849690515515689170897889503967015459345616938867807167382350934016893152627043030526997853293078436718226621464395154690848550466482856381991831742986166751803513242752173233490694252183014711530077920709629933842242926656727149369031087137074130182692159013533974804462296354847649804625060701458152488648760236684887914355314516265818917796761265782595118181981681044254889996850913972129942574101636910767699459646998565563334934817729091557460304359721174908710624610165520926996466684432035990548126234720976930050635146064837916857286368443462256725410214925359769688795382559406991790923193015325212536964901024443651640395352239064142041323998597222052931115684682639641634800512022146941484482355702865668732720081140181922030567504656879986036737923027379371333794512102069490267986276796423969331880136840719651462034396200061876091366707548763496112346222123232248230388694153688276766328691064711815330435460610088491421888195612048740193844188314932702563544622667512558911661710630118364274196170285674349766269310062034958003334299954120247304438475039760866057864514345508533138628508770723222951065702526427845206142448239674333189634298931074576766130399670656349372266937207854772004314241332793691477905804194502714575051020048862726839370657406000869875185698670555381280201599182665294886015354833856011808620179345081837914124086071187518476483594847918835733763073473814523558994575501588763392130790088638634309767210564561156248614464688514525041131096155150204607020153647966454650761265273455261627425314514074528596787641024836845254467857223858579509706178001258970617383401025827829579991212553362569959842654814709014550315424922111780290827915930414726165818710997646590887384752885393971444427639715814163996840822838498023284380865733129768795804080108863886307701355417615576573589725489445560015923098909783946350493434691086273697821816061793195812770178371503741153108240688178150147461201688003004263999364357199123049902951417798592453452403101562071608640099027564271983356263970688542541011654918968049984647651232137086895404259830149749220416879709959182020123061308112888239461649235275893165452695700741882252283027093045450482557353241644181353530529653471719973518815321814018114021209910092621976503477515448618895747516994954217971534012469546841874151849040054346531026855470552536470226180210581952214311535603720572039239234584559973566186577426541184455268877699457062169502204867831831763139996332553492281719620044008348442819347402916347449063826287493279275546962303367251145148862797186077453729802990592616042296098334476139933758210139481670253798728685880004650690300243587853634793764661363939548941992865429829630011064793643332258817519440699413641147721299779933762272040597516388553460177074372616592967741331217479003988681016928742585365278732728251483499212078891220690889658188156539798384331139356971957782445900967760132357158387747329622665956719786329684268357644498465257273930645057475745581973619803774790375513161774140411043479424601685237941073465868677839867198646929631273490654610573573656534496084196010506741518390113797703827155068331674200699131411229929426209680688487714374805974168983332553493786309966923567293209378744360953393793837125430206186894839350307705730235833717173154106746899348996486996231198585887923276258550483914940308115576604381833814866652308982829995287823135115578881841683647985874625837749874589942687788384192613487693851248999443749739642785826605231657455343877879315308426560948548969337045420424230665445855165336217895834289470720467926611740468031169083110333367765062731740323306977689561405194787701475443626301894061597784690178137908223901264029854714026072728307465863936978689722771921158057199058515421972406268544249165602289029057506413446029967238761073334521038239699127377613786798068608688136455403186419278380623768639967693818903002914091657689851030323485482272515883706497395534650119809423124565836391369793842875038747816600835980202179604622141185688760485442517152962269215524720968096159687665960838433942792005418796157545207812339197623327607879244889471757058218065058047984089888544282248414904169827449234143857530585526799957307705003072573479826497347064437602871900701432264712373284911700095912533127999896443887782038410277845379907218733591984612184226296351103012869133391467968434446494841517603701783596211408280361807750260109809286092555909870372810146591135183334539196312751504033478470726845817388732348939299912436932024285485403024073626586251026026899899295415467127267737038677726809661009108302376683834416191919481724680647658317867588060396025374752516402209355880386153514329598353790340684707527726798504415578402359843949160793333347705630484913082537803617023770261845303091364666015596737350934362512646919111958540171867785831140669826682679983246022184079073759821259756221015486738276522189431610413723028908457172736855850746058294313588226728849768689794812414866669348870741591827776664772445325863669071829320107144423553422120538225532216445443836199238118227392732940295380857114186288402531225261406147809210925336362075376428503158948931501742771923187008514442594711388876951547491075456021295349274877008031010408946253351724911972191625857419453217284075817281481549626955942730030530589242183647212102223686706445886268268877799837073315208919568520733667353137904980761596821645748802852145377472403345961092081642831719685504154626740435161580568576' ) ; +test( macro , '-1073741824' , '1234' , '135032864495417264161796347776955705785892222817973553418838034178314956028897546684160639856425763595503385824329054755201421463563212980917112733900937587464576847323832924136423515380546856668025289567166571296527646275461473028717333267141003518332467805495676717695347879685792063703697070949206732122179518994434776335316458684468092377731792188239016034485284630253586964894185124335453057822293914949906863158326432012623661553678396250401107915138994915256878813546994860886329001648396962604356523710403969300362981938297962596264354907403355610003410746213618666434661128903020244869263896170471066369182082892608827489848219714660341764073206537992528782425500311374732638679622889592596379830695201794132135693911769551065799954240113610377067376683502257705550961373070910821982440913313765403579054599921224319207778610832609088192808064360990585104697667138615140446175879997439210654552913976627035980457885269693547247688226220637387637045378917414583352542513965899437900025330512737621517111697083031434057763772292768696151657707923184295380055081923115043272032888153271224470285860092716037417011085867348183777640814999517894828296507433835585929567261420420462344313146389909474179332054613893650718599796623059768279453815288538594004374465681087299360879696203325418022962651748866461417173042714747088991460375318785407702300361444578324217092319160985594722221278104937860539603355035209045656876866415381803837578632001346316535288568593998708433385135715755188408423372052774222216062791048328356892426522413633286855317150328892404110603628893696215163566867442031835287126762113760377467604420360968473120576018581379277564986140009067855235173575587538977545428601733720192069320627430054733306784720670681238722112369930138992200505842377717496879786984447202871740228658026814953856942888153479080568126661272713405724755303867126253550104922434031984783644501692789857112933381811554363124855689663968314433936452490388268436076601610796805828686914442925663191706651004835742754007540713785525346442305287873815143574033326807511787052642265739017004565917956613363367471933672846629587711796258007368503719485449080451730511414011638477972141851445718086957116808591931107452359052957804865633522313939899601083954314084664652521357737845635635594429769313821802217558277658299721865464301558666750790259183567098179113274454668640485452931068066002908997277843409635151859336573513012860151545891329235097673549964928547801966932932777277610659955980339629366284864226600662175274920200231799911374929694310790998989788523133581837411706270099109279459393672455713820011546843294753524645198035778900516714217425354013155387659200293566814809279617708397538819427548364362324788662653106656895970337977138117687158105548389244431881662586459290188692191645535827574319724588383784870507646115475296972326304672165083538472785124541284886058416994446142617361494723365850552096782926362377318561314608226102827450344958934465468245954006024257745239912802322669809977564421376969565655823452390561157232875258411436971600411470668202989843565841480016584687122684712266492502542278163229587079707811073162054156571019054961062952927977983554302015866971342580754327070415115073966145426561158662194502911612889959593112256884020821481134001501231980935188947653774740923939867063867862219999510114357601167654576478400771215648552504675553652631911512293697639701046365273307557081624386985153768458592210790101466864820465666077389235557282441554467556137942439039191407590628851042708228500292413849444833651262460968069570764996387290215723393788781245642804553333508408301261343724697551028018989537881749905976076338448452394908535816426586597030779896515482117647557447860634450527101713121746502484479941152499856376739864275419495610691316310634478200363068897623674033337430538837932663020502333882835672567028049270502480555370060999493787391837671108324652717939749490597481250676971715293682844252870745501145551758940066811058992261248151841276017611811411887274572413802287051107702233361626519940861991365151787177732149135343171325963570255705926609298821759763745740605618507883067662117450926227987106288796642374051280660094717537306446983341125766514345467801301022109170850857456333788167674306579695352752143676166869626035002861003680151141687395013408918901196436576953798322233993027260775444170722889022629783177992510442629535947158550432935980049655104057058621049474066059547684213926506563385023004213643849612559790681501591969143956634858312507054320677326538188275884275107886773666192492559052155330294262524555672315514034789884026392912345926416901360808651772382910047100655600280544831642567723450232097407181605364971159781140990727057283670253338705128542777670983899963185946930240111611346828021014300849527667380963493241772072243503208897153563615767202700820461479775801950340023203862180599061144940297631835377016813742279451921894644661911014611402981461194280564179453079023523411900246837570509101994534431957542873784483700881074971158165429546479001645257417913405525852266215205603087742174929432327288507482831107662551472614657976383161884377268463657025482687656063877010334242025290874089994813121457120585350369438678750482445541628164325776911259393529988611879496239373025342855694600744246027039218591404431155722013586923335365589621061845464264820717668612915592171183491557882072775450347227785803371128754402118852662696497779734299037300726805751376345509065452470499771152338656741540759667286001807828234665941391188447950478415299791715469552242795959977483249749098144154729856726398843394843136479906418546581912783694281934186249899746840563706877029836122779488478015849960103559937024687849690515515689170897889503967015459345616938867807167382350934016893152627043030526997853293078436718226621464395154690848550466482856381991831742986166751803513242752173233490694252183014711530077920709629933842242926656727149369031087137074130182692159013533974804462296354847649804625060701458152488648760236684887914355314516265818917796761265782595118181981681044254889996850913972129942574101636910767699459646998565563334934817729091557460304359721174908710624610165520926996466684432035990548126234720976930050635146064837916857286368443462256725410214925359769688795382559406991790923193015325212536964901024443651640395352239064142041323998597222052931115684682639641634800512022146941484482355702865668732720081140181922030567504656879986036737923027379371333794512102069490267986276796423969331880136840719651462034396200061876091366707548763496112346222123232248230388694153688276766328691064711815330435460610088491421888195612048740193844188314932702563544622667512558911661710630118364274196170285674349766269310062034958003334299954120247304438475039760866057864514345508533138628508770723222951065702526427845206142448239674333189634298931074576766130399670656349372266937207854772004314241332793691477905804194502714575051020048862726839370657406000869875185698670555381280201599182665294886015354833856011808620179345081837914124086071187518476483594847918835733763073473814523558994575501588763392130790088638634309767210564561156248614464688514525041131096155150204607020153647966454650761265273455261627425314514074528596787641024836845254467857223858579509706178001258970617383401025827829579991212553362569959842654814709014550315424922111780290827915930414726165818710997646590887384752885393971444427639715814163996840822838498023284380865733129768795804080108863886307701355417615576573589725489445560015923098909783946350493434691086273697821816061793195812770178371503741153108240688178150147461201688003004263999364357199123049902951417798592453452403101562071608640099027564271983356263970688542541011654918968049984647651232137086895404259830149749220416879709959182020123061308112888239461649235275893165452695700741882252283027093045450482557353241644181353530529653471719973518815321814018114021209910092621976503477515448618895747516994954217971534012469546841874151849040054346531026855470552536470226180210581952214311535603720572039239234584559973566186577426541184455268877699457062169502204867831831763139996332553492281719620044008348442819347402916347449063826287493279275546962303367251145148862797186077453729802990592616042296098334476139933758210139481670253798728685880004650690300243587853634793764661363939548941992865429829630011064793643332258817519440699413641147721299779933762272040597516388553460177074372616592967741331217479003988681016928742585365278732728251483499212078891220690889658188156539798384331139356971957782445900967760132357158387747329622665956719786329684268357644498465257273930645057475745581973619803774790375513161774140411043479424601685237941073465868677839867198646929631273490654610573573656534496084196010506741518390113797703827155068331674200699131411229929426209680688487714374805974168983332553493786309966923567293209378744360953393793837125430206186894839350307705730235833717173154106746899348996486996231198585887923276258550483914940308115576604381833814866652308982829995287823135115578881841683647985874625837749874589942687788384192613487693851248999443749739642785826605231657455343877879315308426560948548969337045420424230665445855165336217895834289470720467926611740468031169083110333367765062731740323306977689561405194787701475443626301894061597784690178137908223901264029854714026072728307465863936978689722771921158057199058515421972406268544249165602289029057506413446029967238761073334521038239699127377613786798068608688136455403186419278380623768639967693818903002914091657689851030323485482272515883706497395534650119809423124565836391369793842875038747816600835980202179604622141185688760485442517152962269215524720968096159687665960838433942792005418796157545207812339197623327607879244889471757058218065058047984089888544282248414904169827449234143857530585526799957307705003072573479826497347064437602871900701432264712373284911700095912533127999896443887782038410277845379907218733591984612184226296351103012869133391467968434446494841517603701783596211408280361807750260109809286092555909870372810146591135183334539196312751504033478470726845817388732348939299912436932024285485403024073626586251026026899899295415467127267737038677726809661009108302376683834416191919481724680647658317867588060396025374752516402209355880386153514329598353790340684707527726798504415578402359843949160793333347705630484913082537803617023770261845303091364666015596737350934362512646919111958540171867785831140669826682679983246022184079073759821259756221015486738276522189431610413723028908457172736855850746058294313588226728849768689794812414866669348870741591827776664772445325863669071829320107144423553422120538225532216445443836199238118227392732940295380857114186288402531225261406147809210925336362075376428503158948931501742771923187008514442594711388876951547491075456021295349274877008031010408946253351724911972191625857419453217284075817281481549626955942730030530589242183647212102223686706445886268268877799837073315208919568520733667353137904980761596821645748802852145377472403345961092081642831719685504154626740435161580568576' ) ; +test( macro , '1073741824' , '5678' , '28148898337860105994977487045818154315885187098857720123923019503536550068661096672354637598480165134022041984837084308868395452311053157640615896546050985553558586892645700423928507935726495168161698045415140497515602386527627319206488017355554288186119966734541348472345944365178980166309150611812365395806608007167010671798672218072170128957907439061754394300128594626814429645477396628406899347464530711061456854894379095840425674956808441653400041181506139011927908393244086335493121681302022622095101860620829845276309901056671871394201026397395171820873860291913878080280170380979892472296164150372296767377145551512657194585337453691634475382711660977481092241928982823053143625635560423178221937797712042117395219329456302241242041523769729459117196674726421874136677546084294826873902192894352596290458993633922997209073832114653500019746006542685067098597091796593235383026677957632827401939309333387666537839316094357314127534920705674404309028805143966637229018794907522055172849778130036761405770603918926933967928498088220730576083729725145992964744748428164200419463740275487586933626822729962824800560240761474558428430552602958126365583033236298214451648931511755996108094562356049299254807663118738845759260918867850503834415322452603653397365429159370357398957195114808416983753993622244836716555146831907033098694343145327951581021334647653286088313114479559741196437718942355964184601385362964266877652784804939052253222575619622416395426846679242522689602653790030499520892085577500725499201404182852867226125589028845844427853042309885329741850855526415975172436890910632693916719523636332471118794070682433535223602563287248795595868253883675189904726519119448801915261351526420699337492762857231988691678382926943587916545335155283702413750409505677924941689908432596377494319662783929468093868450608410231488451353317560659020100954006099204197631204922322164052615891958008133081819761014762487524836715828049458561031763108536694043217084348793653430411896364791299284106421121855831489687835195476115378899943269695006351002750960984964426672142770799033138424141023720291141340435508636127792984379054343612312021179919125313130082850457997100339188672577640528770106417201838870495993792046104170422555977835287298352499757882230600591394487250631375216854641145304444397854662472195749485109206617330733383898435103350307488437904097790795468490159665178407362104384319804361651012650220132889393331591715558188458831449467209968941910069520056730023723713589013657691484906132221013788386184219197754113246865122654385680123164873741763553852763331300981166654373006819001402186381647154946999554421873268375821628561307292124869782352332192908982894920263895011772173577732089662917292761688897717750366293629569204248484060863934466108937195948443800932184673102763342937824460121045896218443122360882698024688871403860910852370898051562718960418260546695613954738347691519692022893663002976632717861663007580356823097781646192222209252702435357691413104372734064147456843965665955652873096110765830684236182089087886565807972209217987226299585696168982138854941280194328335120626512261001331081248654357371396176501075032152655115462224365334172115688122152776903406306442312011439667376618560819888585728027310382981804901247107028140882078332241335878660689097272500434681089309886067525115434143986130726703706878433743992681042628744048964001570508077876948518135387246241479296880092162188798942915085422997374189631465329853471853984489176174861323479075234363120290867769013702739919612009426292832097099802965008680479851809369240814572285623180146280697670984531193650342503967101652478766807739947358226388629806728654389375296457819784548065774571293116718672409678564611844170365489608651048260596575158516893594390739121659741649999445353536303503061294401994598214548838049962733817701620624687363493549713852174836185700963467241090073849191740103227875513619343224494993071747822732607018496581774525356633102020037794640774098109121417106381829411247224212510736696706825452538654935037259956407630578146638429226378102600142256743099393349884190724617199388463752205790794440451940454605274720879574121263752007572801341506805655067825631941739793740936589208965150634092530408044204662895618653609322262359163887982449970383124228287512441583793977627962068395199273400344976325835945060297779883770211181669216457812349694314847337342309957623761533535923980598873005880875269599846465045392510668257169787436828598047252165951647190114307062027405441868359474835271630041202717715681530050858890904183091778324015733255757236109101580482580441967985828890176389397718041212941356619163330226370976268329734773630524413753494529257754781863229577908457569032718062086750844184472834347570239536056326155201810881038696860481717433476664625621082241586991225812173672952437197866259897373157784743844679729067516736518800101031672599250959815137720332161848205045025007611471141186707050967888154770682560924038751737207811193901992570725369435103201791686524505756647772640472180936813395743439078761800234463478180846516292693783004681080895964724137021083746991000603574423399483472642365997697739565793596648669477318614358267250383134596038860702874813526614432265002227880708968988988737493080405962374293053076826540765411717793130826541346297462776836630777435661531826481318792145062405811198530844655829858226912380798813160973881440163721569917634885574462693105998116146807054360746972666730885604323790569427284253076223964273715359978030815340692680006321945430455280199860142711370872816427712142263431097232719784998704069638989755157328661993441529401194894894909869599801115592481835323158814300011842131902588936147873994871847028405399169811064272549350520174591847212829792438106825404534383049157807382417071716548998177187833979248225968420666706416390190707768457675226123463626193995384720198209759936791376844052254490031460575054413862573529726918023653700705063568941702083630891996044965826722959248558923416329510449787545274111154340053470755669172749024818935495960038271562190088388398068258567446215438429638813416144469861387009096942616760208032476355018814040329680679835588802653484030011247737226987035720770688024054612187818344447061414642220551886870397419965104800759185726414865048332705445586347178339611571166805268460025130817411913319730985020314703929369141828244979458118746350794440972469365515773623521735815053404694400936400473790547133327308952286757212455297814986317480141532831981218157144776502263149001123086063793023408647358626440541879077132102385221082903921513070649860566861228278306927456359858970160082545255406851398044427390606896847739909856033659996912142151062203182419823681576029939545766232546225798544936003488100493795546219182495490312417078545669619133839724414087313221443223560772275469655787068013125130766170757522755288995196083208632760367504798374588838275982584188716625435557712975930208506356967363937122210773117642423759034688847074262569157860691733884420095472655868693804788798853460305074114676050174059869840188238249706756922707852403016294480987516418402809622158722332117912191322396344308046005168529470763240755288495911503467885568547110796443005962189288373077954193026536584426645858119360236884973893893358131236585957253729142968547596265350388138211504681166184873067638534159817198960647922530056737171392998222652344768890440903942958874497053450492657340534404950722261826476694600389620993991121412934627781512375531587430119694418600921042491946241808425609218148001707575278154030998716384895216667657329409014393641864525969281112155349965482510043869560234065512374117610382279304357796353832138535779361023572767566136655174688134341190085638519772716269105777397667544752112308407281551063186641110391181368268011784028035535033180997148034817583725977310854347328290703963033914233260949053078632664379976313477320469323833039980151301644772548530801510197665795747529811668583071320734297978242386191013538568847456151931045213697759408021294424885981327060102359352968094713641880316402184069434459849295665713894902493734764537578851014033582135990357328370745283459359873866508862907217949984436520976291123753201389817868962086019717213048013769401358081253749874316414733761110700403879731481327366128134414614015062028812312964841192776605772461602572237848579751596062846119891809475923058727329328606164325877380198476851130919034536367632484283364665496341548696606675798822283175208724674569561785917038686953070189275754779088627350245328334100342506484849574784279451309720531675563912478225243235012917746633631513142936777117922425886154614922105224375020527023628916774071542994620484847765716560515554737127344964768600124294594714592715001471003807303089010784319406981481509952504990850744144964515173603048334536187116309970688343136766612177268007668348523128350364138371524518071578343144952047467567938905941913593215582743180827679406961185115865886327377643057697587542832729089317101509237763970252435463768975389494971467359397430380888536860037432765702651569010253133830734119885207436369488914639018501744924571605683611573454465059643881519676195549227750953450440893566116496066519058403193663154983497437154203819963260242165229405208778700716060684766534758748916704009916082633385168020080405048885760694176577865460810820723540078488639369178154320241426505293354277745875660846622369288568123133292561261235256785531922213375332813363516492867281651918872071496312751377718845934838314667391677793894714490889453532680855202389134062406106528371557396680459568935062620695390268278489516786937751530412550577162465259150382716339278325770531171352930227692196632869620798522311181142960193953850924687498620070544338109430949277948159507329879155210160241450119748611369522285092212852813824570293032227779647026176189223572123084451190061745506256343264326562147424832561761153522386762221700802908370661822157393320044695725445229989991188431755677388407747966911115439215417944956153478651673184696643896949254524276369957021748106422271849652943735723075220056207411130072896924286451944171527022637264455020523596282445070630771934761579048221305568215457139994617211411085307850660300120371189812200827308583395539820589069061017861328862614076955537014856977190049697039330309651801348304720476087039640721882498623638587478814436784569169724978777030982272340221145046578552827191352546947143035275990939793413754422719012024556590240543018750125119716435776594606691472552962887122631806058400823255622524530384727573782908089505801222820975600456796411789607997183949633694399179379455469571927557602044778175978015388866388477893024649939309704230972907459714140113585529896807765412294459996359442449522528811461650087362667428633366378783346662514627715854569781388778149878012550900142410424032639113511075518363232906427235201384917342979688961765962102151375425532423292393037112830729746922825304316043663626837496782405688495899065655537216405612388901278198928051245924054604064320232470222166534446528962122067805923069489828996675843271638295113384222501506572543452808653339012061245181593399976731212745904191650313808438588548016446126120674226308029977326300360093713369252084641668517986682964017531891894972707847947894703397603382187246975964105692629345413266060528347071427038400660608705761598293765664181968080597125867912583308892435338706392483149232139991310577488003922853083026387762353546878968616781786702320683290245408076838623224983658193002922968799601420269991247101304606880493000638853120262969345837845575632652594203162116188047397369127024269086257206506049305152721408369249824397488170653226655559449775665832715337829296847540526548358288035657313921214610780153539347835226207976076946168876430114358524272233723646988855002094455275840302962666856844081766293291452137772048110790637266536704660807449519739327018721619044684676011960134044956848557708417750475836513642574721735576244762978717150713261667412716273664438107629604313094428969497371965141673202051915817445633979326940820989733688568069901109275117585286470786533583664247227757623461868123616550942380510328263064047797942151063136084100508835563648567547381317493212871351484118995384664462190866589013506449874230637279552571417457669151996916924270409859368135881488538365606716772030232698811184558469064636039865808366906057231656211951193116937650377253371722258540457313473237383533121791937083143459043495393649754643213866611930380243460376842178995100338772584518299046902703748625190488159098692582062884386819474282872980115522829156617371896871414855580179892864231619779226423289057203279126691229766046555328864768267364321578175263384079348441103395394618249025089795196954124821643685972538912223482310109199583464708899243992298931497078502095787511123559987214651034665741434614829428967428333802394306584477458469633359430987362811953453518400356509454058669839297226788372776367280158730642818372182875605917838630804855852420246178189659203437587382007313143987554772337361728272583250185719831437811387405182412368783988197961286391351624156213505940541094805465500164206288920572949611162162113050402038557325431333024558950631067367936611318153854810023507303764110973942973756954917700791836575148652033411756519651474800034591874142970228482783950150557217039469375536911748110596177461367744944289602462137274637274069720165611598466507748445243616769937369465337749866771841938628315536271843426900115553507410869477054081430287053781532316668174001761433261847823250273169400494042990324465308492795796008958697421991828212877366624163731089097149011406345956531300275914140023841183483485265586993192321555157485947797690816166469044557255832260658892615942710042684013595996265472441252752479660126933682227709014013002675508541470117652788250994783969626624171862885916722522793464173019418067898505345599496735174015977358875619968199716219533552738926637031051890494978338580207273924479022246491648620522810980430864243281885381172828258575698372088024439462447934958632586064921165575955786537269481483937723577490467737221720409666604585388204859474442997324805317238786488235195413838346371458154199153397286434670625395599277956221756084293733060481746683886469999967199808248860997598988465769993529406058206112180431991132713457015628241212019583216636957380809911503435447564199491276079636441647078944643232895303344668713941249744967791690209229128883799300994462500424955736495750871431874087322800538276593777301272661937240773237633293854544754939117218573431236413676044727898884777030673570034488739595200946297274238360844588881821427893674692289872719794617552712949171013259904704167278643987743105273334320443413659380726864695786527091362412670288650332875617283949480199386204263527209082186767929892326304543956845184355613429740397723016551419039154318260427281778819523773313505580722929854977110755322952416544942744038661223221183759746326498482668536001557277096914159111874312153517083375211013183593250726321533259140501285618966863802490518474254707070066879721010077181030496698210597599398932161175581512349806140123118157674998684530687977209656109669570842567739926631008487026917889091286956137809901880327742971892768270601951934752109320934869765144253043800750296293513146606452851069332013443570630554704382747449487485536496427956274784905893103873987768740604182379428000525642086938721704335210558279257980735181414966979314982367116027137599914079057701202907012346767620471172401133094852140947507709878927974690819147519376781258916641942410215263854181358354623399721795114283058445754664116386572155146227613060724837022655475289960130851827789796741182786701725436689175126115738951255328459283705735673792038332771275966384139356869886544157959423900159524818315186940605161679257955706740318466678645508179828694369147823415549800070451991820864586919375260489703149506500802123898113416334762997208596193606353010669216102269842389887094552624430998968131186451615404193377168588441373578538825728592377440448612020203066191898235515693843215931480135839738134274029581253133656093204899636776425859689995495873537309952309610072133005212939182414561325696226801098867717882906061991955075678342181331882095542089225604653021264291770836186590776579787363667069660002867694074402468427249988282181175359142889347493588450134025762040336381857980331092417620342654222801867511538594654519800002440876114049836951162662750192372554175899061991906290784393548297931360854697304660217388326454025385317464060515392460270735562634219706400179619734817004536958508273604064174329604012897892903752485301302318494759650641425275359084845658186671712160266483012379281979192335879671133821261746570768835599550683335228772226084199813244119457702012788644482031756025391901885339469726868198018085491130601667643050694626140156924968196367534431524629400571184798126488006430721476852350356305114701192180938078185596501406019121622406459154304979668159832955371593225491929291926247593357479974910111035479049436421729173094079651242582981533593842859642090017067207572422151856331378087765898272716477356116505494492527760323026755374093035374204268993047047278479131391553691647838872720204941034872333171803661000114147594995620657679606204475115479977905970944031101379807757313636918891924602682562733654982817525199083912568378542859662922923704736713241305728532013661459371953714893728644715593769353695924513479019412720277833400288463057686946226328790417273092172568136932546842785412317831005776620608067442091003848742510088030854918907472765326404312356309549410618389906172934527763348333129738356175599668898544090809612543931015042371463710234727490208128449271087498194070337397932790231655494664919249685556900070331820527927700923879904712981785622980056040860293852786608014416839444705794599237330395343625677231165730337929171123427679896358733212313404887778628928451238376200468283542093779290360409735166492249355597416078350393046779330842606201068250136256437582935384024422088122049514231186924987486386922255709770571686751402668463117086056087909722759647760111192263760999074221853531262551997916860630419344885774566813330605196726150306444911793623636315706197278750196545874376400639813558827027494733550174136896390860197943805543393966475454387001187325653165083037204644787454406449433808128377060422465144611339962742733002574791924410578469257487544550966959852204997217505241888127436816371252790120771208092431156862674023113879531236174297777218690854959431629046382150819392457019720688697146956554700635427875989653883984765265971447058319231040626981527727045895977255770905523050300664800936806107450054604610397698279501524594807393099512501267065236510023558743136424070008416804213522349576537960765214664370640100210453084611914479027691656864136391290070746628452999965623824867446732398214983818615825977108668636422441563513003831975312156804175525835009983723583171193533501782236576964961510324559549005090600262768394195823389119794969001830645368080861318691095973101919011548228483763812949239379397626324227241369442235711216350246757630159193695160367142155317905915084581982797609343509326821521911481105188403479863217823202421104691839244143919644602509537137465590142091458129871968626743829025365323860594221268369465152742323854658707635430807412874755583770885944383748932124569993895933658098650493753903580677968213439946116629845206367354440478040241152208147047847884378168346630550895572113154003279420848335567732550380587563785065372446579951171277007080376181880859588508139391302063701382117980942753440726346766393542850829543275168072355642671555135145516266084215524110054708924580833152698259832144444062702113296080126316162775848061402470651419774813974402257085656428945474157242235893836799387584558606751664927393493334857578593093025923033903249925802452928325559868490477635990253074330537697360009102142806389826773193350715830565814882983312166010168578638318113581909715614425901966904069916789058597977766919792967752743913284801516270290058840699327499070875081504588210302710253892626213023043634438957621385860258666727257127841683811540495720040171541891264342129606769050464645389966030356482089900989596777679522985065453229500095190697538100163379643439267150956032532346334280315920319424327896526362404605954432140230470878470882264003739306894517976684362812045551613042852192669772965726304705516783708137205632647644097851889002247751584331244400558203132964873335621281299717509879304619288476150109332057109283431502529001299150493028581031388664548216000769077942923394288901958119435090722574806233751271973249874552746532634460237024563407790213999716314923882457446186579151315812380783168745156472877906107226071419443707680584882191451197597628219448713650209673215406805360654332701478226078972457384732586255866424341772998013397576055716829423544245310237330356105227120287256517184974300181658805985949145921001482457911564043446049296375077517623765343452571128748736683475042340324486422980741771950961157672017460212375000343093255257855859277198951018128053837238080978550325407234199361789853768134577442527702115229975219525718789959045191073349653955820878281896398142889923003479767972076383190379298185808476922809215238314249626074164796021558425557210308754766801631838440222800550783465777015428522380797710835404996664778131573332303144318415473153348891859475225796874442481044462069842108821743637445608331048146899622744287339341798591369054634267513173964115613718772637770100806267461469864702974890809600842718955909073251470396524319777099477171768967587473664352749169748604394124828227185348843004451978265273237048553782545156365567001316028448768834710532422641102380518061679205162015773801588206664244457180510418277261829269152549407626154892937631258492719033672820382433466745502235228363223303303588498621164057491411472890847331713440771748363429011212793517034275378352451698293411530204186563333810558260562682373432930496010859284665817691922432863011084933699996961786462463745048747116470391194990030628015332701370191200450760857094229809065249035739502022559141983819390742711457191605178020143282612262800696462461845326859864102767722533666771388582815245205576926226742350534264234612616163494445478555919018674566723039443492562381116590300549213807725226129072939143803666847794403804034573197127632276495815673691688391776493042924568568460383396331869780349811708739849417094527914268223170364569506352973511214621114908992490959875119891914002201928543340360020016065452018805546551793704705117911784155214540116673803430547871133266630619513912440304683435504710983133680288052313077803153090031854465575440001750060605408581808515948034989770356122583873261823440265390089426304521951729320287328409207700383100123151876966524323583031388935239745236968350327632037316230013986711095983640286158845854503322070918325810361899675959053468566534714906108407864581052288055415062268431577178677164927351157974624449718170551912415953093539272615139170040559982269069144788537260760097258745113985468798064087385257717936930463104173511481167429308423462459460962543960069832104794421579983837186447051182599950438328122680458288337425520120137574451732030637289392014736022854027545044245408438033635786397265945453723332808703182454632061130743471916259007228432728541803309270197500946096444605584853072197436724505877621601824420511356681513957999452264448682983769699343994225768926072658063255358146106163505098999696551897853532925142643283744909834395865851620590128292004057571404777642678387685668703868806130918608461650915274491926100585166495256709407294941727457418325940432516141904359150294292748288413140787948986359366462074746713836604803390213998570822968145438813731705421355204337496672010739199285545674998128780178114493708777570231591229449657604145369857370727860129063567167048674305858866375066717347101711427057387739505853397158515841254093617246606188397586238440372102294736076889840979753873898793143249127390280808824855731104585046537769857330026521552755052259518063241611856641516275156726512986189523254888151278812592686063111446785816181415218227445732930445311585144011106096911480434585749527586559521968949018049836045512020729497009550286634399863511982953971128118927749655951377838933784252855345681378774160557470438174481259093651353914975509617330930104363369097847558011805545516823230152705422673827213285554606402424177535395875396349439257879147269990316570555566363631107873583908853302109598741956597344312363552802425107351220022316890426842094449146094093908848454232919398697089400054268720672186047939476318363153358024503206934420826394819801998769864748411198961176921530138349929123130568849437161791761185855627806231398428339981489989031517554700169925879901481360164293541370512956624760397990743413674286804847840458699624232365464488482648339370331099527120400687180993305421299234942550487704295774851922811662380580543940934664708380776764694636606791934436854233668907969931816983166891497973095943662588130142677860603610047337982454343702508574417771555874499100448295382819121831778816886809637030681464951442852987045658744822323017354193015398929135356947939839140306698866302482879187121853214437761579840307617080110522099185105281184531897202070221182174780155244891343031372681720259990267379551766505422208965641261232230697112205687652134593678103177579970271087834049239379072209949397401559634057001243257514833108769363888955683621052565237599125728261239118022575912894175987408009344745117251993238187747886278888586407900202408943623153890915214818002421838815923966958787049692850878031566893781773464813916368968542781397442084762131956466252849726966494397504673443856343004132647844309750841983656463183520640918053128194362601997214048354393807871873141019891406717655832279814142519576502831792032213339668060138693124678086147323694655541522077131244528253802212257686660195802890422055107005242552590674759212912277749904354621960351337529800061117715230093493340418671330565674438486174036271062712551650355860019081761842688678384695345181209344993751433013590249265630411818871254942665247341590902374863056013659912681932484952788985051121820811227358115551518694832616404366490062429428314767614403471928494311323127965060377740115015320155059011183773686991112928134219938238861942579094187368578097611857130108971701774055507254283957072531780780052063471633303056993180268811324636908498651379339810544455043184362168932560296467858789354987134340096423851366091213584971916411716002520202011394261611806506910717102336647860845390923567597373075328613344631519251210849547351316195902683921154170420914315410594227945953667999824864089646190094752335728668593487864038958074636801121239687073243551314746481125760217832551027923488199932464686665557283280854081782932546169494512387423905425853523327120893410410728807263709579745414874034347298836164872219912390950976376370657059966587673786130299383959548096535839326684422935261597602533478601891806412747416883653296136723782138835982528170764256084886875777597602961751140496094774423625070287438285325047835576946313794396636877736116310029692958421411875762799468941694906926445604500237069120930529645136448763546020507845697850054138785172342116922512128840514349291988431425294645753905990244686733733410385281678970312606729383537299554607797672907990394591796359202264492486835738568186180945133516707434961240365199176036679479430505970223502962244183781380913196804818441600413779120622805317818799661043554644440443705675483765184690435438142246744131509594661229983124492357221608279423279364533295157372659250705441584344308292111187384818184306257974181607894350319552740374868519341191483135283763350477192196383786427703966689423831363409240725954775713154895328593988160732590160054997239929414823714727974826024035217860503862168944433455274636864484104518503915125790030638481521747050177942348449246957290358941785218596751364264136325302012127514536979011995360578526074657060450670609980645092613668861127834866905147761396712739540375500705135160407800946104520181528985815263489926159911880084213321212768952431725838938601672188812651102720142982130177098645113732975494219793752073889227065759762609687893651335914924691660042543013159140121403093465609000857166311112970382917214818048185101582696684107408042143042945014390810480019118356949537099663818754715059209366691270390106111853299655506660134809491448878987832685380104145003045774887739416422218687559783784403589016023706079260754932303246949584114360114089506475306440896925694575031099223891967798964042809303692120072723649900326855730217433709980256225249076797838874125035531112686624813374295588750086023037138555024936706002261539102751472102701168353855022613318138841001365460254229596701129402640443828649877042750795516229713646589327314125732074265431844531268182493212072736085146019842646560868628969743149933436726067266230293919685332063288083684098369674426608064526187772953954892826318674314993417979569039823495888917128289051117477198054203719038275454185022748040457767103249901035731885373830510569953185345260681492090178619428435327767997448105824239005042284690390909455119903699725245439425773459997919739647511506450037183108134359259135471444850889646470849065205304395614092274471027676451130301998192579884981980383331004755985458519740718112147812962705310617555010259274607985705228893551463836617686124231748426817936045494654384933976330192421266623131254582148198369659191509650211552964003305770959771233149223935846202962723117218456932567654472669816733803847092639735772223976250554596127643265710435182191800068647592743527104298607516812775387380003886771219532565745981432787326595836968342349008462815121251789385562875463614831060974949395788692980727720786032761748572416672895325498419331366014371448904732847968285929375551256672205371236319010761607531035489389025830582442491033340311783200278400330573275229324139285691959682207033048166845240280073722049031522270750064451502205702838802314453492907125113196867357626343878692666709910893945062710386453480965984908868928331852364750709250772228522623061255781933618377709440518884675617168771208213362028807000568991336640250325843144807507365386167323430530383757386514877678566741578803351624259009223626044690394968507237740190193077024096179943106691946391713265839010095279092109535492123342892233114535396448888859072578357724845567858023341418639436957064116245382812764104096389861125288235620089839796959708844667271837724791853923155783350300837209697417124820469598763421016230556944144273578255047209140685603269167269642662464781417402044138800193094975708451596078152422131206951630446037496865433989208174418961047669463435692646401380865304211042807149992732461476622644253291650530746199877456840901162470871578154957110644808251440332624321213214254142116691052442993385768448482702905034603814208635913143936488381755746324155738630413306167461255699186732545319102104515653378661263778599973833109965924889965578020478609385756785428483645146480030473312941683848824619427905074772081786032588682913441577171034065769355232243310095044798628461790230246155642424833564029628986053338033122509288271156493098356126356548508541821956447282864237858810739664866039796867178105481303341995681155609103956708352541385258044674233021538488882256047867864755689487264233200251948632434367557411696985908027963208271722356561030717196004391383906360151985343954617673570213543813895091001157665808641175774156333012362213294444222039514585400935738306777816189406291014204426171617177142780096988819473458459887462124401026378144063946634234937478266777216707400466276855252285387625315985860983345555708831049494034215551909856922269254608364369447708759473754568912693844211940774320914411502602340550200223765229096489309938496752456919270003385668591424974211318904032650304107631242385298382914407054967999534142551977432253069569518207821850880260921220586532594795739409805616209429954329604196061909860469006839106493724703640208556506345365382655886368345271812409551029573250054776291206004935504682461872164043783174653715005083196118181680022375451553428281102240058446959296955227821993514685348539842528436786789259135360096841258032925547689013177486729459318947085055431774319351281557368747716393992737693541108230965435660525692480717964031924241664724388845193264670242141356326509471299306016413454162671571381531753658371397956451669887495352630248631157664761965740380082152914081452732415621628375282370868233950168887184531780269004718739099708910660900090201255053397723188285495192828542314394947620483330304687649237120551521237832434525777447953092911201834715259217245519280176880179885337857732604864405057483694102485505256429471768330406332418310295400408419432432940963470934061812695129941627390018523946146290853393677169776503143927133001591974399819542958121940959619409121036386106497029519948200613092346225268222984335952952211870862507812271819553684431413604081858429624556100379315289298469968791166103454024434690367788140204407001004669551371707738311759495150757612726027877731029702306303481073738582347882595922394576946021621186829772467105355572710477124514971906584017529758090618910480942805666401277004037346463984772905375809948144463853491825056157101189240572959686371293182284160480818545596306440473897493917768183499944319205900645179847295735484551449225229261645269968906429508149998138016622129015857135775809846587750617782253958791389940037001143544832241065010658361305409557331037342515976928994199426578267553413249193592307251067458813978078291350669052525953950112448480003624625092254818432528874435095079342421604083110240934432048412320452642368267544141594660095901465974593532827701312505826582575011497446990637441740616567155660949020249228616684830320354314707270016757257201734175571113012610174151094479944413698938350396910278103547991209738636261259356477694949886515282971734718664058449032335352583037449070952755124611382023143401658303667877578519296296527334023449638130475844470991345333618511394777165597830452951636561490737471919475646861928324359374967832521186421053437409487480470461954966554705773855950738645971740817037823241512416093275245345820788368984925734262305322634441156380026457447197182213483013402950350246138649304465256498219312777160525099167726998120704957725403800575045490582281116114994378718817183032439438208226746360325766986720916774835054649560456316259175632867603045141112409889552612372622765216331693789078480741915298207295555848306263838407170482811223590205255671667422964415870641962144241361255726603720198161298973619057586912427934170325155184902616599199143436064767051953442782556327831427853713857411098088989225849680427893366785692117780023838758363675203567047751767933295657237755027185531691483903456972232893961200648229859233228579781125136864313569508852945160079164443773633476981446295403950535828103167719751726784350601629663178850550389728335502140195564260831725188380387307159781158911038797569919167004945795140577149749170901864075423619030300911182620763077511907189012876305215130787412613925421216160360751332520310931569700798283937005333531483817004253266974122408656002783119309246945216360789948717449837131577677922669864583629782440739388630470181967026233829667565773873102079102987908580164142215769036178315875089633501680791005716918960107298151922455023391131279507844863316483788898011992028922935242614044660187284736254085622682834529882590617733762378374747202648059522912576707100472276664571181081828497963723051983320823361890551873317486588183597041968899647405888812769324885665206175649824784331136051942330320955997813290150374169555690598341682414758358005345032263076159951017735855589303019820663937187166738223420643133072273883753060709742405287892650826450075887658352906610591407918098029363694819236430463321771822021175150958737396912367945520530338753965695796553479705539515710152369148055346684802318377472296952509107769076222779644096906583067893946837767792663232669048207226484434581284994990609048194589647870843829686890438595763980976771026423557663089024892131001305788227380520948975891163833166047675665100986690807244435880890604269549826217825523138658314976275936944089547382635813595490748259777205666498345149897846304836074875260873003896477439834091090867636750095043118229481634887286877880618142748512183455056884216089061037969239651354971148328982756655369145281624013806819439797157064508394810115585016956024709722310092594188732446592100117958881002635994259708482658147888287467568985217077229723202214489094759132716574769640290873606782618033552995230016319587100167955339887968922205047010011389063615635451818872082020951265796370440182994059107927214391413065859873935945939866806647249901995379512541102421318646178957796346016199498645184725987268058320037711898529749988840623868356343243014613790813886854385271790938818469590098025543064598325239352259049625770848587072012496241155997192163530260660709931448706553743372471711358996628745306173083673087048269342745699715075360398067471245252833958545215646060059000665959497705967713122400751567337815731755845116818658270900111989799269094832164568929732353735566608022923214255026340432900765571233256796055879631067021720614281128969644791733928937006346217595371531877564139995663256573848449072798997910083484619753891994751816910829518221088342707669386410746832407567737548811686421700767615090296347645343686568901979295358016279996388099431659129877979491614467543895195928365541638941655634949364961607403740873577172023120167622227906175594503905136634860440145452083845427286042679614121738077233331267751337860968115995259442772881335900849426085481298429404772477164459261951878223611738672150293049444078426200516395163393367687521048654041265810615151381063263935652729823202648067856665037222449646098366399836365825764298326138044202049679510635928460540367467980830027780617634593554463824431146300071372144602579306617234168891833603527083083269873328058909495444334975114655549063249720495617631057572031874245243997961001300513101362881251642646541467566216418471740031857891367923431107308911790203560135760701742446161244397707823612390132206932904487297474667708365158321867415005381327784224688971310518664331206516637603593863201168061905577055537633677360364992716387876270201457406093693672211367026066251359512820184684258506560590497065152819145724007871945726278627820342047898093019876389613692251293554098133528921703415241378403497988370527212999054917321986991814063285400208883044316721908821428731628645291282887066115443721552877170570604616124348447368192516248043205025944481980530204535986716383404018559523989983031812399260867758441326518650885918827088514421998934133330104671880369209347348081232645725979472839249731922910513395615257747541668539314925713185740795246049806364284790354471628315103815173988609118640232034770300847089190756094694855291947481048264317280061195943077860015918935087735267314720428607580533653591482200744245764521762708826753820707439580086465928632736043303848285308853903855332348614871305843065583952661440745127334275983316524983354636338311850616828793114631386447872731549903896191810618225811994194258543856474840852403622495390802298101905113183569217747553051194324637039769564669265685730461935387485745474548531803797420197881185660590162228866272412460152679622021094012535010728078962481494326411253419325936549782831143489394327333139421162015929032280145593875719333520986496480401015368469256210183619123828239613847237761325489122341426463456792867754427053754130540233036035263170583560480037008121865434631069654336463838256630571872029280200897225456315873962517477987515356054666388335880482803738335843281234886361107822104373467807207148152456587769815724600397786335996139383096925464081053403190812702627052226018164361018089519728465893624253132229741126080320799891756070655845964271557907548948044677077363863257868119670264756034808085525933006104325450582318119445844371631130489034386859999641254958672328012330708972446485735538272452812683116142324976642281414157806727682979925482140939388726958044973071808687704736117992808583199418428491405610310555841404113412524512607651482794741704104508555513921174117909699949944138077122359611486542282513706246826158111267704327564719834230477914342600808913796656021750262931585150361150826736050413848790484905133275593843111446885863249713473516993295032625202150709018861820843089366420307862925612315011763286059087359702646725316162907318251933248352262736009240653208822499846306085714364841289204210934994061604517285057191437038278296329720531577065146776291030097029355798319414150197610941914453739920532379971545817364964168876652813969275610223555143453902384109425782195979757650614340946753732503697778300949396933922189195629933830643427842357993425928608221704765171398421314049866443720720332523788140277791693319134495238776754114249069486675919919115524635059068477480012114318640538800382974854180294512160755863961496844546963247293230634774004814278524154396815808981949969899661609677131701008847067152145047651867360230416267953917241882452727879680761316075541059208603633056503562463652855050253493849478608019628492062758037223414401417765687997128882287982851856003322488026022040865006856147528873435385875797540153930164571391471671391160042539309854941702496529294867154798015788742502152230116550540162661693692539273155844284794665714954330600878709559778016078241522501246825227935293632552928387677803748341379225975660508623451899520006550271647002585568931118574545455659515660038345490294841747607977013620826761777237291808944805985937922773779602164771924014259621421398152048641717356805328377078270519526709847397617420484043908676504757819931941243041177123618041199834460478895183606359631910158614297021460961506443641195117499315571630596201425150181128388605065882437056059202356631642243208507714451165052845415067097808080851672441966218691001993587878740388639996683623023734138001598565353767664950990981120035086276433367022305016868201908444769762114808566372599134247909095865960176282379704629611831845169982707258625668463208361346123275876520219495822276097730472791775307022937656401471570150603123068394019432703602830427629891416112019683710380141408360658819167165008669555364748658228361388799129393430801106411036742406503306803992584318621042791299946447585114169600357210438157957095528391813802687194266709630039430263970789169155406821880784658555589183142366431661016710970043339646209991971708490052667399949393124645885563312313000565256168576816471242098741078655616401684618105443606700332167319459199324804559567998844314002622600802628881188006088161891775688908776969324799915484922813295198723011775033753773984506158063112672102525281790176367584254556349673906995336472433972094889433283905354468728810249741810297092250546619901076403998845317693420655635133057775389193863669306991834605425655868705164472180005264501435736678480521635938716050416503207778590785511538467619550627020032108893492813556129597923638223179897023498575923081788821088015804957415400699801583142361538757925647242388065271363797533919781055008828224632453178217449526824788604797672702208962436493342699356518705273202494331071951221069318730689993098592688654567904468057095325225333473423398110323034834929517178574105226269026108740903170496491984283872607251986315802385098293436390674754854459924659801591397981418582800158623004657928930499141495824770952134245875818682387530291630027075762725947865821227819368622145724985158466580099763293854618850180801176478217411245219876559766971294143696106113612302343864027910528445943043133916663267112690598511400033628218370711265166997699353177108131047643498369142260604016608498278071054060236977815657846742243817272015351033515462368642825223680361745623868563711420294182888855363490410712215539677378212792938504001171148596659381275262256682730800334574549206704438125823923904766613486206013683813771293988827994751308475891995988301215387152574419412381447476226068834648858706639617162206593451235290457471618073014725679837379893842150101611995440452298353244439201356304245337965099464541409401494998025031536565597836490234188808696463603490112721627711519596821915331825959575551885212518211442269003344859271286227913506007307492776291453029668960179359667440503179328412171436131912330530510150770695249381710538279056954140700591999368475200255875436698833909225866367218550888340455501359261125896501916510656688648535225387182212843221884399211433135403492193025160357801967177079276486051857093141011025001336496825522387474808295736361392021889554180981081598463622614232871932724282534643030508717884192962595416173373901132147755094503249975052901677902751297694205366921037547465221635547109834317374178362148899395469037802172487094585186770930012509897916799608892358494351340358146933481155823397177111871069488870844726702308338279055819352376060712105984288779181524985526892916898169771532756305479326497428699889380770355624262738057395122369955283094631409213654957473184032227153342629154545066740409513258489251745894951453040542909925854317157799562581760030422099105501627694451657079935138142010860784796990853862871522191280775790778371590639687771159316980947819357536812939905863927717243432556756272342151545076411956132389217805472604221690864013707763682018315188952607119946758811062148170296556777942812437533627450340974634326975205472489671702387269156909914717782582977963643216463960975465090627229265120385884158666145053132529879199674915773930220784503882143864875273224940706693965405173279072485994435371203100135615211846813669839874064050008341057733642309562593482175302832142539877643154259022027570686612027858107329925902923992533804455918636701337810809181701161499325971154106538957803193456380395910615088491686184579554366213353862404529468229005466380181873403409584627731219911460708898848941094056348224778795961427666141965047354825879067952211675767220530116000295439261008669342189007742280071068070049356315167614419942532751651005774976056088498859079183494367859475921643977167294332870981630985883183324300422297953590981162371465213620389531664792862643382599634861925000395120572493802624931228823781014097594009428931662915167760327883521129852617756650413448593360913038295175844623203494974914165179908375706734492901224902529747574979742050002106663406003731866003308390615816816885072065325693182794964309658585406733281728826923008660251012331523873157425596492124889226549015883614419445399308078104363183239762732476535449006179002325229065282571464204281914919738887388806093573140020542097502020482802396957530453128838606753183180413618231714722120716858511620673458780848212762689022503174722516119261588243338767449952444434492732505531744736476097910021749893176437861458807350602081308059329158498808470348829171596127767256507414629365764148529834296644442209403194238593555813227361493776673378092377609835480829848834776365785714688656577506221151558342984932908100108088372100268085844151793490975148337058265267421349296237603497728123188032647729521086794670644515840940201571775430350624975038471658580078746878268495164463287848960878856056346450934896163169743105045165581323819513175905223706128682491544237639104590089628822641723836875903418320273003356617592635747925184879866743725876316742503710595986069001288762512476804118154783404812514751164897754250989522763124616991870608224785876468099785756699995690777785521839922485175041682536651172403481264582149129122640889832309992014062260099244291268883993005187894563801642518228414478270295351387046868187081518459838095851978514656128229212018856271178656781951865372510349741871729755268077300762982107262353653936518893638816222941960957234072662945228277096588212009569956941412021462076133412738736146790862165840981502021144402381041280424251250883937325527577117337986616772117322486188058793070661939091520797904347760947648229902630915645259852652351426082406577287674223134756799727233169989521419114425894731716176653550245770496344605597265572794815166192064124403378151092763885978383102009455257854519465550301246995381640601210343662742827682420934279626373395652395999817378249059327854481350431454370932564627625133649242512820576486994269314077980997512181283650077115840159571482838806660739273917501233904422474377532434136501025892293378909898783835997744621072578866963094511489842039592491140393655505817457506101458107717258837998857511634160292786691167461904365591738425550323512909380910134644272821236782228219560211903524789255642834093938631309207016144273343561768392015946096695071260787134006919955539723059270708621799610107543927526866927300423827447908075410338089761911335554236211607220959786761543017923621639938468989547957660767931657662555862328888341958281025006331151526846302872456080086024493507245030108230400783031595576151219819834046954989509826434061777922015202698717273136926158519899556374615974574751476743761878619405436331799448199218707421684180814768572994000075233007328760708771469685534860487027489184792709249535333983754626094433733032515199669313204947984860617843400446621737370155244778071837898583388336317051871475231701394053764483680409312689893186371509520310162182341717820195936661217314875571498709625015897265778525908426192975934981499327876012898297481801302513955401656740742216850342293182123512761948372907243591709809867936260493428885126511278718652820255574252494032278725612072481843951172165236478241369093618112853011844718845683244161791308969305441124717285732154355994917446499020686931075617421667334186609165302628815065613660124919531779983740755489097111398429642375934585615080318880945851714180064949364535973649030877678201116971542188813985546353470746080703026718628888167099094905487828127808372458317234986212227785960019744988804796058282310039384459545585269109729037178184648276479018986182113845519243079489398133256876630653378351331911274848188248662596501979226917582116118414287306394568957790733295371259982778148292520276396147454871187308323855969429534148144661681789463134733719964597750987783364244289405724721486331025051689631320360354172622130078192112932513759893682282761898438094232952668404869672405207574076058791075187428450213304735992945688679113077409644110920248046893065024931964522048240938556520005706710005859495886813562695510970268577213963715728820134124358408738944689728844164577395064088737288423942837489012346099566084287150267414187495425649479841848385871962820959477885446374521648256438103084109135495704911087255494677079761801565634611237266318594849791726944047395235607649191909852897356458928629738104459452802907338153775097668122498603398192996423582181648082577188518353374547684930803109595187299401366263822653454162234774772311308453961738397188217257178280423339056239809467587898119899705455896748544161972100059530059884503731622192443130376572006764511595596363774526764097092375628909773455008189308634710975487576532392383165983021315524343179231843380356936802680309074711077530643449857659333638389866129257243516335469244971824181245127687203135672398351564301811199850315776' ) ; +test( macro , '-1073741824' , '5678' , '28148898337860105994977487045818154315885187098857720123923019503536550068661096672354637598480165134022041984837084308868395452311053157640615896546050985553558586892645700423928507935726495168161698045415140497515602386527627319206488017355554288186119966734541348472345944365178980166309150611812365395806608007167010671798672218072170128957907439061754394300128594626814429645477396628406899347464530711061456854894379095840425674956808441653400041181506139011927908393244086335493121681302022622095101860620829845276309901056671871394201026397395171820873860291913878080280170380979892472296164150372296767377145551512657194585337453691634475382711660977481092241928982823053143625635560423178221937797712042117395219329456302241242041523769729459117196674726421874136677546084294826873902192894352596290458993633922997209073832114653500019746006542685067098597091796593235383026677957632827401939309333387666537839316094357314127534920705674404309028805143966637229018794907522055172849778130036761405770603918926933967928498088220730576083729725145992964744748428164200419463740275487586933626822729962824800560240761474558428430552602958126365583033236298214451648931511755996108094562356049299254807663118738845759260918867850503834415322452603653397365429159370357398957195114808416983753993622244836716555146831907033098694343145327951581021334647653286088313114479559741196437718942355964184601385362964266877652784804939052253222575619622416395426846679242522689602653790030499520892085577500725499201404182852867226125589028845844427853042309885329741850855526415975172436890910632693916719523636332471118794070682433535223602563287248795595868253883675189904726519119448801915261351526420699337492762857231988691678382926943587916545335155283702413750409505677924941689908432596377494319662783929468093868450608410231488451353317560659020100954006099204197631204922322164052615891958008133081819761014762487524836715828049458561031763108536694043217084348793653430411896364791299284106421121855831489687835195476115378899943269695006351002750960984964426672142770799033138424141023720291141340435508636127792984379054343612312021179919125313130082850457997100339188672577640528770106417201838870495993792046104170422555977835287298352499757882230600591394487250631375216854641145304444397854662472195749485109206617330733383898435103350307488437904097790795468490159665178407362104384319804361651012650220132889393331591715558188458831449467209968941910069520056730023723713589013657691484906132221013788386184219197754113246865122654385680123164873741763553852763331300981166654373006819001402186381647154946999554421873268375821628561307292124869782352332192908982894920263895011772173577732089662917292761688897717750366293629569204248484060863934466108937195948443800932184673102763342937824460121045896218443122360882698024688871403860910852370898051562718960418260546695613954738347691519692022893663002976632717861663007580356823097781646192222209252702435357691413104372734064147456843965665955652873096110765830684236182089087886565807972209217987226299585696168982138854941280194328335120626512261001331081248654357371396176501075032152655115462224365334172115688122152776903406306442312011439667376618560819888585728027310382981804901247107028140882078332241335878660689097272500434681089309886067525115434143986130726703706878433743992681042628744048964001570508077876948518135387246241479296880092162188798942915085422997374189631465329853471853984489176174861323479075234363120290867769013702739919612009426292832097099802965008680479851809369240814572285623180146280697670984531193650342503967101652478766807739947358226388629806728654389375296457819784548065774571293116718672409678564611844170365489608651048260596575158516893594390739121659741649999445353536303503061294401994598214548838049962733817701620624687363493549713852174836185700963467241090073849191740103227875513619343224494993071747822732607018496581774525356633102020037794640774098109121417106381829411247224212510736696706825452538654935037259956407630578146638429226378102600142256743099393349884190724617199388463752205790794440451940454605274720879574121263752007572801341506805655067825631941739793740936589208965150634092530408044204662895618653609322262359163887982449970383124228287512441583793977627962068395199273400344976325835945060297779883770211181669216457812349694314847337342309957623761533535923980598873005880875269599846465045392510668257169787436828598047252165951647190114307062027405441868359474835271630041202717715681530050858890904183091778324015733255757236109101580482580441967985828890176389397718041212941356619163330226370976268329734773630524413753494529257754781863229577908457569032718062086750844184472834347570239536056326155201810881038696860481717433476664625621082241586991225812173672952437197866259897373157784743844679729067516736518800101031672599250959815137720332161848205045025007611471141186707050967888154770682560924038751737207811193901992570725369435103201791686524505756647772640472180936813395743439078761800234463478180846516292693783004681080895964724137021083746991000603574423399483472642365997697739565793596648669477318614358267250383134596038860702874813526614432265002227880708968988988737493080405962374293053076826540765411717793130826541346297462776836630777435661531826481318792145062405811198530844655829858226912380798813160973881440163721569917634885574462693105998116146807054360746972666730885604323790569427284253076223964273715359978030815340692680006321945430455280199860142711370872816427712142263431097232719784998704069638989755157328661993441529401194894894909869599801115592481835323158814300011842131902588936147873994871847028405399169811064272549350520174591847212829792438106825404534383049157807382417071716548998177187833979248225968420666706416390190707768457675226123463626193995384720198209759936791376844052254490031460575054413862573529726918023653700705063568941702083630891996044965826722959248558923416329510449787545274111154340053470755669172749024818935495960038271562190088388398068258567446215438429638813416144469861387009096942616760208032476355018814040329680679835588802653484030011247737226987035720770688024054612187818344447061414642220551886870397419965104800759185726414865048332705445586347178339611571166805268460025130817411913319730985020314703929369141828244979458118746350794440972469365515773623521735815053404694400936400473790547133327308952286757212455297814986317480141532831981218157144776502263149001123086063793023408647358626440541879077132102385221082903921513070649860566861228278306927456359858970160082545255406851398044427390606896847739909856033659996912142151062203182419823681576029939545766232546225798544936003488100493795546219182495490312417078545669619133839724414087313221443223560772275469655787068013125130766170757522755288995196083208632760367504798374588838275982584188716625435557712975930208506356967363937122210773117642423759034688847074262569157860691733884420095472655868693804788798853460305074114676050174059869840188238249706756922707852403016294480987516418402809622158722332117912191322396344308046005168529470763240755288495911503467885568547110796443005962189288373077954193026536584426645858119360236884973893893358131236585957253729142968547596265350388138211504681166184873067638534159817198960647922530056737171392998222652344768890440903942958874497053450492657340534404950722261826476694600389620993991121412934627781512375531587430119694418600921042491946241808425609218148001707575278154030998716384895216667657329409014393641864525969281112155349965482510043869560234065512374117610382279304357796353832138535779361023572767566136655174688134341190085638519772716269105777397667544752112308407281551063186641110391181368268011784028035535033180997148034817583725977310854347328290703963033914233260949053078632664379976313477320469323833039980151301644772548530801510197665795747529811668583071320734297978242386191013538568847456151931045213697759408021294424885981327060102359352968094713641880316402184069434459849295665713894902493734764537578851014033582135990357328370745283459359873866508862907217949984436520976291123753201389817868962086019717213048013769401358081253749874316414733761110700403879731481327366128134414614015062028812312964841192776605772461602572237848579751596062846119891809475923058727329328606164325877380198476851130919034536367632484283364665496341548696606675798822283175208724674569561785917038686953070189275754779088627350245328334100342506484849574784279451309720531675563912478225243235012917746633631513142936777117922425886154614922105224375020527023628916774071542994620484847765716560515554737127344964768600124294594714592715001471003807303089010784319406981481509952504990850744144964515173603048334536187116309970688343136766612177268007668348523128350364138371524518071578343144952047467567938905941913593215582743180827679406961185115865886327377643057697587542832729089317101509237763970252435463768975389494971467359397430380888536860037432765702651569010253133830734119885207436369488914639018501744924571605683611573454465059643881519676195549227750953450440893566116496066519058403193663154983497437154203819963260242165229405208778700716060684766534758748916704009916082633385168020080405048885760694176577865460810820723540078488639369178154320241426505293354277745875660846622369288568123133292561261235256785531922213375332813363516492867281651918872071496312751377718845934838314667391677793894714490889453532680855202389134062406106528371557396680459568935062620695390268278489516786937751530412550577162465259150382716339278325770531171352930227692196632869620798522311181142960193953850924687498620070544338109430949277948159507329879155210160241450119748611369522285092212852813824570293032227779647026176189223572123084451190061745506256343264326562147424832561761153522386762221700802908370661822157393320044695725445229989991188431755677388407747966911115439215417944956153478651673184696643896949254524276369957021748106422271849652943735723075220056207411130072896924286451944171527022637264455020523596282445070630771934761579048221305568215457139994617211411085307850660300120371189812200827308583395539820589069061017861328862614076955537014856977190049697039330309651801348304720476087039640721882498623638587478814436784569169724978777030982272340221145046578552827191352546947143035275990939793413754422719012024556590240543018750125119716435776594606691472552962887122631806058400823255622524530384727573782908089505801222820975600456796411789607997183949633694399179379455469571927557602044778175978015388866388477893024649939309704230972907459714140113585529896807765412294459996359442449522528811461650087362667428633366378783346662514627715854569781388778149878012550900142410424032639113511075518363232906427235201384917342979688961765962102151375425532423292393037112830729746922825304316043663626837496782405688495899065655537216405612388901278198928051245924054604064320232470222166534446528962122067805923069489828996675843271638295113384222501506572543452808653339012061245181593399976731212745904191650313808438588548016446126120674226308029977326300360093713369252084641668517986682964017531891894972707847947894703397603382187246975964105692629345413266060528347071427038400660608705761598293765664181968080597125867912583308892435338706392483149232139991310577488003922853083026387762353546878968616781786702320683290245408076838623224983658193002922968799601420269991247101304606880493000638853120262969345837845575632652594203162116188047397369127024269086257206506049305152721408369249824397488170653226655559449775665832715337829296847540526548358288035657313921214610780153539347835226207976076946168876430114358524272233723646988855002094455275840302962666856844081766293291452137772048110790637266536704660807449519739327018721619044684676011960134044956848557708417750475836513642574721735576244762978717150713261667412716273664438107629604313094428969497371965141673202051915817445633979326940820989733688568069901109275117585286470786533583664247227757623461868123616550942380510328263064047797942151063136084100508835563648567547381317493212871351484118995384664462190866589013506449874230637279552571417457669151996916924270409859368135881488538365606716772030232698811184558469064636039865808366906057231656211951193116937650377253371722258540457313473237383533121791937083143459043495393649754643213866611930380243460376842178995100338772584518299046902703748625190488159098692582062884386819474282872980115522829156617371896871414855580179892864231619779226423289057203279126691229766046555328864768267364321578175263384079348441103395394618249025089795196954124821643685972538912223482310109199583464708899243992298931497078502095787511123559987214651034665741434614829428967428333802394306584477458469633359430987362811953453518400356509454058669839297226788372776367280158730642818372182875605917838630804855852420246178189659203437587382007313143987554772337361728272583250185719831437811387405182412368783988197961286391351624156213505940541094805465500164206288920572949611162162113050402038557325431333024558950631067367936611318153854810023507303764110973942973756954917700791836575148652033411756519651474800034591874142970228482783950150557217039469375536911748110596177461367744944289602462137274637274069720165611598466507748445243616769937369465337749866771841938628315536271843426900115553507410869477054081430287053781532316668174001761433261847823250273169400494042990324465308492795796008958697421991828212877366624163731089097149011406345956531300275914140023841183483485265586993192321555157485947797690816166469044557255832260658892615942710042684013595996265472441252752479660126933682227709014013002675508541470117652788250994783969626624171862885916722522793464173019418067898505345599496735174015977358875619968199716219533552738926637031051890494978338580207273924479022246491648620522810980430864243281885381172828258575698372088024439462447934958632586064921165575955786537269481483937723577490467737221720409666604585388204859474442997324805317238786488235195413838346371458154199153397286434670625395599277956221756084293733060481746683886469999967199808248860997598988465769993529406058206112180431991132713457015628241212019583216636957380809911503435447564199491276079636441647078944643232895303344668713941249744967791690209229128883799300994462500424955736495750871431874087322800538276593777301272661937240773237633293854544754939117218573431236413676044727898884777030673570034488739595200946297274238360844588881821427893674692289872719794617552712949171013259904704167278643987743105273334320443413659380726864695786527091362412670288650332875617283949480199386204263527209082186767929892326304543956845184355613429740397723016551419039154318260427281778819523773313505580722929854977110755322952416544942744038661223221183759746326498482668536001557277096914159111874312153517083375211013183593250726321533259140501285618966863802490518474254707070066879721010077181030496698210597599398932161175581512349806140123118157674998684530687977209656109669570842567739926631008487026917889091286956137809901880327742971892768270601951934752109320934869765144253043800750296293513146606452851069332013443570630554704382747449487485536496427956274784905893103873987768740604182379428000525642086938721704335210558279257980735181414966979314982367116027137599914079057701202907012346767620471172401133094852140947507709878927974690819147519376781258916641942410215263854181358354623399721795114283058445754664116386572155146227613060724837022655475289960130851827789796741182786701725436689175126115738951255328459283705735673792038332771275966384139356869886544157959423900159524818315186940605161679257955706740318466678645508179828694369147823415549800070451991820864586919375260489703149506500802123898113416334762997208596193606353010669216102269842389887094552624430998968131186451615404193377168588441373578538825728592377440448612020203066191898235515693843215931480135839738134274029581253133656093204899636776425859689995495873537309952309610072133005212939182414561325696226801098867717882906061991955075678342181331882095542089225604653021264291770836186590776579787363667069660002867694074402468427249988282181175359142889347493588450134025762040336381857980331092417620342654222801867511538594654519800002440876114049836951162662750192372554175899061991906290784393548297931360854697304660217388326454025385317464060515392460270735562634219706400179619734817004536958508273604064174329604012897892903752485301302318494759650641425275359084845658186671712160266483012379281979192335879671133821261746570768835599550683335228772226084199813244119457702012788644482031756025391901885339469726868198018085491130601667643050694626140156924968196367534431524629400571184798126488006430721476852350356305114701192180938078185596501406019121622406459154304979668159832955371593225491929291926247593357479974910111035479049436421729173094079651242582981533593842859642090017067207572422151856331378087765898272716477356116505494492527760323026755374093035374204268993047047278479131391553691647838872720204941034872333171803661000114147594995620657679606204475115479977905970944031101379807757313636918891924602682562733654982817525199083912568378542859662922923704736713241305728532013661459371953714893728644715593769353695924513479019412720277833400288463057686946226328790417273092172568136932546842785412317831005776620608067442091003848742510088030854918907472765326404312356309549410618389906172934527763348333129738356175599668898544090809612543931015042371463710234727490208128449271087498194070337397932790231655494664919249685556900070331820527927700923879904712981785622980056040860293852786608014416839444705794599237330395343625677231165730337929171123427679896358733212313404887778628928451238376200468283542093779290360409735166492249355597416078350393046779330842606201068250136256437582935384024422088122049514231186924987486386922255709770571686751402668463117086056087909722759647760111192263760999074221853531262551997916860630419344885774566813330605196726150306444911793623636315706197278750196545874376400639813558827027494733550174136896390860197943805543393966475454387001187325653165083037204644787454406449433808128377060422465144611339962742733002574791924410578469257487544550966959852204997217505241888127436816371252790120771208092431156862674023113879531236174297777218690854959431629046382150819392457019720688697146956554700635427875989653883984765265971447058319231040626981527727045895977255770905523050300664800936806107450054604610397698279501524594807393099512501267065236510023558743136424070008416804213522349576537960765214664370640100210453084611914479027691656864136391290070746628452999965623824867446732398214983818615825977108668636422441563513003831975312156804175525835009983723583171193533501782236576964961510324559549005090600262768394195823389119794969001830645368080861318691095973101919011548228483763812949239379397626324227241369442235711216350246757630159193695160367142155317905915084581982797609343509326821521911481105188403479863217823202421104691839244143919644602509537137465590142091458129871968626743829025365323860594221268369465152742323854658707635430807412874755583770885944383748932124569993895933658098650493753903580677968213439946116629845206367354440478040241152208147047847884378168346630550895572113154003279420848335567732550380587563785065372446579951171277007080376181880859588508139391302063701382117980942753440726346766393542850829543275168072355642671555135145516266084215524110054708924580833152698259832144444062702113296080126316162775848061402470651419774813974402257085656428945474157242235893836799387584558606751664927393493334857578593093025923033903249925802452928325559868490477635990253074330537697360009102142806389826773193350715830565814882983312166010168578638318113581909715614425901966904069916789058597977766919792967752743913284801516270290058840699327499070875081504588210302710253892626213023043634438957621385860258666727257127841683811540495720040171541891264342129606769050464645389966030356482089900989596777679522985065453229500095190697538100163379643439267150956032532346334280315920319424327896526362404605954432140230470878470882264003739306894517976684362812045551613042852192669772965726304705516783708137205632647644097851889002247751584331244400558203132964873335621281299717509879304619288476150109332057109283431502529001299150493028581031388664548216000769077942923394288901958119435090722574806233751271973249874552746532634460237024563407790213999716314923882457446186579151315812380783168745156472877906107226071419443707680584882191451197597628219448713650209673215406805360654332701478226078972457384732586255866424341772998013397576055716829423544245310237330356105227120287256517184974300181658805985949145921001482457911564043446049296375077517623765343452571128748736683475042340324486422980741771950961157672017460212375000343093255257855859277198951018128053837238080978550325407234199361789853768134577442527702115229975219525718789959045191073349653955820878281896398142889923003479767972076383190379298185808476922809215238314249626074164796021558425557210308754766801631838440222800550783465777015428522380797710835404996664778131573332303144318415473153348891859475225796874442481044462069842108821743637445608331048146899622744287339341798591369054634267513173964115613718772637770100806267461469864702974890809600842718955909073251470396524319777099477171768967587473664352749169748604394124828227185348843004451978265273237048553782545156365567001316028448768834710532422641102380518061679205162015773801588206664244457180510418277261829269152549407626154892937631258492719033672820382433466745502235228363223303303588498621164057491411472890847331713440771748363429011212793517034275378352451698293411530204186563333810558260562682373432930496010859284665817691922432863011084933699996961786462463745048747116470391194990030628015332701370191200450760857094229809065249035739502022559141983819390742711457191605178020143282612262800696462461845326859864102767722533666771388582815245205576926226742350534264234612616163494445478555919018674566723039443492562381116590300549213807725226129072939143803666847794403804034573197127632276495815673691688391776493042924568568460383396331869780349811708739849417094527914268223170364569506352973511214621114908992490959875119891914002201928543340360020016065452018805546551793704705117911784155214540116673803430547871133266630619513912440304683435504710983133680288052313077803153090031854465575440001750060605408581808515948034989770356122583873261823440265390089426304521951729320287328409207700383100123151876966524323583031388935239745236968350327632037316230013986711095983640286158845854503322070918325810361899675959053468566534714906108407864581052288055415062268431577178677164927351157974624449718170551912415953093539272615139170040559982269069144788537260760097258745113985468798064087385257717936930463104173511481167429308423462459460962543960069832104794421579983837186447051182599950438328122680458288337425520120137574451732030637289392014736022854027545044245408438033635786397265945453723332808703182454632061130743471916259007228432728541803309270197500946096444605584853072197436724505877621601824420511356681513957999452264448682983769699343994225768926072658063255358146106163505098999696551897853532925142643283744909834395865851620590128292004057571404777642678387685668703868806130918608461650915274491926100585166495256709407294941727457418325940432516141904359150294292748288413140787948986359366462074746713836604803390213998570822968145438813731705421355204337496672010739199285545674998128780178114493708777570231591229449657604145369857370727860129063567167048674305858866375066717347101711427057387739505853397158515841254093617246606188397586238440372102294736076889840979753873898793143249127390280808824855731104585046537769857330026521552755052259518063241611856641516275156726512986189523254888151278812592686063111446785816181415218227445732930445311585144011106096911480434585749527586559521968949018049836045512020729497009550286634399863511982953971128118927749655951377838933784252855345681378774160557470438174481259093651353914975509617330930104363369097847558011805545516823230152705422673827213285554606402424177535395875396349439257879147269990316570555566363631107873583908853302109598741956597344312363552802425107351220022316890426842094449146094093908848454232919398697089400054268720672186047939476318363153358024503206934420826394819801998769864748411198961176921530138349929123130568849437161791761185855627806231398428339981489989031517554700169925879901481360164293541370512956624760397990743413674286804847840458699624232365464488482648339370331099527120400687180993305421299234942550487704295774851922811662380580543940934664708380776764694636606791934436854233668907969931816983166891497973095943662588130142677860603610047337982454343702508574417771555874499100448295382819121831778816886809637030681464951442852987045658744822323017354193015398929135356947939839140306698866302482879187121853214437761579840307617080110522099185105281184531897202070221182174780155244891343031372681720259990267379551766505422208965641261232230697112205687652134593678103177579970271087834049239379072209949397401559634057001243257514833108769363888955683621052565237599125728261239118022575912894175987408009344745117251993238187747886278888586407900202408943623153890915214818002421838815923966958787049692850878031566893781773464813916368968542781397442084762131956466252849726966494397504673443856343004132647844309750841983656463183520640918053128194362601997214048354393807871873141019891406717655832279814142519576502831792032213339668060138693124678086147323694655541522077131244528253802212257686660195802890422055107005242552590674759212912277749904354621960351337529800061117715230093493340418671330565674438486174036271062712551650355860019081761842688678384695345181209344993751433013590249265630411818871254942665247341590902374863056013659912681932484952788985051121820811227358115551518694832616404366490062429428314767614403471928494311323127965060377740115015320155059011183773686991112928134219938238861942579094187368578097611857130108971701774055507254283957072531780780052063471633303056993180268811324636908498651379339810544455043184362168932560296467858789354987134340096423851366091213584971916411716002520202011394261611806506910717102336647860845390923567597373075328613344631519251210849547351316195902683921154170420914315410594227945953667999824864089646190094752335728668593487864038958074636801121239687073243551314746481125760217832551027923488199932464686665557283280854081782932546169494512387423905425853523327120893410410728807263709579745414874034347298836164872219912390950976376370657059966587673786130299383959548096535839326684422935261597602533478601891806412747416883653296136723782138835982528170764256084886875777597602961751140496094774423625070287438285325047835576946313794396636877736116310029692958421411875762799468941694906926445604500237069120930529645136448763546020507845697850054138785172342116922512128840514349291988431425294645753905990244686733733410385281678970312606729383537299554607797672907990394591796359202264492486835738568186180945133516707434961240365199176036679479430505970223502962244183781380913196804818441600413779120622805317818799661043554644440443705675483765184690435438142246744131509594661229983124492357221608279423279364533295157372659250705441584344308292111187384818184306257974181607894350319552740374868519341191483135283763350477192196383786427703966689423831363409240725954775713154895328593988160732590160054997239929414823714727974826024035217860503862168944433455274636864484104518503915125790030638481521747050177942348449246957290358941785218596751364264136325302012127514536979011995360578526074657060450670609980645092613668861127834866905147761396712739540375500705135160407800946104520181528985815263489926159911880084213321212768952431725838938601672188812651102720142982130177098645113732975494219793752073889227065759762609687893651335914924691660042543013159140121403093465609000857166311112970382917214818048185101582696684107408042143042945014390810480019118356949537099663818754715059209366691270390106111853299655506660134809491448878987832685380104145003045774887739416422218687559783784403589016023706079260754932303246949584114360114089506475306440896925694575031099223891967798964042809303692120072723649900326855730217433709980256225249076797838874125035531112686624813374295588750086023037138555024936706002261539102751472102701168353855022613318138841001365460254229596701129402640443828649877042750795516229713646589327314125732074265431844531268182493212072736085146019842646560868628969743149933436726067266230293919685332063288083684098369674426608064526187772953954892826318674314993417979569039823495888917128289051117477198054203719038275454185022748040457767103249901035731885373830510569953185345260681492090178619428435327767997448105824239005042284690390909455119903699725245439425773459997919739647511506450037183108134359259135471444850889646470849065205304395614092274471027676451130301998192579884981980383331004755985458519740718112147812962705310617555010259274607985705228893551463836617686124231748426817936045494654384933976330192421266623131254582148198369659191509650211552964003305770959771233149223935846202962723117218456932567654472669816733803847092639735772223976250554596127643265710435182191800068647592743527104298607516812775387380003886771219532565745981432787326595836968342349008462815121251789385562875463614831060974949395788692980727720786032761748572416672895325498419331366014371448904732847968285929375551256672205371236319010761607531035489389025830582442491033340311783200278400330573275229324139285691959682207033048166845240280073722049031522270750064451502205702838802314453492907125113196867357626343878692666709910893945062710386453480965984908868928331852364750709250772228522623061255781933618377709440518884675617168771208213362028807000568991336640250325843144807507365386167323430530383757386514877678566741578803351624259009223626044690394968507237740190193077024096179943106691946391713265839010095279092109535492123342892233114535396448888859072578357724845567858023341418639436957064116245382812764104096389861125288235620089839796959708844667271837724791853923155783350300837209697417124820469598763421016230556944144273578255047209140685603269167269642662464781417402044138800193094975708451596078152422131206951630446037496865433989208174418961047669463435692646401380865304211042807149992732461476622644253291650530746199877456840901162470871578154957110644808251440332624321213214254142116691052442993385768448482702905034603814208635913143936488381755746324155738630413306167461255699186732545319102104515653378661263778599973833109965924889965578020478609385756785428483645146480030473312941683848824619427905074772081786032588682913441577171034065769355232243310095044798628461790230246155642424833564029628986053338033122509288271156493098356126356548508541821956447282864237858810739664866039796867178105481303341995681155609103956708352541385258044674233021538488882256047867864755689487264233200251948632434367557411696985908027963208271722356561030717196004391383906360151985343954617673570213543813895091001157665808641175774156333012362213294444222039514585400935738306777816189406291014204426171617177142780096988819473458459887462124401026378144063946634234937478266777216707400466276855252285387625315985860983345555708831049494034215551909856922269254608364369447708759473754568912693844211940774320914411502602340550200223765229096489309938496752456919270003385668591424974211318904032650304107631242385298382914407054967999534142551977432253069569518207821850880260921220586532594795739409805616209429954329604196061909860469006839106493724703640208556506345365382655886368345271812409551029573250054776291206004935504682461872164043783174653715005083196118181680022375451553428281102240058446959296955227821993514685348539842528436786789259135360096841258032925547689013177486729459318947085055431774319351281557368747716393992737693541108230965435660525692480717964031924241664724388845193264670242141356326509471299306016413454162671571381531753658371397956451669887495352630248631157664761965740380082152914081452732415621628375282370868233950168887184531780269004718739099708910660900090201255053397723188285495192828542314394947620483330304687649237120551521237832434525777447953092911201834715259217245519280176880179885337857732604864405057483694102485505256429471768330406332418310295400408419432432940963470934061812695129941627390018523946146290853393677169776503143927133001591974399819542958121940959619409121036386106497029519948200613092346225268222984335952952211870862507812271819553684431413604081858429624556100379315289298469968791166103454024434690367788140204407001004669551371707738311759495150757612726027877731029702306303481073738582347882595922394576946021621186829772467105355572710477124514971906584017529758090618910480942805666401277004037346463984772905375809948144463853491825056157101189240572959686371293182284160480818545596306440473897493917768183499944319205900645179847295735484551449225229261645269968906429508149998138016622129015857135775809846587750617782253958791389940037001143544832241065010658361305409557331037342515976928994199426578267553413249193592307251067458813978078291350669052525953950112448480003624625092254818432528874435095079342421604083110240934432048412320452642368267544141594660095901465974593532827701312505826582575011497446990637441740616567155660949020249228616684830320354314707270016757257201734175571113012610174151094479944413698938350396910278103547991209738636261259356477694949886515282971734718664058449032335352583037449070952755124611382023143401658303667877578519296296527334023449638130475844470991345333618511394777165597830452951636561490737471919475646861928324359374967832521186421053437409487480470461954966554705773855950738645971740817037823241512416093275245345820788368984925734262305322634441156380026457447197182213483013402950350246138649304465256498219312777160525099167726998120704957725403800575045490582281116114994378718817183032439438208226746360325766986720916774835054649560456316259175632867603045141112409889552612372622765216331693789078480741915298207295555848306263838407170482811223590205255671667422964415870641962144241361255726603720198161298973619057586912427934170325155184902616599199143436064767051953442782556327831427853713857411098088989225849680427893366785692117780023838758363675203567047751767933295657237755027185531691483903456972232893961200648229859233228579781125136864313569508852945160079164443773633476981446295403950535828103167719751726784350601629663178850550389728335502140195564260831725188380387307159781158911038797569919167004945795140577149749170901864075423619030300911182620763077511907189012876305215130787412613925421216160360751332520310931569700798283937005333531483817004253266974122408656002783119309246945216360789948717449837131577677922669864583629782440739388630470181967026233829667565773873102079102987908580164142215769036178315875089633501680791005716918960107298151922455023391131279507844863316483788898011992028922935242614044660187284736254085622682834529882590617733762378374747202648059522912576707100472276664571181081828497963723051983320823361890551873317486588183597041968899647405888812769324885665206175649824784331136051942330320955997813290150374169555690598341682414758358005345032263076159951017735855589303019820663937187166738223420643133072273883753060709742405287892650826450075887658352906610591407918098029363694819236430463321771822021175150958737396912367945520530338753965695796553479705539515710152369148055346684802318377472296952509107769076222779644096906583067893946837767792663232669048207226484434581284994990609048194589647870843829686890438595763980976771026423557663089024892131001305788227380520948975891163833166047675665100986690807244435880890604269549826217825523138658314976275936944089547382635813595490748259777205666498345149897846304836074875260873003896477439834091090867636750095043118229481634887286877880618142748512183455056884216089061037969239651354971148328982756655369145281624013806819439797157064508394810115585016956024709722310092594188732446592100117958881002635994259708482658147888287467568985217077229723202214489094759132716574769640290873606782618033552995230016319587100167955339887968922205047010011389063615635451818872082020951265796370440182994059107927214391413065859873935945939866806647249901995379512541102421318646178957796346016199498645184725987268058320037711898529749988840623868356343243014613790813886854385271790938818469590098025543064598325239352259049625770848587072012496241155997192163530260660709931448706553743372471711358996628745306173083673087048269342745699715075360398067471245252833958545215646060059000665959497705967713122400751567337815731755845116818658270900111989799269094832164568929732353735566608022923214255026340432900765571233256796055879631067021720614281128969644791733928937006346217595371531877564139995663256573848449072798997910083484619753891994751816910829518221088342707669386410746832407567737548811686421700767615090296347645343686568901979295358016279996388099431659129877979491614467543895195928365541638941655634949364961607403740873577172023120167622227906175594503905136634860440145452083845427286042679614121738077233331267751337860968115995259442772881335900849426085481298429404772477164459261951878223611738672150293049444078426200516395163393367687521048654041265810615151381063263935652729823202648067856665037222449646098366399836365825764298326138044202049679510635928460540367467980830027780617634593554463824431146300071372144602579306617234168891833603527083083269873328058909495444334975114655549063249720495617631057572031874245243997961001300513101362881251642646541467566216418471740031857891367923431107308911790203560135760701742446161244397707823612390132206932904487297474667708365158321867415005381327784224688971310518664331206516637603593863201168061905577055537633677360364992716387876270201457406093693672211367026066251359512820184684258506560590497065152819145724007871945726278627820342047898093019876389613692251293554098133528921703415241378403497988370527212999054917321986991814063285400208883044316721908821428731628645291282887066115443721552877170570604616124348447368192516248043205025944481980530204535986716383404018559523989983031812399260867758441326518650885918827088514421998934133330104671880369209347348081232645725979472839249731922910513395615257747541668539314925713185740795246049806364284790354471628315103815173988609118640232034770300847089190756094694855291947481048264317280061195943077860015918935087735267314720428607580533653591482200744245764521762708826753820707439580086465928632736043303848285308853903855332348614871305843065583952661440745127334275983316524983354636338311850616828793114631386447872731549903896191810618225811994194258543856474840852403622495390802298101905113183569217747553051194324637039769564669265685730461935387485745474548531803797420197881185660590162228866272412460152679622021094012535010728078962481494326411253419325936549782831143489394327333139421162015929032280145593875719333520986496480401015368469256210183619123828239613847237761325489122341426463456792867754427053754130540233036035263170583560480037008121865434631069654336463838256630571872029280200897225456315873962517477987515356054666388335880482803738335843281234886361107822104373467807207148152456587769815724600397786335996139383096925464081053403190812702627052226018164361018089519728465893624253132229741126080320799891756070655845964271557907548948044677077363863257868119670264756034808085525933006104325450582318119445844371631130489034386859999641254958672328012330708972446485735538272452812683116142324976642281414157806727682979925482140939388726958044973071808687704736117992808583199418428491405610310555841404113412524512607651482794741704104508555513921174117909699949944138077122359611486542282513706246826158111267704327564719834230477914342600808913796656021750262931585150361150826736050413848790484905133275593843111446885863249713473516993295032625202150709018861820843089366420307862925612315011763286059087359702646725316162907318251933248352262736009240653208822499846306085714364841289204210934994061604517285057191437038278296329720531577065146776291030097029355798319414150197610941914453739920532379971545817364964168876652813969275610223555143453902384109425782195979757650614340946753732503697778300949396933922189195629933830643427842357993425928608221704765171398421314049866443720720332523788140277791693319134495238776754114249069486675919919115524635059068477480012114318640538800382974854180294512160755863961496844546963247293230634774004814278524154396815808981949969899661609677131701008847067152145047651867360230416267953917241882452727879680761316075541059208603633056503562463652855050253493849478608019628492062758037223414401417765687997128882287982851856003322488026022040865006856147528873435385875797540153930164571391471671391160042539309854941702496529294867154798015788742502152230116550540162661693692539273155844284794665714954330600878709559778016078241522501246825227935293632552928387677803748341379225975660508623451899520006550271647002585568931118574545455659515660038345490294841747607977013620826761777237291808944805985937922773779602164771924014259621421398152048641717356805328377078270519526709847397617420484043908676504757819931941243041177123618041199834460478895183606359631910158614297021460961506443641195117499315571630596201425150181128388605065882437056059202356631642243208507714451165052845415067097808080851672441966218691001993587878740388639996683623023734138001598565353767664950990981120035086276433367022305016868201908444769762114808566372599134247909095865960176282379704629611831845169982707258625668463208361346123275876520219495822276097730472791775307022937656401471570150603123068394019432703602830427629891416112019683710380141408360658819167165008669555364748658228361388799129393430801106411036742406503306803992584318621042791299946447585114169600357210438157957095528391813802687194266709630039430263970789169155406821880784658555589183142366431661016710970043339646209991971708490052667399949393124645885563312313000565256168576816471242098741078655616401684618105443606700332167319459199324804559567998844314002622600802628881188006088161891775688908776969324799915484922813295198723011775033753773984506158063112672102525281790176367584254556349673906995336472433972094889433283905354468728810249741810297092250546619901076403998845317693420655635133057775389193863669306991834605425655868705164472180005264501435736678480521635938716050416503207778590785511538467619550627020032108893492813556129597923638223179897023498575923081788821088015804957415400699801583142361538757925647242388065271363797533919781055008828224632453178217449526824788604797672702208962436493342699356518705273202494331071951221069318730689993098592688654567904468057095325225333473423398110323034834929517178574105226269026108740903170496491984283872607251986315802385098293436390674754854459924659801591397981418582800158623004657928930499141495824770952134245875818682387530291630027075762725947865821227819368622145724985158466580099763293854618850180801176478217411245219876559766971294143696106113612302343864027910528445943043133916663267112690598511400033628218370711265166997699353177108131047643498369142260604016608498278071054060236977815657846742243817272015351033515462368642825223680361745623868563711420294182888855363490410712215539677378212792938504001171148596659381275262256682730800334574549206704438125823923904766613486206013683813771293988827994751308475891995988301215387152574419412381447476226068834648858706639617162206593451235290457471618073014725679837379893842150101611995440452298353244439201356304245337965099464541409401494998025031536565597836490234188808696463603490112721627711519596821915331825959575551885212518211442269003344859271286227913506007307492776291453029668960179359667440503179328412171436131912330530510150770695249381710538279056954140700591999368475200255875436698833909225866367218550888340455501359261125896501916510656688648535225387182212843221884399211433135403492193025160357801967177079276486051857093141011025001336496825522387474808295736361392021889554180981081598463622614232871932724282534643030508717884192962595416173373901132147755094503249975052901677902751297694205366921037547465221635547109834317374178362148899395469037802172487094585186770930012509897916799608892358494351340358146933481155823397177111871069488870844726702308338279055819352376060712105984288779181524985526892916898169771532756305479326497428699889380770355624262738057395122369955283094631409213654957473184032227153342629154545066740409513258489251745894951453040542909925854317157799562581760030422099105501627694451657079935138142010860784796990853862871522191280775790778371590639687771159316980947819357536812939905863927717243432556756272342151545076411956132389217805472604221690864013707763682018315188952607119946758811062148170296556777942812437533627450340974634326975205472489671702387269156909914717782582977963643216463960975465090627229265120385884158666145053132529879199674915773930220784503882143864875273224940706693965405173279072485994435371203100135615211846813669839874064050008341057733642309562593482175302832142539877643154259022027570686612027858107329925902923992533804455918636701337810809181701161499325971154106538957803193456380395910615088491686184579554366213353862404529468229005466380181873403409584627731219911460708898848941094056348224778795961427666141965047354825879067952211675767220530116000295439261008669342189007742280071068070049356315167614419942532751651005774976056088498859079183494367859475921643977167294332870981630985883183324300422297953590981162371465213620389531664792862643382599634861925000395120572493802624931228823781014097594009428931662915167760327883521129852617756650413448593360913038295175844623203494974914165179908375706734492901224902529747574979742050002106663406003731866003308390615816816885072065325693182794964309658585406733281728826923008660251012331523873157425596492124889226549015883614419445399308078104363183239762732476535449006179002325229065282571464204281914919738887388806093573140020542097502020482802396957530453128838606753183180413618231714722120716858511620673458780848212762689022503174722516119261588243338767449952444434492732505531744736476097910021749893176437861458807350602081308059329158498808470348829171596127767256507414629365764148529834296644442209403194238593555813227361493776673378092377609835480829848834776365785714688656577506221151558342984932908100108088372100268085844151793490975148337058265267421349296237603497728123188032647729521086794670644515840940201571775430350624975038471658580078746878268495164463287848960878856056346450934896163169743105045165581323819513175905223706128682491544237639104590089628822641723836875903418320273003356617592635747925184879866743725876316742503710595986069001288762512476804118154783404812514751164897754250989522763124616991870608224785876468099785756699995690777785521839922485175041682536651172403481264582149129122640889832309992014062260099244291268883993005187894563801642518228414478270295351387046868187081518459838095851978514656128229212018856271178656781951865372510349741871729755268077300762982107262353653936518893638816222941960957234072662945228277096588212009569956941412021462076133412738736146790862165840981502021144402381041280424251250883937325527577117337986616772117322486188058793070661939091520797904347760947648229902630915645259852652351426082406577287674223134756799727233169989521419114425894731716176653550245770496344605597265572794815166192064124403378151092763885978383102009455257854519465550301246995381640601210343662742827682420934279626373395652395999817378249059327854481350431454370932564627625133649242512820576486994269314077980997512181283650077115840159571482838806660739273917501233904422474377532434136501025892293378909898783835997744621072578866963094511489842039592491140393655505817457506101458107717258837998857511634160292786691167461904365591738425550323512909380910134644272821236782228219560211903524789255642834093938631309207016144273343561768392015946096695071260787134006919955539723059270708621799610107543927526866927300423827447908075410338089761911335554236211607220959786761543017923621639938468989547957660767931657662555862328888341958281025006331151526846302872456080086024493507245030108230400783031595576151219819834046954989509826434061777922015202698717273136926158519899556374615974574751476743761878619405436331799448199218707421684180814768572994000075233007328760708771469685534860487027489184792709249535333983754626094433733032515199669313204947984860617843400446621737370155244778071837898583388336317051871475231701394053764483680409312689893186371509520310162182341717820195936661217314875571498709625015897265778525908426192975934981499327876012898297481801302513955401656740742216850342293182123512761948372907243591709809867936260493428885126511278718652820255574252494032278725612072481843951172165236478241369093618112853011844718845683244161791308969305441124717285732154355994917446499020686931075617421667334186609165302628815065613660124919531779983740755489097111398429642375934585615080318880945851714180064949364535973649030877678201116971542188813985546353470746080703026718628888167099094905487828127808372458317234986212227785960019744988804796058282310039384459545585269109729037178184648276479018986182113845519243079489398133256876630653378351331911274848188248662596501979226917582116118414287306394568957790733295371259982778148292520276396147454871187308323855969429534148144661681789463134733719964597750987783364244289405724721486331025051689631320360354172622130078192112932513759893682282761898438094232952668404869672405207574076058791075187428450213304735992945688679113077409644110920248046893065024931964522048240938556520005706710005859495886813562695510970268577213963715728820134124358408738944689728844164577395064088737288423942837489012346099566084287150267414187495425649479841848385871962820959477885446374521648256438103084109135495704911087255494677079761801565634611237266318594849791726944047395235607649191909852897356458928629738104459452802907338153775097668122498603398192996423582181648082577188518353374547684930803109595187299401366263822653454162234774772311308453961738397188217257178280423339056239809467587898119899705455896748544161972100059530059884503731622192443130376572006764511595596363774526764097092375628909773455008189308634710975487576532392383165983021315524343179231843380356936802680309074711077530643449857659333638389866129257243516335469244971824181245127687203135672398351564301811199850315776' ) ; +test( macro , '51676101935731' , '0' , '1' ) ; +test( macro , '-51676101935731' , '0' , '1' ) ; +test( macro , '51676101935731' , '1' , '51676101935731' ) ; +test( macro , '-51676101935731' , '1' , '-51676101935731' ) ; +test( macro , '51676101935731' , '3' , '137996870875659993023030601717979081222891' ) ; +test( macro , '-51676101935731' , '3' , '-137996870875659993023030601717979081222891' ) ; +test( macro , '51676101935731' , '7' , '984075056308295134728924301613024127189711420386591471717924665943308236455086452620716372586011' ) ; +test( macro , '-51676101935731' , '7' , '-984075056308295134728924301613024127189711420386591471717924665943308236455086452620716372586011' ) ; +test( macro , '51676101935731' , '9' , '2627893230921823604806622170301238567075367550796577156262388588821361374710043228118573957775035487173592314570495647093971' ) ; +test( macro , '-51676101935731' , '9' , '-2627893230921823604806622170301238567075367550796577156262388588821361374710043228118573957775035487173592314570495647093971' ) ; +test( macro , '51676101935731' , '11' , '7017577357393414069660702103810709794111639796715410950809665871416156554402226865497006924403635139554341331701687118636537520158096482611987596307531' ) ; +test( macro , '-51676101935731' , '11' , '-7017577357393414069660702103810709794111639796715410950809665871416156554402226865497006924403635139554341331701687118636537520158096482611987596307531' ) ; +test( macro , '51676101935731' , '17' , '133636682614207953928748833850325980733386921434321011865528143804403832298431098135380464855882180500142250108938933037601304663280771463018430933459134652554649625077355814284452093494072216581175752265212265439075492239388118741811' ) ; +test( macro , '-51676101935731' , '17' , '-133636682614207953928748833850325980733386921434321011865528143804403832298431098135380464855882180500142250108938933037601304663280771463018430933459134652554649625077355814284452093494072216581175752265212265439075492239388118741811' ) ; +test( macro , '51676101935731' , '22' , '49246391967000732783507102143055596698062541496879424569521554617507032914914454137461679988278650797334594157775094696043090861230475376194375316521688783968615512922433798610465048085885649879473134467691860598529596944970613815754223330498710317737303087189649634312376508482500446153530865527315961' ) ; +test( macro , '-51676101935731' , '22' , '49246391967000732783507102143055596698062541496879424569521554617507032914914454137461679988278650797334594157775094696043090861230475376194375316521688783968615512922433798610465048085885649879473134467691860598529596944970613815754223330498710317737303087189649634312376508482500446153530865527315961' ) ; +test( macro , '51676101935731' , '24' , '131508525968430457729352665685966579498949401101062972415020772435432844742532822029053861945108891212811973673289631212054118103889130601356311755368990255559386038292351210647400499145803946225847945057201109848257891860310495954779113656786197608913596258321184172812660728137089758780590575321178923726688892590199481699405921' ) ; +test( macro , '-51676101935731' , '24' , '131508525968430457729352665685966579498949401101062972415020772435432844742532822029053861945108891212811973673289631212054118103889130601356311755368990255559386038292351210647400499145803946225847945057201109848257891860310495954779113656786197608913596258321184172812660728137089758780590575321178923726688892590199481699405921' ) ; +test( macro , '51676101935731' , '27' , '18147765077113876911302828311188973140568509988864514321318950227295742688037464926647103633287511191936183601316483196589434477469945433422640225075158236638385320220491900270340310290917462596573996639230442725247179360636496672307042746911978502976958429476017502296658675079086344867081673179346751656568649207060344721536870325119505423628920139126455081000886137611' ) ; +test( macro , '-51676101935731' , '27' , '-18147765077113876911302828311188973140568509988864514321318950227295742688037464926647103633287511191936183601316483196589434477469945433422640225075158236638385320220491900270340310290917462596573996639230442725247179360636496672307042746911978502976958429476017502296658675079086344867081673179346751656568649207060344721536870325119505423628920139126455081000886137611' ) ; +test( macro , '51676101935731' , '29' , '48462145947906619312350693780921922040423061718629753751200616100444307162466564390962728897898203939025561944853542772935543250149935950441420073115202129685015069493947975962419875285445358970303515733347425597885530386757928989657327135942306712537754584065199854414524879131878269249276451508346267360984001689290919795053747833808800804304207297975041606946075388009728565472578248141445621571' ) ; +test( macro , '-51676101935731' , '29' , '-48462145947906619312350693780921922040423061718629753751200616100444307162466564390962728897898203939025561944853542772935543250149935950441420073115202129685015069493947975962419875285445358970303515733347425597885530386757928989657327135942306712537754584065199854414524879131878269249276451508346267360984001689290919795053747833808800804304207297975041606946075388009728565472578248141445621571' ) ; +test( macro , '51676101935731' , '1234' , '158324042278377313925303658781524871614898748673989982468397056801513262659968003390685627949704258611320160536626820028889962136800384219988465148278031573450509106387239568116863743081510112367947744316933204800345240432247765898932280221777380025886378197115150023156888075592661959629600638394821303250632425654059380834813385429980578207356778680885151122557244823021413539337390766886386023683774012622502869673441546686299110751211243381992933447873142802156806866162053801684285033755846634081232710212999710106103508622919082329128210235683603138941762803368001142605648619008990425285579947768914521571612053244135664040468206471912029995462838737725025722037780961352097655556940963081046269689524507058695919021145649857025466601631832206335908714770892218847010797983061128886699295778458908026100799624592058868604507879625795059341788256071347226801293035257896677449812101619168410274645467937698072600485973695316558617078697826464067560685120905997944243512191651052772680067894809080799438615784588878741144055738313954890688400429893361117159935248693696396627137695916187850803885204391372040167551605832355933919492494203181745050697494649819656173693467296980021705890813609884785517604611253528819574733690077002295678785343609499106604869068180574890180024198538158171783307883610859971770618231149618665209136576442748277494550519027415619444394250603341387572991349015145136953473904476495181684188774626834750617818472938996987683214283309439924103189995535468277303822947364785117218431807701765196665481474819809014739483414625184823572545931155707708389629548395519118401609231979035135464875664607469901894710597734005254396315648601392217921679551086702353136339520705796471641431879666411557946264230276753464580691493861591875142232836387168105624036383384304939623273671227663421382364346405035511757097384178188343056871496957008430970719845337135563975023000121180003910787544177586770185372939136428614465285828597849364223527930973569574297409565906234014152140399051264908028037854285065695691516894764306741200445258651130079726633055035454707400264143396200125546607001935250751700196849819373198663005937089255142210331719097533030824267705354302579492394252054624819810635910772930818973501002381509037985751201262426338686073137167777790210884526513502529974672754561818929196841359487503116806374857279102032619499735463547437917873852231188627313193995709278200744560332235099781528906681845236757294232939540840501710793402651215365559223726732901232304332589555728463490815104762256836437378942770237781171541242665277050803400441103245698206078424116844542305855433985742997194723110120559706402361837255518215431654983113821256777518566578007246638117303300813282471059695780960937192471342720483093022397272639388862609111334563922759362521380716417092672083635856258692643635802385292897608203124530755925272475970099885482900647144339393451148660375139200420049453396533433237007433364495099843124339385777936467767832834097532992680258633382504023134945528051080162773976630522027388364871860673885601145463850278499705365785873574057496070902362590690329163430582931012722823339673749687448879341947128478168108948119496075857326371621272158040967590212259705607234109590371908430237962275467620195565091210074536958791316104893306127805978301999920209853998214358942944312450676988966603743669909381196873223441882204064076740792698565324619823892332131678341250397203399047128712276865053621353068705821363484016988865027435388961661676827059827201761588689945100159628259798636637114887843908407692866645165407556635346270470882762478678318748969509612841224405192451391751679491699159481451781132856593225478798461105500650078302736522399508859604061090018430782371103406780095793970327199466172644652070455424994736654900037878682536762730674188797509195743679412902718668219372565376042254451189328399930173247680691539750124735316777490200616789118915166628770213641217493993403209087930983866118739242363270739641673142095457606027878252411764298206871520866755170134693811548956683565065642028688637479006103660374113920609307215137832756503673451270374534771904030303590041498702749217222999004759003357602091152034722604948534571885348781516114248627593361371966083846505528180094830427733303359954633778102329930129088225944419675472344592340947633203426100068451070062748913329381430835928677944810202891752490896892126540425812163639252121628049481160408647454747378481685454865724857469700081698360897592285719829250458270700796398492146131941376976151305748227248367443062739785389412243719697174747793918305844429511703312893537458763839752259611393771379620065253777610623533134188428935625387641575540926717563311541862831476044794518109895950317069739650023453809779525953218406298837457049987396316333779299477763690386671808883206738746473461031527288187096362547392481733828192703691811275652684091878491782335647464304090599317117223713118270154362644379673966875526023251794033742058280817715606901272370694953811351940143399555738367916981834656631234106492867315013462578161451861851222727927484978513364472656866134489436147990440601567348247368143427992571647342689311925448855042244915814046156681924587686088299035248256687768173138305271776131448783660494290452155267493170780209088260573726810563594020164626876894543544776117725891695956937655222596747253562951739070430520784626532005865397891770599810947915766027843984225809506465099491726669647675836542704925940472862292458103317707001664851510631632483368333519166567495603149523436655902927352564469259379326902513957700266530203095978420437621994997883942015182535685373952581674954526368979534376580657019506688748132488994259649481602782027268796321496293234619922858621277867678825491370164615078298949196552511455124851536133799925473329405250474593913924912551804901403390831450711740501508314471344016110507593788337973582789067759260879539344607152262224215382333489330153894940009834586533901180095846730855291500939551837669345284373711184756405666180209071363312585030301685774779292178313316406602373255646327348281134955048336338727490454877812787617492427362023670761057324483134159661968729511955276617697409266496712072219753283729016198339234913450671856683431220026361896256233229763483100008432120294903953687352831503401656888244700073250811277269623445793796563405171676855616924791868998241051758600745245397052440394156686933344580101379617401437696817984459028218921041977399588148719347919096302390719921087960315851964586936208155974897770793714626502400010799023394074901830556484876564044019461148646704484745692998552151910298131789877533559303845220138187074792203552289300587811989652204054350569388609355366352079539773210398305281469358542324938107197041217218595947653381833043778081164511742732935680326233241131641428417476654793443376871059887960714321380031930204997295874730540407682218645410154547363569726463842192519870398072169036254497989626119475346195254734474880846366685010394270094459050207503355330015842707449098167167948112211428609169028462215066248890291708247636295839908593225052889285032180148515349175791108452276764174092593481970638911935180284154383805459092545680971655577656000718287895404174650864444487637275330486618588627887913198091137313600079403324248364944559239416972594744134017813214704259974060248545972845617599594908395004708799034010940349453335426733467851508855124434739037794790113915284799938282633515926124039300489403274166512016144314450767050504019696951073496152282334971591755531534918527658116356766005810018865387036502835277104484897521399845192578397217389066546258015343671781439530194484186424336132467982739290593716534087153430243415506786743021432802857971661907233602499902567387941782564166386342672410874812089691799529503443000488843767817702945159240603649832489196454539442081235188719658702765814391130506231315568011273524165094617918503831867012569022324402969461007866076655261544955353941677901200948344001405059672259174534803855786509381749106901797774448058734457124149367609992922544375497404889378084258630248150919968340293441413856717836345219286003180349374207341129088557493435423239964391016550727225456481162350628594289395184071310300179756589174536625319150383798785373066376691658528761564820534618453895379491843182268871603588369275077855410841475816916672608469381494765293579645251398504292250764825206147001031380918536905798997324364665442675157885496504116737588881183129820652811664336805124175412738167561167253417906013601281586840716605226757932860034772050966241473341886952885772364434302876604236880399216981777408544673261443252042495657687251968928902101306694702738065723310727043271924859335698667952366365883749591917139742105118753077931026478251365210693917236917159155967697763044367201149926693443948539699579913602708706722711432838021246855315885038460450756859122906583939756348652891700451630407133090901515174232078445554725093208016341426376158610309666955884603433032223065165852248565738599860177261970078536206931153975848971431287001632805433404957578207772941765098112799264026267445074698665059729145576674938934608054531809788773719961126616990316210326818453980080321988760982334379271531791369297582640574651520702873403331880456606970974892343433336446248718921846000086640006680764293893307983492389270379130633842798650803348158429980408513212973097444321318667389109611955924135884714672638284288772566998005211664934734547822982660638379730254204195834897865492728459422863551908452096176425627547324850175172784662840168613264736639310780854731722004175205456083684478275667370139311794044918888433282117891203786131932421524201946630405904103705604352951344094166243627023050380063835187325378976884921927883069821201742308833558695341662261151498959733037164633952848288492505505197499859566019268823236129754425893906449877905855504081397182635782376853937776733107007960687910397361651834577002303143087866448497366428780519572180278375369679225575668491891544012967905489645541044473614128660244742603437904495496004459121145000204660640788761369040236852666481807337266045681038338455762663801212249239773760849573135339910245942472057741897143798714888511942994856977741299663716890747044572844810556164536063761986767836402140711391146026318746472684683736517628592458110701485687350372867786408697530159165580262455780381579264667555447984957739182385760977780225061084004806106049112388374908757400568145385583888461889658540915335972493538978104321154519123769320702224831927212063777898343511469299130626487155185875277476235831577797403193411734525969805530291201270196761046479780099300862785898294670735985568048204412072182439508001601125949813004653714414454010147969834379658692070731355494945150892188648577526049837658909733330381505835664398796899002686901365148731947521928717964471059772305071463737374874406416651278356408918633301449776192835629215568915731374744480004571009884843731735476903477562446584279323243628329043070154171111030416954029897290949469967976161666719811003325138761099757410714225754805089491754951146648993331480859725730046281101542321018226211161218032808157377990274486574775247295293446271999216933362071677144037958846938035870357017121382946099997460180182187217217820316108638070949402341509021488404838623964004697749860791584971181351855741948571771355034517420282039098468418778809673122690363103723019689210278682644736222976118509622284207375261241784528558945409584782281603428222482076644739841708067658443152632760947992710970595496336571116020117920899681972595692145247586867390993275854296221489381933037318139292360281964291441764499495760508673368168379423816602792242572983422830229937308653522404847350290384106194221461480553536360110558204157177392001034747822538121785134044265222471502565785788526018168367500851854368644667069187608053339694123467967831636497181955436837184144618605482450617195904135269079047201637007435156663520051298601126128369945944529481020638321516198582623214543218826748293953436296165935049635820455993901167665818294125029492356440701038244166842363513621908344320848585686797979439878826598478637355993217261347336958935084397089381198078856022083300330117262456180993049915148012467532881768933263035840131555093550707791000541507741393303110968532024193273602133335942404611643551498070626757534418055263575760282736414364452938769778575091320674432871296496661879381856396240520797406048137637370857663757380205251562705321737487489618016878804542225487729084746708529820375811443132907266237938994474813800033631766739207459417966080119828341415764580961209459326665346025307463631064586254511715110933308682061703769489020980806855962724479591125787395163620658259594004092166562170516032834000268855499213998125944650816177533565867482786957117566835113604843003762380044014420897831990140335889989942967539299895614370850827546132043892135670514224732115622279448086834055661975850510059575409653558505225706327368788238605905950679120827356203968736553949603508567674941011900196065319763868748440255691811431275690300510418853466423120699880274299502906401428179717337224051460708185153900592946400931539055519213456766111907891650507124264750664276520240241037246834114060324514820797852416016033426385928748625138008254308550145235061493199996695892684482660951996875137704256478179472342925959911345035957714418554051230886742531878578912441446768201652221881141572325507385719459138517136751018669079028246205826509211255942319179978511691727159374093169411671988666216994674771387581235589884768273625075469787220620863887485675316340301843253576693265829584060863611223658502419013220705349254141879296678287934598990177839246206875955136263946160336147575157943154184876112942552766291737477532772806816444968335075758603052677831616530597162083339994792052192524435339516491271771018617304228747316364353881326364901896898510732593688984287402238373219422623300832304655724736690619601526746558520579969086684975110249886471858004298619330841151157594042888413560753001085286164089989253446994193592178607918900886160044643360093127301377281151260181516816234448235332218822653468714779419621593045561237278383012807110518306356320302829822203975624356719898344296257410860244073851008991224738267988788643891504893485173066765606602131746590564072891775528764778009114601909601715732204601099651995466171422428561778738906387340637322539207184732852648369340774890627245756174444189797920171705224195397835012801944668568199244460984454556749562726348626755008071045094089456543538334719344496279903285819785473638260950225191989064998217546604935254843644830354787903047294704085156710060314626981157703292007319217920772059875929487108231502602963313451208908800123467770051210962134514589094511232458059331648208202240238411255010578542406383889733905056465012899219382378659412932505825923945018151275013771662079650082951456689539196985442677624790938978370091323150932644989813926815926713764846502628535537778970161281065391987916405930855478432409513765364564416242604015243337740020591190036055281150381447998127901685806875751795496258487587782150231045731795366439544769654743511101346187573916565954617871601220556806571910322664035856441943067590583463139288226902843506064510903232434224397360091696338842373040990564260619541435411792673618388777689980307230201828335309818088702867877855077758454325070909742544384843822430367944236208743002020404743158305208417720634625853803097299728910140526037383656368066889205000542592984418496643069772107977370892309483087973050493056264411495806490399183836440009935339770300091372817892264236279135289290245333645902675314110412649989844978340728685671821112290828829269519229582863992855788155443525507663925117628911796188678980556041341513060132014775432709153262923597668710862496337413472675889360137051840453387185317746367448685333562536587961087795964381494602518709912953530990322369678697647756220485903298571233830750815526500393713347618692958695894950510589138728887035609091986740671003066902402415899517198377159897977346749717804687344625438051024990052589164200510168556411467500390153089322228903919050120669166638660142562191207450620162728156493213454482792702092126905050509757880809402415274410795695253751046401154902184294192597738198949251837113299325218278871891594334354748578529416161681277186999781125923908898170603590196546728188587904407695359656110397019078754943031963775608531765690045741190503521917787960634065347919180851301558862438424029407982357071724159087489759092692094168623631500220272025560981867388778272041688773757867813778995307938836220728347748425397447066334129722102586996109604827849770056592342207245854658461155777410922160788502132706011423014788196149318932156333527262500699228183533489815176386063167069054855402190127471059557044073327189922247461125984452832296717571418178543557996289436839762935964681924754366975350149396326998775147547939177889984004415721' ) ; +test( macro , '-51676101935731' , '1234' , '158324042278377313925303658781524871614898748673989982468397056801513262659968003390685627949704258611320160536626820028889962136800384219988465148278031573450509106387239568116863743081510112367947744316933204800345240432247765898932280221777380025886378197115150023156888075592661959629600638394821303250632425654059380834813385429980578207356778680885151122557244823021413539337390766886386023683774012622502869673441546686299110751211243381992933447873142802156806866162053801684285033755846634081232710212999710106103508622919082329128210235683603138941762803368001142605648619008990425285579947768914521571612053244135664040468206471912029995462838737725025722037780961352097655556940963081046269689524507058695919021145649857025466601631832206335908714770892218847010797983061128886699295778458908026100799624592058868604507879625795059341788256071347226801293035257896677449812101619168410274645467937698072600485973695316558617078697826464067560685120905997944243512191651052772680067894809080799438615784588878741144055738313954890688400429893361117159935248693696396627137695916187850803885204391372040167551605832355933919492494203181745050697494649819656173693467296980021705890813609884785517604611253528819574733690077002295678785343609499106604869068180574890180024198538158171783307883610859971770618231149618665209136576442748277494550519027415619444394250603341387572991349015145136953473904476495181684188774626834750617818472938996987683214283309439924103189995535468277303822947364785117218431807701765196665481474819809014739483414625184823572545931155707708389629548395519118401609231979035135464875664607469901894710597734005254396315648601392217921679551086702353136339520705796471641431879666411557946264230276753464580691493861591875142232836387168105624036383384304939623273671227663421382364346405035511757097384178188343056871496957008430970719845337135563975023000121180003910787544177586770185372939136428614465285828597849364223527930973569574297409565906234014152140399051264908028037854285065695691516894764306741200445258651130079726633055035454707400264143396200125546607001935250751700196849819373198663005937089255142210331719097533030824267705354302579492394252054624819810635910772930818973501002381509037985751201262426338686073137167777790210884526513502529974672754561818929196841359487503116806374857279102032619499735463547437917873852231188627313193995709278200744560332235099781528906681845236757294232939540840501710793402651215365559223726732901232304332589555728463490815104762256836437378942770237781171541242665277050803400441103245698206078424116844542305855433985742997194723110120559706402361837255518215431654983113821256777518566578007246638117303300813282471059695780960937192471342720483093022397272639388862609111334563922759362521380716417092672083635856258692643635802385292897608203124530755925272475970099885482900647144339393451148660375139200420049453396533433237007433364495099843124339385777936467767832834097532992680258633382504023134945528051080162773976630522027388364871860673885601145463850278499705365785873574057496070902362590690329163430582931012722823339673749687448879341947128478168108948119496075857326371621272158040967590212259705607234109590371908430237962275467620195565091210074536958791316104893306127805978301999920209853998214358942944312450676988966603743669909381196873223441882204064076740792698565324619823892332131678341250397203399047128712276865053621353068705821363484016988865027435388961661676827059827201761588689945100159628259798636637114887843908407692866645165407556635346270470882762478678318748969509612841224405192451391751679491699159481451781132856593225478798461105500650078302736522399508859604061090018430782371103406780095793970327199466172644652070455424994736654900037878682536762730674188797509195743679412902718668219372565376042254451189328399930173247680691539750124735316777490200616789118915166628770213641217493993403209087930983866118739242363270739641673142095457606027878252411764298206871520866755170134693811548956683565065642028688637479006103660374113920609307215137832756503673451270374534771904030303590041498702749217222999004759003357602091152034722604948534571885348781516114248627593361371966083846505528180094830427733303359954633778102329930129088225944419675472344592340947633203426100068451070062748913329381430835928677944810202891752490896892126540425812163639252121628049481160408647454747378481685454865724857469700081698360897592285719829250458270700796398492146131941376976151305748227248367443062739785389412243719697174747793918305844429511703312893537458763839752259611393771379620065253777610623533134188428935625387641575540926717563311541862831476044794518109895950317069739650023453809779525953218406298837457049987396316333779299477763690386671808883206738746473461031527288187096362547392481733828192703691811275652684091878491782335647464304090599317117223713118270154362644379673966875526023251794033742058280817715606901272370694953811351940143399555738367916981834656631234106492867315013462578161451861851222727927484978513364472656866134489436147990440601567348247368143427992571647342689311925448855042244915814046156681924587686088299035248256687768173138305271776131448783660494290452155267493170780209088260573726810563594020164626876894543544776117725891695956937655222596747253562951739070430520784626532005865397891770599810947915766027843984225809506465099491726669647675836542704925940472862292458103317707001664851510631632483368333519166567495603149523436655902927352564469259379326902513957700266530203095978420437621994997883942015182535685373952581674954526368979534376580657019506688748132488994259649481602782027268796321496293234619922858621277867678825491370164615078298949196552511455124851536133799925473329405250474593913924912551804901403390831450711740501508314471344016110507593788337973582789067759260879539344607152262224215382333489330153894940009834586533901180095846730855291500939551837669345284373711184756405666180209071363312585030301685774779292178313316406602373255646327348281134955048336338727490454877812787617492427362023670761057324483134159661968729511955276617697409266496712072219753283729016198339234913450671856683431220026361896256233229763483100008432120294903953687352831503401656888244700073250811277269623445793796563405171676855616924791868998241051758600745245397052440394156686933344580101379617401437696817984459028218921041977399588148719347919096302390719921087960315851964586936208155974897770793714626502400010799023394074901830556484876564044019461148646704484745692998552151910298131789877533559303845220138187074792203552289300587811989652204054350569388609355366352079539773210398305281469358542324938107197041217218595947653381833043778081164511742732935680326233241131641428417476654793443376871059887960714321380031930204997295874730540407682218645410154547363569726463842192519870398072169036254497989626119475346195254734474880846366685010394270094459050207503355330015842707449098167167948112211428609169028462215066248890291708247636295839908593225052889285032180148515349175791108452276764174092593481970638911935180284154383805459092545680971655577656000718287895404174650864444487637275330486618588627887913198091137313600079403324248364944559239416972594744134017813214704259974060248545972845617599594908395004708799034010940349453335426733467851508855124434739037794790113915284799938282633515926124039300489403274166512016144314450767050504019696951073496152282334971591755531534918527658116356766005810018865387036502835277104484897521399845192578397217389066546258015343671781439530194484186424336132467982739290593716534087153430243415506786743021432802857971661907233602499902567387941782564166386342672410874812089691799529503443000488843767817702945159240603649832489196454539442081235188719658702765814391130506231315568011273524165094617918503831867012569022324402969461007866076655261544955353941677901200948344001405059672259174534803855786509381749106901797774448058734457124149367609992922544375497404889378084258630248150919968340293441413856717836345219286003180349374207341129088557493435423239964391016550727225456481162350628594289395184071310300179756589174536625319150383798785373066376691658528761564820534618453895379491843182268871603588369275077855410841475816916672608469381494765293579645251398504292250764825206147001031380918536905798997324364665442675157885496504116737588881183129820652811664336805124175412738167561167253417906013601281586840716605226757932860034772050966241473341886952885772364434302876604236880399216981777408544673261443252042495657687251968928902101306694702738065723310727043271924859335698667952366365883749591917139742105118753077931026478251365210693917236917159155967697763044367201149926693443948539699579913602708706722711432838021246855315885038460450756859122906583939756348652891700451630407133090901515174232078445554725093208016341426376158610309666955884603433032223065165852248565738599860177261970078536206931153975848971431287001632805433404957578207772941765098112799264026267445074698665059729145576674938934608054531809788773719961126616990316210326818453980080321988760982334379271531791369297582640574651520702873403331880456606970974892343433336446248718921846000086640006680764293893307983492389270379130633842798650803348158429980408513212973097444321318667389109611955924135884714672638284288772566998005211664934734547822982660638379730254204195834897865492728459422863551908452096176425627547324850175172784662840168613264736639310780854731722004175205456083684478275667370139311794044918888433282117891203786131932421524201946630405904103705604352951344094166243627023050380063835187325378976884921927883069821201742308833558695341662261151498959733037164633952848288492505505197499859566019268823236129754425893906449877905855504081397182635782376853937776733107007960687910397361651834577002303143087866448497366428780519572180278375369679225575668491891544012967905489645541044473614128660244742603437904495496004459121145000204660640788761369040236852666481807337266045681038338455762663801212249239773760849573135339910245942472057741897143798714888511942994856977741299663716890747044572844810556164536063761986767836402140711391146026318746472684683736517628592458110701485687350372867786408697530159165580262455780381579264667555447984957739182385760977780225061084004806106049112388374908757400568145385583888461889658540915335972493538978104321154519123769320702224831927212063777898343511469299130626487155185875277476235831577797403193411734525969805530291201270196761046479780099300862785898294670735985568048204412072182439508001601125949813004653714414454010147969834379658692070731355494945150892188648577526049837658909733330381505835664398796899002686901365148731947521928717964471059772305071463737374874406416651278356408918633301449776192835629215568915731374744480004571009884843731735476903477562446584279323243628329043070154171111030416954029897290949469967976161666719811003325138761099757410714225754805089491754951146648993331480859725730046281101542321018226211161218032808157377990274486574775247295293446271999216933362071677144037958846938035870357017121382946099997460180182187217217820316108638070949402341509021488404838623964004697749860791584971181351855741948571771355034517420282039098468418778809673122690363103723019689210278682644736222976118509622284207375261241784528558945409584782281603428222482076644739841708067658443152632760947992710970595496336571116020117920899681972595692145247586867390993275854296221489381933037318139292360281964291441764499495760508673368168379423816602792242572983422830229937308653522404847350290384106194221461480553536360110558204157177392001034747822538121785134044265222471502565785788526018168367500851854368644667069187608053339694123467967831636497181955436837184144618605482450617195904135269079047201637007435156663520051298601126128369945944529481020638321516198582623214543218826748293953436296165935049635820455993901167665818294125029492356440701038244166842363513621908344320848585686797979439878826598478637355993217261347336958935084397089381198078856022083300330117262456180993049915148012467532881768933263035840131555093550707791000541507741393303110968532024193273602133335942404611643551498070626757534418055263575760282736414364452938769778575091320674432871296496661879381856396240520797406048137637370857663757380205251562705321737487489618016878804542225487729084746708529820375811443132907266237938994474813800033631766739207459417966080119828341415764580961209459326665346025307463631064586254511715110933308682061703769489020980806855962724479591125787395163620658259594004092166562170516032834000268855499213998125944650816177533565867482786957117566835113604843003762380044014420897831990140335889989942967539299895614370850827546132043892135670514224732115622279448086834055661975850510059575409653558505225706327368788238605905950679120827356203968736553949603508567674941011900196065319763868748440255691811431275690300510418853466423120699880274299502906401428179717337224051460708185153900592946400931539055519213456766111907891650507124264750664276520240241037246834114060324514820797852416016033426385928748625138008254308550145235061493199996695892684482660951996875137704256478179472342925959911345035957714418554051230886742531878578912441446768201652221881141572325507385719459138517136751018669079028246205826509211255942319179978511691727159374093169411671988666216994674771387581235589884768273625075469787220620863887485675316340301843253576693265829584060863611223658502419013220705349254141879296678287934598990177839246206875955136263946160336147575157943154184876112942552766291737477532772806816444968335075758603052677831616530597162083339994792052192524435339516491271771018617304228747316364353881326364901896898510732593688984287402238373219422623300832304655724736690619601526746558520579969086684975110249886471858004298619330841151157594042888413560753001085286164089989253446994193592178607918900886160044643360093127301377281151260181516816234448235332218822653468714779419621593045561237278383012807110518306356320302829822203975624356719898344296257410860244073851008991224738267988788643891504893485173066765606602131746590564072891775528764778009114601909601715732204601099651995466171422428561778738906387340637322539207184732852648369340774890627245756174444189797920171705224195397835012801944668568199244460984454556749562726348626755008071045094089456543538334719344496279903285819785473638260950225191989064998217546604935254843644830354787903047294704085156710060314626981157703292007319217920772059875929487108231502602963313451208908800123467770051210962134514589094511232458059331648208202240238411255010578542406383889733905056465012899219382378659412932505825923945018151275013771662079650082951456689539196985442677624790938978370091323150932644989813926815926713764846502628535537778970161281065391987916405930855478432409513765364564416242604015243337740020591190036055281150381447998127901685806875751795496258487587782150231045731795366439544769654743511101346187573916565954617871601220556806571910322664035856441943067590583463139288226902843506064510903232434224397360091696338842373040990564260619541435411792673618388777689980307230201828335309818088702867877855077758454325070909742544384843822430367944236208743002020404743158305208417720634625853803097299728910140526037383656368066889205000542592984418496643069772107977370892309483087973050493056264411495806490399183836440009935339770300091372817892264236279135289290245333645902675314110412649989844978340728685671821112290828829269519229582863992855788155443525507663925117628911796188678980556041341513060132014775432709153262923597668710862496337413472675889360137051840453387185317746367448685333562536587961087795964381494602518709912953530990322369678697647756220485903298571233830750815526500393713347618692958695894950510589138728887035609091986740671003066902402415899517198377159897977346749717804687344625438051024990052589164200510168556411467500390153089322228903919050120669166638660142562191207450620162728156493213454482792702092126905050509757880809402415274410795695253751046401154902184294192597738198949251837113299325218278871891594334354748578529416161681277186999781125923908898170603590196546728188587904407695359656110397019078754943031963775608531765690045741190503521917787960634065347919180851301558862438424029407982357071724159087489759092692094168623631500220272025560981867388778272041688773757867813778995307938836220728347748425397447066334129722102586996109604827849770056592342207245854658461155777410922160788502132706011423014788196149318932156333527262500699228183533489815176386063167069054855402190127471059557044073327189922247461125984452832296717571418178543557996289436839762935964681924754366975350149396326998775147547939177889984004415721' ) ; +test( macro , '51676101935731' , '5678' , '114598568890558892351277519655251349170512457301108169122918046980237508383487307624081510756564677550336178477302154205298849988621620086922824241203952845169587118918761676702275886803533985126048599159621880798222780212304246817740927997329598603522333259993676023070883723250177300932925278631685866750044996349161018487418710787156824698743699059007370890842841419231416436426583294134280327799008795618556337681789763639042135318458712688112601941846586049438371804926113126508996078777819094310659599757182791807946793330068376689258887811689995072195331087218152210579989587318167100041773383622122477291943850218476496927044272842237554951357422835645664516760841149829622887677523325405719345978782256416220091760753375551941881093250856520343277787117543740369641738849743550250267305042707228709682744788048246753481687183391246480490101912653586013524077299683599506874945043746289984496657526568247754108757916023746860823651106704947454023630829841108532968959604789557821034558282678387782274892400435740522133769190575725840235412871894976415960900858952703549298673487135436478720837173606603965003749202465844411925396601850697464037386444381718980799446621464654550821206321596000370929647608427450678602369409467488634567676260749990886237210425012278562172533337907188794399372225626872733254924000975445679212294865582779159284739536067574648674948637306603357526281158214867606477582551408107503527328338793768794019922917887582376894908153461450324195019808790951956266885107461973925559489970262966079308484289377245650607102408136209843678657317031621605407118233165024507780188477008776626376774732469991901945525053633560386998290497433245057356518070213620275700745654781100039839338506451450577013486892471483552928409289830016271158248107951963293890564868178813169793288638609421552999187733984144553406615257602536512368045676140620190929856992488533649322354718067519310329366233012095782513367770623099210385145306068882019668219811962909945944938303357412007436455159207921731034641005985972731076872404481351411053559046816512985501762256787820371273853296301441525251524961854980951466415757745095790408750111233498938399843328976884101167576106332111369898329073992906185716431137905217592404057225277504661400556077285374257237710751164948498254228336520906926692000699164318088485138209956632046211769172737818805518350576876409911238994857621609965737246540747228915599832803850235006646505920161663461782710578007459880127628658300436718162035702759857413264686037450843066618529962777161180564480610570194083990996868348589497339967832525631952114004244381394862686005465286457021469621822619867151692227701982207711240403754089139160258204655040380941387512320543125847873280531581254727837191059980870831091122923417959861596435814654220789276907248261882603123131749272763005899889970210586720440187361168097472073369327028087807891921073775186041480435653913681928394558065224090076679384591070891307475995293653429635959202548503686994214508788450093243004124213718944072946348546273490462900925735733454594192759136002496877104912413694566063277128709834235803795521599955020375102449787917179385948650401410782450535088196592336719230363010532216782360997264383385827672744353408971592600267691136637128647179666091641390767353626655629610767925329336924814212570169908132079298822259312790776336192539171954812142459076936946385158760440753962659197081868092892356974717649297318187816581273710002222637822422625907248946609177471022616696078166962638903351786881559353388016022793559059422611570772104441502159519678683680896440534678482697361220573057326321241467487140124612227021769519132788278891261578500937493023431494800715316974572061757711388338850673314696559686053949631600706217179936149359062760652855148968218517603478406764660079773518392515740066557654365463358812116383920109518376511927056859803872276659655935142427958378419267026204993883734671725916631060714088945987606306190400841739343960163767980632636951807150346899488246361701225858275512527213850024197265932454942520600005445974264278700061722886358112352180245501375011619481895903494024525948428278732709789878138429844599672738323876521649110855277792436882821166942741738868002576408435397753753580116182952236210916267829966145925028378437875898705477022525397608430772386789943421906088726337517286361167325374608638664447743003669920203279685500192102212678244500280945163720924806258942015670529098264965727843346426114488713290334508104318728502382771728945872501553223396187212916235118458655838036585541800475260873636577479118287025217430116350907433315459696137904514955307303089701947453368286386613774098275500676250943657017383834720061347722825211956235385743059349300184053076658159489552304525616565099968774334572359425467321345729237028949216589829910496148348266399952259506966453084807497614865786568010359718381755280552030450357482091573325492727231276923993244258612115652943501643076670607096916922788985244717748167425031600866371091539018747314619844176434458885344303041217826099156483212620631712885522804065144269853819342281878739269471469710167419263261298426536005724710899328976253518828717132656525336398408521558604682092666618949049723934689800847063844761671282296978918952554214898709123610631472079549040944065036271515445762211638184670207178784047672153843595557392899022269520772862968918684932700339559357972321385437515253951979000296108897236060608128673387896445773358382692008138068938089087965375939805087660261553154170365883140110004255362850999174312472258828659845801114248663995523535651080385407122403810220614699534394862199070170516370529573724426277383249873364882798357333666601674798052228774948816335992020369901620508453181317972153011582161807177844672456985443467954652113777013601630746866436183732233279064589871750135148960495813527709288884229866780850817394534670003825516127760071436525331020214654659944097612888206044199184355427079633744822550780458499778237357353947422296038656940932241020563615278249555508480330508674120678052089502789507188213274173100770916834969313508824784364056056402134407244119638598785990062688861144654163575302227468770905464187883181134822725915136640612107272892247282302709032318098895359710245013039285473099721463792717954735326941637258027020359449474131956608190956922971406645107469617185652049606430376373658432400056414731724407005001708692411063413271177513212657905468790370163043951258130982778875673922295809518571866979572550249035569072335930443175450876647946083312614092963535991789686984682545283358632371449413497269427928750522476008103850277182197862744717478903974777451339726925492684847344667201465331748104805481572363883196797787778153950751138898727728375184289353676704124928349416752637531102490310279351764714073405197836749014690395282266606472002997382187295402889448513435174099451342568509159453242120888320839737697049616714431772174331671258229322246266889685257316038839337528724509464509575560371587287218382144584572419703181295877602278221106570930586664027065311454892200273818659381311150404756262029418161040565111664447264252108585981706307591881047374954123445586938599411011096620619274323216164888259706949545584064116931697419880810232135950719390350713062967911958144149654637677624682217905237402682589189689936992002791828405957862158911334297099480655817390013698092780805866900709190383307511190456176470564094830491741371514412781382471608566016857542175626271815830825751173841300134557318244910059728166314923856198690466209098544666893459074761870150034083238014245526074209050076925214228138545561830243367680472907455390358950492305796631316420731434125187536810546887612854361525903826549660077385607201642040850831267699276814362171286190066768458981549632902853741404667094999899553250446338548089645534133891269993883172431804704263925215719942166060373843805638153594804487097561950457231382850176704556278355177741960834256932103041468108431421024565688930277277827204256767781041934083737995080790793709338041932760953129953324240749245316117068345243350389721646548464456799564122538803508302280206449283869830911336778221946967418555187670963441198271217790496259964780654563445592505556519078267175564184094236772289072470230033320640614537275025449633888698376301092731992965463666856043698716302806693885087426713749261988769556429463390046244837567904659070225420983410009710978888428520162826187731324371494738964988237894717677430862117281326863913479208553025891950712021033737482821762882285969238709814995624715621242460823465809517565513365312665098952226387532971101201851401611211767107556328808562154195909528062579532668678860849786353548436978596941540803973584469644923040177756384343881496136104278613378924581962143710807219315022833887527431763513942927784402594506818541221504288809623165972198540933669494785758163834650407164355749575134198337788610507044159766150241794499149571096051559220223878817602912552525929282957515181558545301005606558272154807998739024160863626434649314036466134847629318039975100093407373104577388406981878656175843258194717523909092875616040477453623785051493436611595002796440848161148666254022016142475461311658387441335732482745839024940608008050016971556249565896984096952364713943123112125591933258703693851493005494192677788993225349131525711396145903045479052901233399936977821783416065979989065328839546014013831203847910851373499087681269273873808794681827032455802487324933071462267161585550348497079770547563318071210788547323150873537668915925365865275006606032948938992420253484030285899801624037645490546643734003092212092762896778094831579400704783040331797648705647138803684988666221643282949518185294231209149700862655885675685742587977247470742881671606128975518282142621174602709267031158360580359120233235473997243785917055987801766020914435512416873713285800875063783960692674329948345063193713090346106430960233900220471049512359484540660252000207287048940904649627356855235310748631701290142334022573624657571685050543054539462593343925120666965564304346218619573761401243630815566172421336337019044921825132743027076074431860266381081919439461501518228192067428154599552061956522454587058878725629423271121973055948964177586675025613775553459402756099732937841164187693906160490012428728615553281749083877569856034002578003805619108603440019554292851568931421048023066958052204343883372931130679073105823557408875100214126784759475874110505599354169570696609784560599958215019928598013718187402289676120592754363058386217976480889644579627120147953445090187876503616327911008391800184735093377883625195033462470489375923507822652512086242908850264792687042789386655227831819214938281104644932640292609019834942621395608142214243559409841197661527772521605594271433534022197568992584336382425215293816118135415822763659169694051345319875623274091939751368133997813845916207449451701850545644437368283792955041875417825002650183812267921554071554148141810545261132326348765749042696757503149872630966032411848943742788719959766685423336348908720532382273782455044811025224688005258724128117375301877446615463103917254847301569577217661986908844517236064250159012321706048888909681124601158873187553237768719599661206118675972473809098983711387501122615038573963236084013215429847727184258992906237874964751406104681742937670985077393504140518585378445945934961441800684055554038233956351167210957484786967705794592308352175762541752214854817124986107384580167149061884866946918670005168162259392927744148326558953622056499756057865517495516987090419182627739373939985152189775038553115538646471075934221909696916621433427020321907211290750366847722032569885358324304825748519823761695735069483610277833391784268305687555417321060681254063601376044472764727209479821068239831947119222642427588604524821548797463869612449236554848366936415329635310834448639523331032214535561193061625240491292472959421415693842751590387163835477828542899873873355067539845115993799752754206275423338217062076744831694087595991582736550683224860678822779524670167708708091493709146151122212285091313848566637581973054913102622054948327816252692080182215324465447499805634653027067312991605368041127365270645100770232874469104024167016075695806268258050422993127312933128697504418653934394765893583568834878949604860449521880438659616802122657499696711371950669696088698654540203231615696906652300496120780993861295366389568887602126999373711575248980111463126737434199999923186123228140458802135764964497499211839068795147064258579583962890520656631190772155927073711649314137404718303647113380977808317817846980386481066453326264620161085488324738434460460038866634635020866393862469381723564361661779993116516911788408702482058657042742027085322886734485737469665890653383965527251028179320635401480247183169549776451102905415564180956069929150480364980253864993561144620337603341026450280648329108363155941423746477676441226330763778143302558927254074511454873470596647216773968167693426794670205504808306963783432036244979681725783341795616208450760202661124160076951242290485270351100016293179519729579532961953093883990623843703845911016699084294413469034800124849706899721051849479889146370628964206263232509984714695180238067877770898591308982070720120248367443358203058594410980465031081259361282748294276045466637842578800793537425693971319078319720309483472991281827652766395632559627448449322724455935973458554816112349560437316476772468508305512367513982203113683319867051472957794682903830326933115041030819168485955295547194534592544854770444190167625774242882339856600323988117721872329621119307065210242378471925603855682602511342933926964022027574473668074767250277614350240898114804833628233917590283331643902799593247663848733995782588708639967040765878261594144333897235212151312166170400673009191876880782817897642797305674083214304116001846541558880139343876729547122660589815784784823845573389037426438950965231475933765920983976255357185318394294462939870923725191627253724661104724674152692069584822984507668895796308777450228162744501914688617738288423774855905509153854844523303840957562160021954437904572106375782764718235463296636952021626993854683250625366396838736958893686683145675963239492023700157535671554883718959215653559018684790556050406047348053882167970909777535677010769091602244371438842557331819164644414366880048931933080199464775719509620992644091954275270680288884109813652088838217429569522796724565190899510248605280475710488565214118916127660760240741412774854958523464875335791354333554221114105991785983393823020076734058183927249261932463022507518378417531613595367008713063568456526553921055526758039628801741635831559596552015920057728581873824235567176123583511244661921620535917294970250780006254560913313662765305807933366774232072453360650960008438817118037078045098657774617616105096015011390156583453754385678396291801322575711617682706241038506687001234836301806498523163010650449912433471614658213754184557683081702691883198005157762869533426985772871548066409461102566074482585186196172527568428897050456306066648582770036459460511184764057517774896339386592062506459252579461592560474665528416239792702809524368229823156443879848127098290936890568640344899841675398255520835326531345996368545121081712559676548972073976307843066272299578779899750067849171423314509815187548244077378329796193933542997364333804995452518983295374300579841041477430234285996531274115737469223410436044734098218596575261885585549688086844423068789246324166549747789727265524050455962780001580710226770900533745079189013929659478693513587745539578848213377469358275467176678200951122297705749503306698574297410712427125825591862363276134686251235055301972061105661224639007183964902695034424436437936253659197166818614429825626676264111882581783852335169138950280191270126993381055654149481441296522956835357856587690439122868336488948939918429473181311497573245935858058048846043815567877289011167331444931953925754671240134069623866836792786186011879777990158691547401988209088233436138946304596662211246080716963940999419458347032733075551690030530582476791228961785738428344668271954394260631144673445131619681560910288236163257493867850591921101601774216283724826035337528992934585854238509545972201306935022486046021526186153884783616668536070352766884410433501411997774544944294529752318683967218547747054919125920723787453768874396140732374376069661038491913390225584336932342777315761255948878551294079902768864779706744004767497971699010857817837320331732586562556917485670513125539936647354410777628785488698349835379591475098154799827267570479952391820096174179651670850574284042676840011853046780858800494312309921469703542619592726263073590976462669364922795234207666005686292826903212848877481605826947453296687451059719061958356539720636942722901955175023641714596609837815361932183405821894237560762724700527878714340752426908901818205438166928697623647899633610409766731686872645318577714032460894835086863906305213902132263709453953046543560314104677422693777305934218298526734878837051106284119542143667788585456657142746665427084921846682769309335227479860142774263718482271045462438363768361342074577613689416306245388036366588228918750297891553343601271116018104061166106299788463499404576467234680999408128685491495431444663757432415240164158488210900819745907723117930120695685024585064625587827493034169505631321361629073305032453650015121172416455507667013522455054423012824659556913170191784272134013229862167933357870440372597009868509136667331096909772244774497523425649971713882182557907497459362685468864499900443106554956344003403877683026526745408126870149084364211072799881433860076306106247851979718211066568293397639539451283955573658564108776175764110532523449193170074167594375276229899521780717952518583208904105756371686598266057406647087463129407379439591678526118563375375353708424759178126712588851088358543556455828259242229752207982655534691287505400579846562914613465114055818872346386918363454946173595045963724905520868541270473697264250446046089642748190999453356935960747546554692305385529475044104740895111094053981210797991140570926872891670773814468169522981197767273686316613791050298552624472953601064874491619431515581298483094974434200152544999972253615705670333910064258013397051190672327809649449512231521002044431168670777665701194943318920142732683570462533039523306263620225871545457775764770604929953997570625951936899909518438534435970611071611463871839879758260799824991623563429811928499039440771973070864273967278618870976632376075488071575461144561219935848976261991995743418626824010282377472581361028454622921441883252823380473535980635040675347266665813701114359254871281962513087998501938848746260785427396775049514168562612073137570353309933421182587431285208099490235882059772793358564991437202016800963518589761455026124188003465061263343783842908952238749299315855490241309786950824004062760976904187502795945035840704763791629996479207882802190639214588281672075545825412562820832491492193486742631064101780835395570244051743402738881730159768458032350492340983945389655058528481715594070179000970782625156057915320413986266019990172337946416918557063800133747641604183437713060443142402624891881249459030992935793527950409840201343706778667031036382270368309922120727685173156943536928765918297523291556499898745165164935596868942828843358938043957961029987646769997740718353298902113509786945580718208991358463177836638025806577481206139581029605232343390118748079783839195843230044920030000293609262840245610181309358224141510030238251805707053062432073731984040628183721390347726139606685474826304883630174052769377584217789247910727483325946473633314792666461326212634921565119552168762472730204002086252124424937891781185484626212876955436221477165360031020231430386214870054108295007899715254119071513260472470230202533983791307938408960011206611455326096801350655243853398472597807466586200601253211741913149771316966742972424796953362829778527691461619646698652901365907319538496395153314189223850326377266970571724729299225616643375250610943592593231827466075999846471798767809815413033084807935411432143738782707086800700249890892016781300755462774204025643372850935993536835930431474211275360661334909180169369108705004893833932685971810039967903674985151600881858004723253102936206563045825118090129751111068119272073957023228117535946104197559484455044224813743551400684035958704844910240433782794543523046179137502988175588334343929604010655262873143788409800103840149709367769678272389350632655653061526909944375166865821226676124073718040169866120459345622225584107723626981527594409083885799002170436455111357966813110193233521883524236223930189338177788877617266977925443568413998134839137304794431773484057275907471161083605792371548269896511232018878269590877998951467990708359705970388117405757636229559483770009754679879169950634139569036627493168743252032958240435946744381139249473095508589299567208080597578309780705860706366590038525752672682617991285144702659613402563158938705017883355247903759797019472262560188954212310667319942679244018502332473572330860141285275142567616352011441717389434820775671752035498192835097210704346762871785843394366619830754655068315068021943501597109761283722605580646118265029950836645428880355482809418017207519930746525482467660956501946286248673803148678778320154527985484392151772657071003568822396992334569447439518931797472794360893625913323930637936123592307936959744134660419379541520223856359015281561124867120268443532762202836358157067397969523277941814805842994278790015196862449348685333746940835406048087120468705315737810814851006986239662973395622981892417635797361552255577200093154926399160041205233526050099942113585424767102462092543693848903032320176365611859456909911464662553394222492702361972492589328743134628042819438985147526265136537852840491772207661691558509954371067469519662258250666590165226871146827599529979187274127942586949484821499948977145043677342942737229631023377843981185400933835831423767351371476191843662990866109519730716132126804072070640870780628344547744782396291260010070383315973397408134147633405837121702299828479485082965001168058308660534087429710071643832112134185681191355797031035640660674171124608581811772720944526748929882880981531600483484334329258782080131950152990379792064594496526209604646130807483497903997981366660814109367081501493013317987778423970445235345262451162417303194219408843842138074967028470582769901836866713822445861935378961772248421345450181825317803057793865331808243999032870740776976064805740571853847337064834310551096634478336669042763136704807586517365797136211624710257953267355206084531695186978286706442628626395149607414222118992574163280333685823680906473269108560879550907146951083501973652650163620691173614434376022074343663278172616794365354028350879611668170977299413329242853102242731460245981931645393086566419168095714547735636341109457537424127013466092829987029469225005609148935719219627886553517060926819156103842061184103249786722102357857380363966877195050686029417164805540813780785634440605334896258106006438094052913691329158675367290141201254618676773332219794175088755775479718673883939486154200593603203954816323103020616423867397093710839615897871898114553682658447075458783118190023366087506978374367440207438924966819405213686487476793825253259734471325657957108673156552118127808366008364042860528540535034950176612182005881123405988511608306144849231503055132715499943836726775291396811671741107037864808220275570128503090451498085660993674239141408137294509508916040084880385126052374726220832131130118877249390053885190862016620304127338330822376885177520007162660545308168910551027048206864259306643403258146047122775364888620470370521404458837255123240697440311548296630455328683555320575028845668660604051631191978861891344050450146706574218145025744150912515431643639763471496084616921691588906643318094161772942444267813744245201380387655455570994259537781139991672727963630401572633729986361556875282295744688790419550042115325815066901167830915280249317272239032336428833326465165088029450553351265755331884109528200193953474902952152924946185562536338925534826199411100653632718279533909714213316643228976513653756607679272611930525331509533360676882289504637968260788530354999017751472236832783844855905587554729452514767314824700008649155270346776891167316609312798908304391728180382885705826358462049930067611387677311125159653938052767644809094689360554558540305110248935812740648171186350593122648008331898865084081910232912772214306873277181550887217911939282490833562582253824958566304651212513938680716752798136384903060676496603824306844521424474974798402169651179277198301900928835877874551786318031213157816266052352420958386807745919890178528945692073978829824318254828803767836945769264370965570278955420236563465318633087533589358061430931666035989509802975402163642667940061694906307745403336415888401856273908779094219374541395289779919505811512398727811277052044628889676576204347887155453152137381991361998780634451422237710883316724087265275331735893833197129258839234716392342611646952816033259950054307629463527993424446629554718055401467323011537168845330459671616005062986429892433717372769708986976311304603813694466876866558852113339228482279288771725065980107614730689732508546319518769065056680957782914367866215918590112732510471009325001837807792226514983632349787121937850873634795369167442047937893608233634609666703704587131733723929085811244615783860405178507877859666805690049528538712275243036223309707838878743093968440740186365488240924198311296922550429467362803938321202544305084030232602891812533837834720169281029831388109862088373636124595410033526477352125408960443495710872004466944740504181430539375974997235191384764262912442475167562557149784655839519095519656973612676149775555468394211684073546313305136429488931374979941004482067517955299494545191338214275004688648850080625425657255697031851628472826812878438128524708409359692881087063253264481220907184058301090967458080899506347453532002995200234316121374098161410900539135981863658581370995732911051446451138998982787447971905437800015184192194998890428219996377737564767442914336298428740825412724669981656100409516386221832151219625497417581073077338087294189592180026420910118672014596652061567734369839911877944565035730463100962767041999720431147498003871428186236484743508773318443952371300988256662194348824041466733754460943324754187692906063468991068425866078952725816706806990970194721942596702352590797837064926809786719427373172154689565613653917663261933894602724198203854026358029130198575484449317765398657516813791597967078843130547339469073783524497382496877243498441684162650928487855937959542776542381517702580219111410239373945791463335216468817891797159897821504141336134011961229585863213744116868341898479921270173994357042490280766042368231306294592305816034402114190442648210070915119128632526643207927399206403270502196136290923785508894091611892797999732479898770027343898906937912932694388260729491337611804903421576030209232881941209677305990236485778758568570909511203847749727139447140750017842138051158739164470079822994287470311711455580863809119499634431231542924995363573544534166199416944524373140000391672173343392584556167540657516390123765234814227550308964579212558077778186821292704585207362004093356520798803551721188807088087772466898440741018646115406804612936758076828507023774182209672664449988128724902414993501219401001765370672317191401925997949428670713449531376719892790107292559315329271665439517184073930078672355080717529913180235718999452728793715874798090520042529997304171394608223665519403070588265928559013346665409955899514815287087015895503845612331949334663867288844709249699760870154746576067740617109411671360905733205915721144812868914282146396418963599623786016511558301453135637971753217719122740923575115844689612181585533098056418282958853896584799967463642188879073429673984966106974767322904274930921304431241275791867912140260586098638979591977302253507591795249943499668854219091401728091291240324419097106670936334674554710470587846998580373319693822832186125663563662227300196033318571309952940878063796339388257833300085483835132481959803926226375922877243938995147684343099551037900344498227926589430544888103232468580078181742899166208452521226468017225770159292796370494628221608659705311860880457610945893698767024912686130786102451619763311388742213622180967440266735615377707064630432362851346787104938266503146626301826386009911001332410273267944348625003805191824863507525729321246269404084347151934903222130472688695181142909993054528914728385212132736819895913661164653395636100392775995046821116359166052147490259673545652512579506858292074086966566678148092233349090670531856554153436180220853767903100802098585062424675371471614926784976597351943926464759004842764683915776120276735116378854746819555607095002547606392301607456201613727812460712017149291083250455836242558225613747332670029560146313664626625184108408526435551075760616558918639998468694149252839714828173433759651731790585540238768981676874286013596872690278563046650509425213768568600827027602310874261454666959825912534982207381304504165906647669730083754622626706293980961379228599568320787109947615111949624856762702790577996604294851650710262744819536909560241872405354015195815901368973088718316821955357398270458847336192054118678494760800661846422575105028339264471032443221584848296622560987616922442031578568960816859233700095456702725652471996634621805360039904773049493081061117890447026080993179208164914084001561137279717964474457910822698800571370948730739574958519456023949553713352403879552609629342711187222946890885571493932420920963889812746152759211771233710658321471894667865836881256359416902697886305637566565270511589302949804123378578009588741245234061360202559864224187793107140310370774238991415782896268860247160087221743398632360201329490179060521461387097002495616922113269135683217341549840373435949057182322394943783472872058473593126858273723016989321497958715693848778260916053432892608850153974019086350180056263354802687994169752296797729166187979142462997664638545934162928193655800594073599868087694021711982073641040542199591089911339670166122773835431930957664741772458832249655277342309784943306925485650386363310465509184262852528967556488981679969063781668502292160178629319257109918089175245793016717386236635810518592787953993726687773744355504320944066168920405278890106620954397703842075409790585293639502140471672275176364054469159930595251498121123000632836929940035415174800963695560911591519351305097536056757497122738733247223334299439795964416272756974788281452938919543919179780495830578105176873022791010237618749182041436120814538747344362413981166492880532981408473122438956024899704764414827372680888359069383203084252482710559799658759140471216458496005546408675587772142479513233766094809931909320095433919996718551768358151589619518928107632509757299346855803242881198506144473507763036827161335579895814696687756797267492473907511129330448610059311031697081944370716803795577518487360501045579868709621241757229741722143091970632237708849516805918096189012758100919518522581134272755075309636666228932838080599671285408828093511202116961319849653073610668505654418211025373854469615185587420505700575888261495326807192713148159720874106763838858514416282535260626452514445199386144279460790374332488395321942092245696971633409779711403667148196791467370350138794216664252879537117245964416540374786812119366723571213640039312537831206990870490421854920889257491088284125753811729442672269609411252776690642554159109624124410614773690847589962809481591267437473683970316925645103066449528952833136986667526561057302938060806717705640347372758940854559438090824022934117904362128241289781935585414469223058188520370422811243860774239667131292667503614480954661643166021094263565562954650536478763836171348484291106790718789951482491353812912872996022446709005369204478525205413817559888660494002070759867343020833304262695786258762182090471108517478008062047916158342858928375981008630590361530730991533337103005007767024431048399846363323604547570763844498393678827412313502948266613097046593733067129592808782764829082779540513431895899823748129703286439371900576065601753249715130145551395611158446136282331860450878473803949375391163105048460542796053348711044126190850489694720890621885113977651566300965967733708467656571181095189043634361442938460620424892828907311518705548399259321673290854432989232402033427695505537391672297800738391325014683049620765825976502001490715724896015980764535931939727448433948695121642423627605318724132757699110767075442641487063525797598420578507881625322631258275225375353312907827229233991901973469958877318300954825891826980150082560409853023435179352929576326184297304876469260675852353214336752697472278921785590185472893192209568387192363535612736411827177789230687431274148917049359515220791900149954463891144855694570764248287491511795465355571647974077067810042898359708679406723077456168802915159985106685165278844446272185418039624433414989676529360733224196806303027701699401813246007448367635711560091194638564196215462750260469722895057683130186655197563435087042456745552261726792507936708788382778795714813046436130676422706429620437824366040216140317789120666296561961817276627472468337572371444709160465057566385526105800512406353089397311243525990809771719833722278531018522388436675146455281597431804631523542433155277652876622739675563673188640006742892639445098465242739506308240042149149884627632749060858136523029010127328467486160496136970964099609404485275485587599287991078550382891153951255006778605902787210807236763823509705570383045418472207043091603551691808413012509993628114628175790641442073599128028234496708954756607086944124895421408720862402696781696349037884497396953950073338348468396830752927901597524196430868111165262332019170855492271790130827789573109557139053285109689778332545958693287355659898640515042491550628028917049986801903913280115785942913725572192146862247809512151632511954616445305241282672393782775249991259990268401573895663033422145829424653742257468572830795144571447217172170344390171558138444299290663385049414552445567639181283014510290419785983701505834195674761038613042562189128641343318579288380854262613061171426518448419053079528551126733990801837900708461500681574188884795165426161291709564074295450881956626201918302402436945381093124745577171671312225963759197527876184346331791160454187021677119481282452140937671112699410475067112269611894574476316058950214818972540215691086743676782333339834793090049695579827352673705992602098532938745690406929370454895121406852644336817988310511018606485003687435377377880357687101549923752753870842331086890020957072110482921078203892582825430743853678938678845171550824421056075012746445684719777935620199933697201020688921671515732288023709159460020579281422206200660770662136186411119039464511246972567849083853953974560152919983727889703872145059312940206651954534823197197456037124574320069154489362428152384518561176908584188017896443196497458965211081852296712793505164224540578823521427317961999439433840947679261853070347008183355600509419881301091737467053884095017880299752423221585377626802533750299111687354685486159204618103044084872599593910681436894070175869895284548114007698177881132942381244912110629421844127353550884486951712261822154242410334674508400867284003116207597789041715421899510712174705598161680472160639854366218120520371025267080822589762082721234822899143897023722519527191182967187424707516302075467248142839624551051489916072253973677889265488627584976956960720624875569085896430625668405496389507310955276293395519901278703982054295957616190481642061914557057918641411590376116837069898283627310675729905679075315341752230316326873798944842338809064711121830318844994995728478247554519759647479833188840882272330805936564717875937759645466235877959356774680757359186747964855850779950002190153225827761646716858046423788030255771497227479049063699882556523239832981578690856832572914858098641904135700095112492548076201483334658215008902573568715728628589777880228112444674918240096125221488915805020859677852091654966635145651388632847300280396301961059638194991615057652714347324569091348372183877979671140165075401908204991585820352573960135268809787675490861799359172749390316567281411205233112473050152264568898538213889610052662413601412411722965122929820314537969307515359259003169193350947717065852529386538881686267170773291846400688708486999155003104663586382344290816318064759978010654953537866623711446364570626969502173544423423074929404208942616624720195343641583097741467031833905383231234374060924479894152342878888888587110637396276339544946001358888192005723471164751936785560384570786894012343324076324959874814196843505410918926079285183879707107430170210495856306080442455608822862122117572876456630741312672784076158322593594055019414285422443235678980565689755317999308802910505961137210498567710018536735289083212063487672806707334546206404814261141369706196328862821461886994687577175390043169221020130498162026839862458973943014519368318441838195560100295968496734198518495996314945289548715598718870583552621401683863581183106851205684154635910380524563847117217821212106128722162524253763046827147151974918777923681784807700970624766909477312166760595507462337125669968044357089923070482883709634106122062070766308810712735710624862438926613157497959226806833188459480017662980172063360634178971275611314406393895211433271861436947760659023345158492960047345295499295662853340265551685535599800744092303711269544719828803680436916119091632263364533324661266862974434455516831152632639373435575795104537875888710518410020589958339879959822445451353658029443025792509752253551525308255741984775779270729019138683637750829888081844708006890211552146344622614088468708319389319850769307851285942767252474785352358559267431807815209013706262561029595478897605034763527896789052350336340918526657057958081872287341591904736173950725836194473696707391163580393299902911848791441413850082003693596935427471422729646162077763129389201152696915172964938281148555040979580355711393742641390964747263809506784813646753925737960500015999521599040534422500550634111212967036120707920863177566166569229503234057262633077041307108981897403699595707664375223053442154801646621952674073998016018204114207792322619912823001873411899291943544289433976296710950251614937569204757779765928995747738757818760854802038762304982286305288261345463881107741394409631520373874750233139799838650413255743318875470620818472533845161123753583328874495241216906348859022307736592331867789432771689184631548324581181882547915784645287665908939251778029107639157159289196176127518723121751560070469290085609343869257334092947393223315517614003002467048702184847384690761234900833286623358455281883757151812237381345516686955628191314036123519539678665398336254286303408505084714763392222044018726750547293413234050365413766358316654410953551281819431995257295975108311779909520303889212337450841246936324792672921730951765343962514538205080555856311467242150053436496567701001851431642012883560394627048117888153808553859689392563362831101945847612823435569999360628749362849396263121141428978393706694610773760753498445233988754224335605409426064724465150571453306140168263830877100622522054887364455754048830624591098148199844437954318671983054725473714673721746781284214097106750134651020281137856143339404661336097397401255849460415338500002693898912492847012546892053061780546003055285372933509996259190318553322495887219489025100141803027682285498654701158621266627181173588718688738389808332699617026792423659913858117693296106288197971001919395880629554677187346338125838160292486198360147729979871273120571322032028504575690735750011778046083231651989085708906682400875964848727543577767320694907469192930438894927009743546491436041357955549348300042338360759281377236265892227047663620196806664771980284507347099402902967733697999621184233818138249990684015970535495278317959125975524991795957531505015611136002871680310533093786875108515066706678620823077849432976257275439747172137699295045174649617946011443989552460583705965135899024689374640564101925298778186797415025378969912635036062934209463477387146111182074864014263939109691429255035354418183096283089143643718609144817465350868728368487526110304341902202363658329806583404243426301929038999413811963719928900533075863880385638026377355762024440421846082611952343954020299294254318741900205024128317877368328956627168050002516703106370642969704283772358296461093955291187494644342390316988195849776128675653911509104542124861217280772932996221537953310962029452657975182251689107870392012504852892547316032463597681300089847160255250462914104176616050444245028613939373851574524967337186933259018554428928015559462061881262235852459856089108099770130466183985887436588873773243601088860550229426153384432008657567689985229925644560273502542282381742604579927654137058837459574794972575192961456785170540640531904771432931209781137337286211239818317844041106915878514399961654100374566986719879295231727712111771772229486027185802483882395198074790128622402561348121667919956756920273231028898988580958707002246439749981244065925735360676364733954118132106641155299199544857249592009103053430934913609249297653361487158248749289098935130229734152531034647060511392685477854761239602786254479061019382441139667288410559126176759142054940087896465268370081054931187899275164499441058030518288371926823323313797222058155222896466033422597096415435116962085378815549492184638325958401951721290473197241670371516491881467203347875585007359331254528344449459950467758875267278189820752127439854852566552803870490438503143232653957782922118685816688148722781734903296936610500471173522177161064283024894888579788472305995091180282414062431445897622125893030305492825543169066044111330888912781754024348338736557326750833574402747013630048297404805583748083230530028596408741040030162350741781079342392865246051725408625341045214944667618371021284914091497257188761924767939637028534628334759882175770670772289957481292738316309937728650022513231422234754422579929841855985946451468684350390314845273621075639131390824319325380971724618039332427557919436402942528867210146505840229198062530002639445641553444719681044247172959043190866680070064196331063863914130249071095131248563606711066426848149947420902504927075034868938069205285471610210028557331474791661084008529287736898562988280474609439222101768158060840395982029394044056801641541171538945243610104322534200730204315260865284828953604535787727385628812968114791370986014951254706844185451923929072881468774586758820306110885474794911532141074138864914763733541384283976740191875378571118515523438069807588777000827782446489266182050245346558837361947434377809680600377844482788019840369988901856492040146378437457195604765771763497148753529247674438388594397093126205511452264943420149474713408497012302647389453439359384872233770236640360026013633256865164883566645637992031106481526435623633931034222232355213509370961371765010288817762179693552242379775216656260241135497573014130795564397554787053584387187656853711857623431937857471939579985035081848718829777316272176681052612968630380592713032967004361608181691291430592912818088530249261471767125961629681696763811424116391066373303384993152768280740948118781184558104319987675542498579919858166065158389793255707776743744116436672753184816598112104831674522931550279998771106215597545399479437343520773636597563675211447481439779932609623982600338971268883683768790803057118303171340769493891379059633504014432705976380151918797310743478564409243233539718255459610193420711760557630156927018163410042030919328901263062660290810416055096762283837210531454115711704392214764971534200239720890924410613605239216073127851967270391325506751978212863009614699353698989489629129966825662563519386134716961129383146386288035146250197315211925553022512173302931962094722039477374774504846268505683930350343868458784422880640500784492844169201589431927903016379662303396527872095562568156390966362645360971925681857871968341995483947410283964766743270092620340260322997257237091573993613689320984290367200247030533720027280038417097783212839273035096338938542591727622575162362022599685496500554429222347884038006453190248400027743775341348801335215989938742326080054254247170602001952079080816650302245176710604093355842163642360723052540350943441654273802237051128416322439426475234583967057527446258480482041840231234842602058417412378587528062618463131988655226053150118765238820025342051914431270624521243139110536045516721557341224477691444072542250943379523540914610979701581620559268793412031737790984636977046879757487332724442490312397606565039366925463662967999702808542773925468580692839991293056392310917374429934951347005612307226284322964209030221618750098429366099194983439477136694496857689442264881224914039910670322116288372730289047738573108522450033816672394101565965048622910696973855813020101016596778492150524524163597858951412311844796147364899117621449468760602813472330721658608635506930727103404682194935368589333167590774588214751222713377251630553526943871411102693132298087279434996411605103626921829523837922181308665640485185328298412378683376130991261907022373866335460773339455678784703129263634716537532090282547777127534019418852120934212233684269568396133976431366342292873151938449479967788561358899533463702974267094796359284987637751201598974404152475871775040728557820818028482149140963098586410453529806961657287735738138755712151598174425380024951275335199558910669206209576113284903353418478945780694878129790034895748753362050781539824584920892084749347087235642519520452342493927793799776786136198617469969693126983224168201909587877154725998407004749212713544394340278146389166186340477628969995703328593195001704673717058025352438357468612946242018587325606773986648467186870072551528951891526255461310771157406650956757785133396326012890387635813591423184033135516070805571730845080137132045429491261012978403015641430817512666681469843066257060720964098086648402611312090715751833710679060879766494555066896257649913350023260836668751637428823100349524601403601892419159189925922959275820633937990644299249271169988339019515965180613573895432999894831577608592304848155696364198541694025900829134781366210991417472495148139315405572913400497872095116583163635740301688579861226084476006780263453790933289131487409161550962668826089637489553038837859879843790532691421980575061315224117692153481092599586056471601215629186621130434664996556516932298784329307022398027011414332176083277481254566740985113591763468957331875643736921355329794098131053487627474682120881562550550881428255655602726301461818701211939805917586146895437388795911816068375606614039394049767168461259001949273538210144048916666534903327280258028482616623798309398413700586176634115625829647911232227507375334923375588614078459209835676422299267049663923396700676273951091983057302624288416865668362779855525365118686744053391254580621393591196711448438077488551738236403307762952589858684493455657463478117126363062783121291423235729455410918637867035685633113782220139687642412165249598360509878714727491849673012334378180463831584187354582895646400179807708658382550667724914138565820039682009987745157792741850123714960764039841065734298623591290702110380779922504349890524389320347890308828719589040376100679017864219311467557598930026491189345663675214233027772264878374490381972865809240289051249348258334250741010764402699448241367513588990261100526633287903176928198197677117933055092254550168988385755711184604062724032969041641602920344983239296376314963817502741923901882100981471281443446703980599875657083621988880973620719138197772524100421922113549246894114245414372112090493791692600291606869049421927806267868540149608572744342888343192125058473363971742076638014712200975997813876869820888826654477230072783335769094726343439363924451093740799160365246814221521418251509165560016088242931176476666040166149409617751387959304000667838298475779617451435521971107542909535756971647840211114967059219572740619358273317825413217697042690085081762346191097822496311788562562031626726216116215298679994354658456828777010935958029126216060917819707341303406969946319555176649237050902062556966761241375058739571292436871898013175671381669805507508696910381959470264039318613075638568464398580077833659887720496385166104378193365458881086843156468468523490854549529450710965680147266392003581831969193933659362316072852675420800357125522249098898054570353965505168107882852864529840652677935931955087124815626428567901773577880059003707684993021595642820310207853594456286754132723969857923337469252202259735727997751116848764487235601899102596111514927141978064206334037406646670461524244267294399389563489619484717324536636445719285643430736881017478756148754273773852289888136125549801175894395271495950395640707601607104562785797592351715554623869028246265577155348990843423689483732331337719099850118433499218006218421240299027208453829439559447186342420117431465432792072288988488740343057267417723708067738577852233243672319230819937439683915440649582059516544561598623280971773789120893086121672269536624083598033868209624720281605641588278852741452020860395156344376951038233934553306218241725396467724828107444994633708693546367123495314361476105770109803860472148239644683473596101653816933207579295804239795231250209707489881769264862491580478053842336543358337010193843107143139943833585292436929169794827683225645488250493758065708204332690153429283252246824483410972045997105029219491200004356064388873493046364077650981091839516620395962650712687713049420813661020164790060026130112716818875580888149422706314230708204130100772098049184062203228041362580051800921206280742731510572822623376036459787961780882292249221002031736456366826421727834687640584814053632480791830200948413810861443283626261692032040972578925220311877455650049930685081104107394628130349553352694618261578823385706710078304466022726537115509158412710129375703385879757237284539292895988728180490390220496139617988669206437315385861127520716472864870732451423836516235084903022716386874198709556735053670824221685660220728278626961642949943462735737024852061880916852346905339456156753923289238892045090888056432159120268216479709411830925161705073727852182241843774144994444796800812422381396128011433956107925125566938292728894518495205656479288798467478295768971565046605743380817683675039276816505508751212423949926029841364819217401250701049413854705548216151519699389827283019852789171293382302732747354572335967904262121679778835809536307205684993347760735860485162352359870983946965085935681532501893160966722375508805057199214927917795853333092263437505359039352967087492413012955087698529172665198805420638824693085516459299213503601188841365820793247308338096862952405825957815923600207308796364681882565126559078649360912095932577475791841991368526488425858095470521872452183848155746479635949126054100759873565047420408657908196467861088860745823440200596937137469726554619440021533471197651802029945746028546114454400341137146234850866902640999835474619226352406181906965593958219260459751945218547186010136586725824330239183847055787095688060314095111184685688138832308190665361771520893357047382326528633906357935617076387165550366027262811769099959556389802647692621844549401990735569529998624105286253926755935055719547875890932694340554447107616689228089562066086569944905859544518038840788528630069102190204691632172591973746465885214629803758001818354722671577554377946458675180639189931170900056297193465314174724380797003889515935304761631926385152267377564862725712122407042606969044731545405432011544768262989326191733481446407893297863327714256422001628622845256022926722039032858852550966980793417370766719350671793803838423609435455646884754065033709502751899071375163169890856762230034353248802768786910964565926739703092124666704198303948460691736963253713870119591703313690617965257847769243951364137415307103859326650169756472734611428216414046385745227023184773573317555077165126936736741629792481292498743205155835997683268172359371347012456091212295887484642867877578646795751622965835785463864395557880638259410281317519825410588466995700288346083450655637106260214808311406178732561340081016232526189760751886271379564740782676263559705973541667456189291443581212424404676011914816089260905831619643542553993402039798670408163878137967461241701829503692199517679672763486035252098113450580438489510602779967538406778194913724886699243032503589895316658938365078639346817966446042366971598315102456226149656515684119923736039138700680083951001771224019777161575827820297993227494571953532246936982900599366416589787251517727463895146269431106027269854190552230633092628014821482309609635823553388474087969696520047538050162437487064672959995402543841470139970706134643073875937981889199695346910796106300932889981171735045657785459463379515938396509980647441968924682241853711106019941292568600206670508573236766497716210397782410983939914467015508129203700417353471801331728912556922317624644415889241609181001149181985321743941473620491460989210711065194784149182976559106558188134333708873913801535240126355571162155611895528080568951526554987444334536731499537753528195430833779794624656681766785270140096283044140898051247012255419499146558168259139756529674323772834587323355629868317816780292113528663119722680719024978280040818470547128362669379424806012577422038887191868631883448040020015452134369307399895551088373207616043579965759272959559449403269879855598910900010706024392636484042799046911831117069348975342142583017574911456602802451624070688915906429274072763654290623835166951367071267497654861627881666298541483065726588427718084629534053816735134742365841971731795029103239286268275708328610899135163422402889934113026131852180686527150505983759002779807773566223011788941689719454712179344607326254690287120395766024482256671418388078554228023784784496201187429256077058990150435615351155216101657438309215090638315321592936537200580321910657657215666815341247654573083731344740394722638474346512544521661792980002338816800181577838361703000507770721899400195844878004251805255464724701063911083619487594713834381627924257067711581105282570735802353540652641183829634997288735297250112282208477996416073074851093528870765045321232820222921439911099170191434612580973635919820391541809473112124075733876951153040686421981760730940392248786343513079856829965044538757787037942418740284997136502228750221662928279924265870962201635314064803827203966095428887928130337192039410759247169242739168498523247197273121591784250520458251462557288339313896397732661534729027052493515404201580059981956608905079272892706164790429218771081619749768508639849339364643058661360212160610191272076371006352322980097730083536900596908930188252920677441148336565335213544052062940677350237569694340838070570449158815512736492862139779132213211843388066176862669989419112198876291824452684702959605871999341982491423024679580081630979799600019718579349756991631102855467872079017699044841433689138792070082691245858860091100747333527615921285623074522312582760989162946865573374037829302178739225575289042659045727978291390647109321424303936944279972788242891964130377157310772605953533486292992603361085012572105175885943335595705321341456889458117518989992036681091968371021602143621382567898278967201088486661538826229576844449884230327889089656416829054301277201456616051237734474662164978054102538036494621644430726212087953103526033051131027386921359383088225533719150606934884972757665515341103897402690521343519506346008077717938429482549626794547576980199283223676534407717065157853712801659521185640516453515871565192484321804442962765733972699330046829989406888341627015358639514826801677079021155478293962619923778866000228101968771938334162366469804573202014667190358534377215482330962923275262634963671825984637003914633619143396330500521755888969843386922843589872134400996113166528653861650963770197465796117647298541079103250256973646631652580593033941058305941438443670583302078961092385000096028004387250797639227058729182855207638716095753795885220489180587608501087576665670950961102068748473102397688480068745397125317899151900803171836227422289946173194639475472087332607221032204172993718739866807063991965434685529724874290316386815414750536825089647609755324478912829208542640630837182428790314967707466436030120046677693513719304754091874591925748831794738661935209325972784637836372417065832634101495661541702552237720067651495419730409007777535110394473910436455762333458257497687020560780560125766474028996604483310845299656108458520836187635944075062965164082259016665860024741824447869072154938884824126520956717610359345956570059031363334002503160837760160190522749970822199550294007333039256459130986258366814988498652039570467430857270936255566922917138875176546035640770701881537448577626102002317298447304080275355918518719943682484835725447927289531637629163866387981244986227932821777092957191598008618007108755043196577493390795743913791435300045489842318803840629056604453508622889454329052961581308249435966212373719648882667006349214657094779879673766929203239990406226893937690672818422017388165317029813987140416820890222156353954178254095413385973580442456560445558499420284582912636669611387427404451225546415356155838383066957787260635657953616728518750757252485659572480629089199805995107320554322842323926689320663451184520268687258689886344606068388694479162354509096941490038433598847203104301976611951445601852362544266638679678290075412941302729162013553313728522646010957992606699109069616544863135068561276755095781547242671190932783722064505309964908887877840158912914910105346231151775487613772792899879678519963830591786250997836698271218528501056595898076691114631296567610559849673121473718916782416581126344147631655121086933981180869415987776601838722614534041581254100451763340221780549086746753938766610289735053241990894606197687789239665605165716452187952517064149162738755920000811374455502914943892262459729586085538415828908694331245193074260696566568387741004970586046250406779678496790295648201386486985620162529677519187045200318621917855086482423481330608007219543743506802384438536607353392218691697424857241893460152387618386782325153321432760552484142145781862136735387766492081605376589501268788700420050453317070218115339201229440765302660291694287227700950440380765107112761096963572158992801291875003909086676778623232366690994533299491222168137364267573039455654289904047646814229327801683590630142563153751747079457858925522910205111288353935603204598220411265610249301465496049605100661153637159888807908902323782288115917266030548928229073591717694655741521631460966838791102199409138425309485441867582737071365301751525547942825571779776968661573074132570848279551828767121886018701878619280272422103259889312657193875315049837541388659071098765055026282156387486107899591956053135772784100496825157507016394803644582281562465844931202245768097460360009083034532364442320183540873202417639221501463884395812838717474792815470457888288508076821945174144028105860328866061726727674515030087857289847427613927570162848467465868388369591904690837471560863827694337872032073339132310877824074716599328692954368440290176778939622098606562704309952427724800739407743083724696349092602202149637692306858199125713600548864386864010917928499351492615039593355117890366131905372145092198636688161883816483303851872238717415106454350355132051773548989777552757443255371566372474534435441848412809716879074979241665690375961387244267989469704939164542096816857631992943353367922943450974577981735513285980794037989658748077626750133198955052583318759656463244526191339847597578899938757558196148864075073244250467261088756301070340776077937405119970413498591233848696140017565253179511771575795275131945857256304538740165986955527162558693404651982237870681250364694679537863190584566503257017428760056979496904352580609209111103053294614675377385059624280899965796306324467850909780831489026318753391745970785291441580820547774726329434556660527022852038096530229629083381153469692319673185432212788337117250065774907249107252485740348419082835779774814914168825271376969001094340761377648487418731698243293622743693716904170881810872101742928109037100000977309557903344136643273367808231025012640831073700517532261466072965558652756539975841935786806116867047742157426598876286995997384905698693761028030005126905217313490141907445119240485586174004947125072513293761190201760157186724092851713785477603552145995848354307689575140731563893520272232436224697297570996577403366115446408204985059861276880231146593632332116664047060124406837360322379955207563026996917043872020612169132773506149751543096030902910862068818208029741138639192386867608762741997860087946363183791825619263211533747157596191757134157369834295405013020010499759058170439698811648143980733751968237686573164454534211394206136959587926718539689642312494935570859665860568612537475919659068040072420100618936747953737753705749383127291409003383837688855841053309435892404414955527379658360309647135313289366129538476897703162917189354281206164435348255552192776966124707287270272355902245433955885751207009741227994192134495378305063561634794407295832195458144059625112222238732508215922805408792621363851812950739715101715283572373388069309775291979566994423956314498349376967149231461962778062765502443563061034611737001968423504862603967799669087117588804859019639157112753414649335925988454052986607957770870482923146856099244325494894435569370404603972409346620158075409396512099348903782562196646067345376443663877635728814318418090231549113721533373625163581574526840997161673119389664334579356556456354401159515864788956168788481450985197215201467974181561001940631241149619657961920795580250374263473722428593232378725810430245637202518132904531251551627240821059617789024316527079137041828262423203999027718050493278416463558083739015666535614730630528564883352138943172947828201962484672894006650945217851258824311228840838756059704734974004156889921429014908926432337401389537678225680966329782263719847506238362967059541391051250329777158461686302483375117714795942380458251770588312881492313634727768589869682161697321291504228940601873619348996292388777724630285389255078462577634963779959329989151426153404562174906613363783607243267517210079578320766293154362152207280832251485579899573303194771526628078798007578233062417352061348072159821545393566054519332770028296707118564344742106657936278687268732675617734737178056510690046607762220209746122648008510436643666435541902320142352415694782992027493364828745928747851672282706320889132159909846882540327746849007379809382050344297894224907120550708900023237802233950487712523780018161507312354618054223609497536035163494093928091032767640336242711088275287685948003533785270118743240118979225026796544540327468208658559416238357927216565224536669218251472645443651889081645564816245005362169954201386198950135410692688457725430323102706392241999820836165265276591679465060858160505568568712438796347024605304900308450966553605733042168429732916370172195896437974642297090857585959129744911909686268599809774528624601994610190665878857027337811884181381233078873788158373359983366672234669655911799888726805731249876450737363254821569278028649052801255401131062341913855820271583117070719273865683054999663069013111249121297160457447041240423061246140642426490959698720730873511722072350750404737742430572024048268685119133667530568425561907620950064557291163632179554525056907363270277399640559645834440273363853661188000047234146519397763559239145260412600704968936012028106894549688440479900267973574869188916898200795990111065008878815333729179214937996646495852784883698591027255166736443038004395574418572899294370967551529143179055369802934328561669594406191593608936964899070486635648836640763029576597160034720166645043990534279613912479497024231544925793613084992394121484803964852738532840786244112636713504212176390740168740010064318423771759800182571206639184134636335947786714976994584189825206727396176883875524645479643946415113644023798932248203117158653341801005086972304051184189910711151723320637594773150678911124405222765005192822545537671036184314807662167004590802562833162356684840697492521011525880952899271472039977820122616771265024357322419282091459744940443106332422973501916691938329374288973886386034592918524051364182398592764975688780001997803671401869838010577270717330444418407603271989346719916686888680593245148354943447462721033986270080485900155124951082963992792987842114837857821508811758170325737210523836242819698681325151023148163454095321894993683800138795128096101389801313982043237028325779746911915430218574372464407978667515942327600656822134915485630059582718562671520698991302473350312566427091102259532338314893989689756822401425548363478786325343080669902177859287335109626530228527804055908960006937280662896796945405843803882948848124047942281965182397536936457929889578255794210593948378679524919234465908033421164868438416051929819069131125432441300566879775210550054157419483806784214653243093753518480506741715472803332755990227351462034161722520909347730060870649660727422118067613395865270827693082504392270738618254811116949038529595723094576904555387646766194045214126185045174967881222625225420294995105078164391170749628652025184869718810057932904459780474128600044356721564987537843310493494303165385746459512014483412377153293124606805820556680644340261399666836315845102022850213187298338640077707077917127911385849411484173150612304233608674207467083445888214784873006838124326048603420520398039994672066938235732542051375164474479235433550682373983123832947238416282024613236150041949833072908669815550674617589673248615861702017780769184080195436695753443836861503161723295315725658560497271219460777837509040504799004521018029935893811387189517865310399566336628995254428616900954602946642481835104052723177763215261081807631624720322398654828944688261281379543513838399159096503176110145561673340859375841223007298962049354231684731456119013370627451653372101952784150843366485718683154707759266001380413461198030059470241851889381598790912932175523398760753164627792920260871619044331651516812323419790246774100510382849642369445921137356415332559100571402192386504324237600586223716858020906861290616574468722975254000616033200134525382789948233703766721713913420053378522189534440356774167756989838340371683053339160303712468122195094451323769643603060107933336317574884600660754013122975875644836292687447653875456366671633406699749727233770775602930171119873713327502029649301339157436902586985805804661850651842865010512710599579744907900725568864758808468315496153957143231085273655909832339900927873362328571917762632399121621719422136842073993822309314300099352877919729663183063706089857543103711226019781257589533875565388292807852373328379571498654743595708116126805997489585227762613411374287400898540454081729983600454020975504859445623078574230082737441934713309411334435977095406278491948107490251001075326160260816166141665828764940536675366409103075438140950942363295087616474038594568300076749067398262609892149434246290522082284867369996747369036618212558758764999033240531377456820933035653514739288807506785309262157018155354164246038618753605910751171596544451629138375154996561231768056352944122861796274432731602355764359001440423701221314110232709724507824830537580539309136187075390125804621374052404104186962215577145031687226391307500214048177954438873320863455884008371509806523844996560156955171721235083443685969318160004631899389556155154887502954567874337030723431693153231859698126685897895105095148228879264170688790144046095670747756454596689425959992788755978477536636909986217025002679023725302120269168121827137745844016745136986531559713305374725826662884442853078675832269357444922580319812405402267749674742781956841448786497782251691834976002692470785895021703704858388868515265760165621177267080605919982230358195653707487049616510340265334858744325169430110779016508192911580225932171227930158137898121057272065802163804143176177861748042060613560746270301387882517734888125466322091023046199189071897531864764481596203251883661383342557380251629906535720631765398761130171689454545284542849138949012752571883712193005628020569517371873637657312815325305329151583778151502917902733190305271744684958622121010306471264222608732792916887491000707158866999254047913786054611810141366817747429490945735777114365311619138196776056638249387208249599690279274158972264263533482913699417066232424301052566108557105882321860415953995261011470246610385777123349945013365720795738329033328267790338461440694253915947579607200765511873466671258279119860920470033646635678259287228565899281046026195224102321794080074560857019502214981683804045378001236533286039783959384004974440166902266486137702679291194779601542349226685477920055280270194687371379891364308309741325341794454848006333434887621180433722346253849620431677039433650809755697980501277777113845268685091187424823340812151151597036955214920274705302810590187488774145471376334439641472564400585203279952036644952915857362994275837591364735007137899752917263254850243740999519067606448557348572716000678300808919766778877206053237007230414810898261174192999230284869838903138569158526989803738366062311867394482801934669491046627645436363276196627877141926295125717141746847349260139498229621952941926164899210479487462540920845674239802557539445478424605466878288948565437238163965174286067026364536764787585857086934460845630429301475483163588819083876568053843919529815202317165149427461863268394120150501380274794164226549074722497966714770269857429653319371853947557581888330894630187929986442821810999712432279880515190220225825103925627914262396261528127570244033580516736900703944157759769468332776781478170997801067263584947564578699956407063202560483281763769954234650000264770866320237533750709170825618178829121555348484981912976077434644897683103996518259302203185739168355670343119920701453229307854524542846194775780342354148147108371829689841186079764946697999961540609342917861302618236089580266302442813911419612144783451058076754515595931540231562270809029227064151150119300956423560999465999653837045524948746983692965835699733590149297182040483811117450935081926236794221159650071490425720958495747811724299488339537170111127932294679341722267132041146536871343639598304001759956917134651127380387343487435851780856522271135939193895628494326974660699269244961652914573600667083355775273620390457210060853612580746188269631693582473145445281407145308991224674238036221680829298174220621860798197137043727200723464659535963188623974496505669454742056367794214902540739842325758539378897401139581409478646694538433617227363033864822552034428500528123827744206093078356383899501146590774355751444444996321829960061275708179358728977432374068967803416414619266061210292307970707626315000351235693107429383685067164757433404492504794750614444438344268104672144761836840853236978233062403887482344558895359341454623603202631096561293380806547311399902028110050717415339231618537126224678146138703245509801626065686426890214790932004293128602116907695945906954418031458955572518471438409956497985277462584714340876550751083482988783963757153324906662143577507370210340928704211200056560771784033654183722097707039082998185723278388513255915407843806226096942825934133693270436473297298053131414410673096167498440524501223865224580163159731941779290670475905774711449587324396052040903560867749633607269786383362511207050385233066787151038662750888189396417820848864094163550696516989046092304161178546471108800040333177562861096097669402728598019472317127433242097596374209926949769666919449022650020469268773013778291584111777734801678122336199306707466885245484440238800072649836711310342917062136424156843313918053232383983078468123706545170731937525394324743353102231318881796761219340335058271096924509959581007125101692341639032718526132731465816895432810824251550267187134476525004805214087356728063163982776436973281937480367061490759085981747339946738833819701910602521740453589700326016152713271589647731441404281010739627169860256321696918143984628976348066263640404724742103943068890300262217919407490294185056643193778672788621514872444857040570417491743083668801820211916799180279149123365031855739327527333088498161734020418254440569737292101091210357772958736197407944977294083500388828156900799618885648926774368028577963627085062949536784319273455247935719907179765485929514896555210085742609479677331538755145823312735881427161972974752998566400151194369472948682330746237551435896015230533986496331433897402923227963168267620139539062424101002664413774030587496049713880031234957424411170400692461605233008783471512801605298659812776385852174133626209981186918938358345653057146829280758503052663152684412143145572569203330345681676854169401128235623310323455220016266200412727026684927816836926266791942439320137398200185642991418955464718939675339859727226028984577768619596135554459532721055935991298244358265061294663738057242475692460861527669477565237601695691691877575077509877316632375206719112645395824232996123929118615660776830180353162751919847202804452994454045882395557025233387374545070083797953533868365884599308144877121224106120864464121937933917213846371733319958318928844743660588628753216510072394367819660276153579065026923320200465135622260332133326790916912968206896304595976989601528304064458567050884821874068569327242388967568172502936668476374070466511317019575209348088040354641188892289787348206240433877593443377351012788990782745082720418094253843066182615519009334935552955266684858475485494938494967552976557793389120050509603720244080853334662123762719793723288604484467147679471941170534997419483368784944658587229478672681938138968282221403428105437551913127361355898698289624008368882129842599996702944503383544658955991070462640172667935141602759653551368815776369942044583995137647829628663131001221231534965839399461463026651772976511526811468953158755101980388687271069507127424565908828648868313976235679953426838583195080029733092861157150407331246858177025938607115915623640069410010572713698395553642613995001507855911638582456822041072917198751686674415946936002316231579585375014210379780938502025242931562025826376153063786386677390155167472847163910141829719442198145128316851168493735526463730798576431768575701484236408740789352058681668788075735862455978596131420928977008662021317085139495607926794154839643638696960646064044825882368579418247614851405354060662705787252435746949859486068833695557311397454945200620586897382572493191047700347322661176946901552848619336843851237375520485128070259328150932433696874607136164590619330725124114051944408510453107152694912451523749776692224397142477111739160271001055661493257893822390736623648614862400268263497424561751004005831896928283068703198441436303294281620983292409389164251515600756093175861284494043497224235994824226709698917461917863787094372023594255212399834252267422936777442893986231106470680422080051493723415218391429320112757538538152722308570014027075530844822501991820874404857371262082276060042328948543302599518455335980198371870313013246335949291371848114991467063678242040592349751000085649630969728832751513083136617133164475700823575348532001183443076306074233894249336445788755808856138636225218959783400429992989436381421511961005832721133631275549113641226868484408007284898058005197058362236770869886182300061523332360237274414046733500673667538411330822614792668451105454556192218178234854687567453892043600237068992115945877699734273688549462432595826857808760858752097166448743979126536642225144766853882164897991219139703135886522295432375281686953025665774373025556138491930286406006798907600465458206946206559399603295541764326024991786904949110480071204024813493511561562807263177679249625023722645669629485182963500555510003335448887796367378236138310691157566684115092107052582867873880273394459968866636536467871590867185180009580075210563577153824342282110770314631151974145511413151112232582017775144045997964536000603811954043472225003066247455557263394762082853850116658090037261991247692211882538771190182621125886615683314903791497925118251236601408921425321372440272474308166026376566103285492314773620130839791355348313991833920577761293186161487443714546368334266843700926550269914013363603933096481736261401808646916666943053625645047277738712426916089523675260346358278950869126866196618323149946519669426092399385520071822088538968327620951347854373933736478358464833341988758379440954439546160099695643379929492941368487698245794174994884303415895408845403336262531882986477376183597159377008643623592744228955744851179963996057437998203792488734880620325546390780235577360282627691738879284350348303931706658969021190228577090613214548879403331887319146436620250981113501638403068994314100847127956423998146619152481508119331358228736762915421760355153676599027887866998088313007968660592865811707769576845589411213031205772873869932186264820028102066026067911651743403664004162278364920630216801991357759335718017897355535376875992900410463543711577972110530813339952464979263630750562505388948802268679332820101592290211794529137334659869207531837711768969445037532706728557894994806768360107989358484976663557718022193801196136210942917405780671537338138341560189293146145018854550800490363261289124650531215691866178661123946688832836387910091158318626391704067701909442417173700506691173895530421379380710863913241518828902128499464067152291584149084550831801244343608041746464087808753602870085445324097573012361069010422206760722613567966626449015641' ) ; +test( macro , '-51676101935731' , '5678' , '114598568890558892351277519655251349170512457301108169122918046980237508383487307624081510756564677550336178477302154205298849988621620086922824241203952845169587118918761676702275886803533985126048599159621880798222780212304246817740927997329598603522333259993676023070883723250177300932925278631685866750044996349161018487418710787156824698743699059007370890842841419231416436426583294134280327799008795618556337681789763639042135318458712688112601941846586049438371804926113126508996078777819094310659599757182791807946793330068376689258887811689995072195331087218152210579989587318167100041773383622122477291943850218476496927044272842237554951357422835645664516760841149829622887677523325405719345978782256416220091760753375551941881093250856520343277787117543740369641738849743550250267305042707228709682744788048246753481687183391246480490101912653586013524077299683599506874945043746289984496657526568247754108757916023746860823651106704947454023630829841108532968959604789557821034558282678387782274892400435740522133769190575725840235412871894976415960900858952703549298673487135436478720837173606603965003749202465844411925396601850697464037386444381718980799446621464654550821206321596000370929647608427450678602369409467488634567676260749990886237210425012278562172533337907188794399372225626872733254924000975445679212294865582779159284739536067574648674948637306603357526281158214867606477582551408107503527328338793768794019922917887582376894908153461450324195019808790951956266885107461973925559489970262966079308484289377245650607102408136209843678657317031621605407118233165024507780188477008776626376774732469991901945525053633560386998290497433245057356518070213620275700745654781100039839338506451450577013486892471483552928409289830016271158248107951963293890564868178813169793288638609421552999187733984144553406615257602536512368045676140620190929856992488533649322354718067519310329366233012095782513367770623099210385145306068882019668219811962909945944938303357412007436455159207921731034641005985972731076872404481351411053559046816512985501762256787820371273853296301441525251524961854980951466415757745095790408750111233498938399843328976884101167576106332111369898329073992906185716431137905217592404057225277504661400556077285374257237710751164948498254228336520906926692000699164318088485138209956632046211769172737818805518350576876409911238994857621609965737246540747228915599832803850235006646505920161663461782710578007459880127628658300436718162035702759857413264686037450843066618529962777161180564480610570194083990996868348589497339967832525631952114004244381394862686005465286457021469621822619867151692227701982207711240403754089139160258204655040380941387512320543125847873280531581254727837191059980870831091122923417959861596435814654220789276907248261882603123131749272763005899889970210586720440187361168097472073369327028087807891921073775186041480435653913681928394558065224090076679384591070891307475995293653429635959202548503686994214508788450093243004124213718944072946348546273490462900925735733454594192759136002496877104912413694566063277128709834235803795521599955020375102449787917179385948650401410782450535088196592336719230363010532216782360997264383385827672744353408971592600267691136637128647179666091641390767353626655629610767925329336924814212570169908132079298822259312790776336192539171954812142459076936946385158760440753962659197081868092892356974717649297318187816581273710002222637822422625907248946609177471022616696078166962638903351786881559353388016022793559059422611570772104441502159519678683680896440534678482697361220573057326321241467487140124612227021769519132788278891261578500937493023431494800715316974572061757711388338850673314696559686053949631600706217179936149359062760652855148968218517603478406764660079773518392515740066557654365463358812116383920109518376511927056859803872276659655935142427958378419267026204993883734671725916631060714088945987606306190400841739343960163767980632636951807150346899488246361701225858275512527213850024197265932454942520600005445974264278700061722886358112352180245501375011619481895903494024525948428278732709789878138429844599672738323876521649110855277792436882821166942741738868002576408435397753753580116182952236210916267829966145925028378437875898705477022525397608430772386789943421906088726337517286361167325374608638664447743003669920203279685500192102212678244500280945163720924806258942015670529098264965727843346426114488713290334508104318728502382771728945872501553223396187212916235118458655838036585541800475260873636577479118287025217430116350907433315459696137904514955307303089701947453368286386613774098275500676250943657017383834720061347722825211956235385743059349300184053076658159489552304525616565099968774334572359425467321345729237028949216589829910496148348266399952259506966453084807497614865786568010359718381755280552030450357482091573325492727231276923993244258612115652943501643076670607096916922788985244717748167425031600866371091539018747314619844176434458885344303041217826099156483212620631712885522804065144269853819342281878739269471469710167419263261298426536005724710899328976253518828717132656525336398408521558604682092666618949049723934689800847063844761671282296978918952554214898709123610631472079549040944065036271515445762211638184670207178784047672153843595557392899022269520772862968918684932700339559357972321385437515253951979000296108897236060608128673387896445773358382692008138068938089087965375939805087660261553154170365883140110004255362850999174312472258828659845801114248663995523535651080385407122403810220614699534394862199070170516370529573724426277383249873364882798357333666601674798052228774948816335992020369901620508453181317972153011582161807177844672456985443467954652113777013601630746866436183732233279064589871750135148960495813527709288884229866780850817394534670003825516127760071436525331020214654659944097612888206044199184355427079633744822550780458499778237357353947422296038656940932241020563615278249555508480330508674120678052089502789507188213274173100770916834969313508824784364056056402134407244119638598785990062688861144654163575302227468770905464187883181134822725915136640612107272892247282302709032318098895359710245013039285473099721463792717954735326941637258027020359449474131956608190956922971406645107469617185652049606430376373658432400056414731724407005001708692411063413271177513212657905468790370163043951258130982778875673922295809518571866979572550249035569072335930443175450876647946083312614092963535991789686984682545283358632371449413497269427928750522476008103850277182197862744717478903974777451339726925492684847344667201465331748104805481572363883196797787778153950751138898727728375184289353676704124928349416752637531102490310279351764714073405197836749014690395282266606472002997382187295402889448513435174099451342568509159453242120888320839737697049616714431772174331671258229322246266889685257316038839337528724509464509575560371587287218382144584572419703181295877602278221106570930586664027065311454892200273818659381311150404756262029418161040565111664447264252108585981706307591881047374954123445586938599411011096620619274323216164888259706949545584064116931697419880810232135950719390350713062967911958144149654637677624682217905237402682589189689936992002791828405957862158911334297099480655817390013698092780805866900709190383307511190456176470564094830491741371514412781382471608566016857542175626271815830825751173841300134557318244910059728166314923856198690466209098544666893459074761870150034083238014245526074209050076925214228138545561830243367680472907455390358950492305796631316420731434125187536810546887612854361525903826549660077385607201642040850831267699276814362171286190066768458981549632902853741404667094999899553250446338548089645534133891269993883172431804704263925215719942166060373843805638153594804487097561950457231382850176704556278355177741960834256932103041468108431421024565688930277277827204256767781041934083737995080790793709338041932760953129953324240749245316117068345243350389721646548464456799564122538803508302280206449283869830911336778221946967418555187670963441198271217790496259964780654563445592505556519078267175564184094236772289072470230033320640614537275025449633888698376301092731992965463666856043698716302806693885087426713749261988769556429463390046244837567904659070225420983410009710978888428520162826187731324371494738964988237894717677430862117281326863913479208553025891950712021033737482821762882285969238709814995624715621242460823465809517565513365312665098952226387532971101201851401611211767107556328808562154195909528062579532668678860849786353548436978596941540803973584469644923040177756384343881496136104278613378924581962143710807219315022833887527431763513942927784402594506818541221504288809623165972198540933669494785758163834650407164355749575134198337788610507044159766150241794499149571096051559220223878817602912552525929282957515181558545301005606558272154807998739024160863626434649314036466134847629318039975100093407373104577388406981878656175843258194717523909092875616040477453623785051493436611595002796440848161148666254022016142475461311658387441335732482745839024940608008050016971556249565896984096952364713943123112125591933258703693851493005494192677788993225349131525711396145903045479052901233399936977821783416065979989065328839546014013831203847910851373499087681269273873808794681827032455802487324933071462267161585550348497079770547563318071210788547323150873537668915925365865275006606032948938992420253484030285899801624037645490546643734003092212092762896778094831579400704783040331797648705647138803684988666221643282949518185294231209149700862655885675685742587977247470742881671606128975518282142621174602709267031158360580359120233235473997243785917055987801766020914435512416873713285800875063783960692674329948345063193713090346106430960233900220471049512359484540660252000207287048940904649627356855235310748631701290142334022573624657571685050543054539462593343925120666965564304346218619573761401243630815566172421336337019044921825132743027076074431860266381081919439461501518228192067428154599552061956522454587058878725629423271121973055948964177586675025613775553459402756099732937841164187693906160490012428728615553281749083877569856034002578003805619108603440019554292851568931421048023066958052204343883372931130679073105823557408875100214126784759475874110505599354169570696609784560599958215019928598013718187402289676120592754363058386217976480889644579627120147953445090187876503616327911008391800184735093377883625195033462470489375923507822652512086242908850264792687042789386655227831819214938281104644932640292609019834942621395608142214243559409841197661527772521605594271433534022197568992584336382425215293816118135415822763659169694051345319875623274091939751368133997813845916207449451701850545644437368283792955041875417825002650183812267921554071554148141810545261132326348765749042696757503149872630966032411848943742788719959766685423336348908720532382273782455044811025224688005258724128117375301877446615463103917254847301569577217661986908844517236064250159012321706048888909681124601158873187553237768719599661206118675972473809098983711387501122615038573963236084013215429847727184258992906237874964751406104681742937670985077393504140518585378445945934961441800684055554038233956351167210957484786967705794592308352175762541752214854817124986107384580167149061884866946918670005168162259392927744148326558953622056499756057865517495516987090419182627739373939985152189775038553115538646471075934221909696916621433427020321907211290750366847722032569885358324304825748519823761695735069483610277833391784268305687555417321060681254063601376044472764727209479821068239831947119222642427588604524821548797463869612449236554848366936415329635310834448639523331032214535561193061625240491292472959421415693842751590387163835477828542899873873355067539845115993799752754206275423338217062076744831694087595991582736550683224860678822779524670167708708091493709146151122212285091313848566637581973054913102622054948327816252692080182215324465447499805634653027067312991605368041127365270645100770232874469104024167016075695806268258050422993127312933128697504418653934394765893583568834878949604860449521880438659616802122657499696711371950669696088698654540203231615696906652300496120780993861295366389568887602126999373711575248980111463126737434199999923186123228140458802135764964497499211839068795147064258579583962890520656631190772155927073711649314137404718303647113380977808317817846980386481066453326264620161085488324738434460460038866634635020866393862469381723564361661779993116516911788408702482058657042742027085322886734485737469665890653383965527251028179320635401480247183169549776451102905415564180956069929150480364980253864993561144620337603341026450280648329108363155941423746477676441226330763778143302558927254074511454873470596647216773968167693426794670205504808306963783432036244979681725783341795616208450760202661124160076951242290485270351100016293179519729579532961953093883990623843703845911016699084294413469034800124849706899721051849479889146370628964206263232509984714695180238067877770898591308982070720120248367443358203058594410980465031081259361282748294276045466637842578800793537425693971319078319720309483472991281827652766395632559627448449322724455935973458554816112349560437316476772468508305512367513982203113683319867051472957794682903830326933115041030819168485955295547194534592544854770444190167625774242882339856600323988117721872329621119307065210242378471925603855682602511342933926964022027574473668074767250277614350240898114804833628233917590283331643902799593247663848733995782588708639967040765878261594144333897235212151312166170400673009191876880782817897642797305674083214304116001846541558880139343876729547122660589815784784823845573389037426438950965231475933765920983976255357185318394294462939870923725191627253724661104724674152692069584822984507668895796308777450228162744501914688617738288423774855905509153854844523303840957562160021954437904572106375782764718235463296636952021626993854683250625366396838736958893686683145675963239492023700157535671554883718959215653559018684790556050406047348053882167970909777535677010769091602244371438842557331819164644414366880048931933080199464775719509620992644091954275270680288884109813652088838217429569522796724565190899510248605280475710488565214118916127660760240741412774854958523464875335791354333554221114105991785983393823020076734058183927249261932463022507518378417531613595367008713063568456526553921055526758039628801741635831559596552015920057728581873824235567176123583511244661921620535917294970250780006254560913313662765305807933366774232072453360650960008438817118037078045098657774617616105096015011390156583453754385678396291801322575711617682706241038506687001234836301806498523163010650449912433471614658213754184557683081702691883198005157762869533426985772871548066409461102566074482585186196172527568428897050456306066648582770036459460511184764057517774896339386592062506459252579461592560474665528416239792702809524368229823156443879848127098290936890568640344899841675398255520835326531345996368545121081712559676548972073976307843066272299578779899750067849171423314509815187548244077378329796193933542997364333804995452518983295374300579841041477430234285996531274115737469223410436044734098218596575261885585549688086844423068789246324166549747789727265524050455962780001580710226770900533745079189013929659478693513587745539578848213377469358275467176678200951122297705749503306698574297410712427125825591862363276134686251235055301972061105661224639007183964902695034424436437936253659197166818614429825626676264111882581783852335169138950280191270126993381055654149481441296522956835357856587690439122868336488948939918429473181311497573245935858058048846043815567877289011167331444931953925754671240134069623866836792786186011879777990158691547401988209088233436138946304596662211246080716963940999419458347032733075551690030530582476791228961785738428344668271954394260631144673445131619681560910288236163257493867850591921101601774216283724826035337528992934585854238509545972201306935022486046021526186153884783616668536070352766884410433501411997774544944294529752318683967218547747054919125920723787453768874396140732374376069661038491913390225584336932342777315761255948878551294079902768864779706744004767497971699010857817837320331732586562556917485670513125539936647354410777628785488698349835379591475098154799827267570479952391820096174179651670850574284042676840011853046780858800494312309921469703542619592726263073590976462669364922795234207666005686292826903212848877481605826947453296687451059719061958356539720636942722901955175023641714596609837815361932183405821894237560762724700527878714340752426908901818205438166928697623647899633610409766731686872645318577714032460894835086863906305213902132263709453953046543560314104677422693777305934218298526734878837051106284119542143667788585456657142746665427084921846682769309335227479860142774263718482271045462438363768361342074577613689416306245388036366588228918750297891553343601271116018104061166106299788463499404576467234680999408128685491495431444663757432415240164158488210900819745907723117930120695685024585064625587827493034169505631321361629073305032453650015121172416455507667013522455054423012824659556913170191784272134013229862167933357870440372597009868509136667331096909772244774497523425649971713882182557907497459362685468864499900443106554956344003403877683026526745408126870149084364211072799881433860076306106247851979718211066568293397639539451283955573658564108776175764110532523449193170074167594375276229899521780717952518583208904105756371686598266057406647087463129407379439591678526118563375375353708424759178126712588851088358543556455828259242229752207982655534691287505400579846562914613465114055818872346386918363454946173595045963724905520868541270473697264250446046089642748190999453356935960747546554692305385529475044104740895111094053981210797991140570926872891670773814468169522981197767273686316613791050298552624472953601064874491619431515581298483094974434200152544999972253615705670333910064258013397051190672327809649449512231521002044431168670777665701194943318920142732683570462533039523306263620225871545457775764770604929953997570625951936899909518438534435970611071611463871839879758260799824991623563429811928499039440771973070864273967278618870976632376075488071575461144561219935848976261991995743418626824010282377472581361028454622921441883252823380473535980635040675347266665813701114359254871281962513087998501938848746260785427396775049514168562612073137570353309933421182587431285208099490235882059772793358564991437202016800963518589761455026124188003465061263343783842908952238749299315855490241309786950824004062760976904187502795945035840704763791629996479207882802190639214588281672075545825412562820832491492193486742631064101780835395570244051743402738881730159768458032350492340983945389655058528481715594070179000970782625156057915320413986266019990172337946416918557063800133747641604183437713060443142402624891881249459030992935793527950409840201343706778667031036382270368309922120727685173156943536928765918297523291556499898745165164935596868942828843358938043957961029987646769997740718353298902113509786945580718208991358463177836638025806577481206139581029605232343390118748079783839195843230044920030000293609262840245610181309358224141510030238251805707053062432073731984040628183721390347726139606685474826304883630174052769377584217789247910727483325946473633314792666461326212634921565119552168762472730204002086252124424937891781185484626212876955436221477165360031020231430386214870054108295007899715254119071513260472470230202533983791307938408960011206611455326096801350655243853398472597807466586200601253211741913149771316966742972424796953362829778527691461619646698652901365907319538496395153314189223850326377266970571724729299225616643375250610943592593231827466075999846471798767809815413033084807935411432143738782707086800700249890892016781300755462774204025643372850935993536835930431474211275360661334909180169369108705004893833932685971810039967903674985151600881858004723253102936206563045825118090129751111068119272073957023228117535946104197559484455044224813743551400684035958704844910240433782794543523046179137502988175588334343929604010655262873143788409800103840149709367769678272389350632655653061526909944375166865821226676124073718040169866120459345622225584107723626981527594409083885799002170436455111357966813110193233521883524236223930189338177788877617266977925443568413998134839137304794431773484057275907471161083605792371548269896511232018878269590877998951467990708359705970388117405757636229559483770009754679879169950634139569036627493168743252032958240435946744381139249473095508589299567208080597578309780705860706366590038525752672682617991285144702659613402563158938705017883355247903759797019472262560188954212310667319942679244018502332473572330860141285275142567616352011441717389434820775671752035498192835097210704346762871785843394366619830754655068315068021943501597109761283722605580646118265029950836645428880355482809418017207519930746525482467660956501946286248673803148678778320154527985484392151772657071003568822396992334569447439518931797472794360893625913323930637936123592307936959744134660419379541520223856359015281561124867120268443532762202836358157067397969523277941814805842994278790015196862449348685333746940835406048087120468705315737810814851006986239662973395622981892417635797361552255577200093154926399160041205233526050099942113585424767102462092543693848903032320176365611859456909911464662553394222492702361972492589328743134628042819438985147526265136537852840491772207661691558509954371067469519662258250666590165226871146827599529979187274127942586949484821499948977145043677342942737229631023377843981185400933835831423767351371476191843662990866109519730716132126804072070640870780628344547744782396291260010070383315973397408134147633405837121702299828479485082965001168058308660534087429710071643832112134185681191355797031035640660674171124608581811772720944526748929882880981531600483484334329258782080131950152990379792064594496526209604646130807483497903997981366660814109367081501493013317987778423970445235345262451162417303194219408843842138074967028470582769901836866713822445861935378961772248421345450181825317803057793865331808243999032870740776976064805740571853847337064834310551096634478336669042763136704807586517365797136211624710257953267355206084531695186978286706442628626395149607414222118992574163280333685823680906473269108560879550907146951083501973652650163620691173614434376022074343663278172616794365354028350879611668170977299413329242853102242731460245981931645393086566419168095714547735636341109457537424127013466092829987029469225005609148935719219627886553517060926819156103842061184103249786722102357857380363966877195050686029417164805540813780785634440605334896258106006438094052913691329158675367290141201254618676773332219794175088755775479718673883939486154200593603203954816323103020616423867397093710839615897871898114553682658447075458783118190023366087506978374367440207438924966819405213686487476793825253259734471325657957108673156552118127808366008364042860528540535034950176612182005881123405988511608306144849231503055132715499943836726775291396811671741107037864808220275570128503090451498085660993674239141408137294509508916040084880385126052374726220832131130118877249390053885190862016620304127338330822376885177520007162660545308168910551027048206864259306643403258146047122775364888620470370521404458837255123240697440311548296630455328683555320575028845668660604051631191978861891344050450146706574218145025744150912515431643639763471496084616921691588906643318094161772942444267813744245201380387655455570994259537781139991672727963630401572633729986361556875282295744688790419550042115325815066901167830915280249317272239032336428833326465165088029450553351265755331884109528200193953474902952152924946185562536338925534826199411100653632718279533909714213316643228976513653756607679272611930525331509533360676882289504637968260788530354999017751472236832783844855905587554729452514767314824700008649155270346776891167316609312798908304391728180382885705826358462049930067611387677311125159653938052767644809094689360554558540305110248935812740648171186350593122648008331898865084081910232912772214306873277181550887217911939282490833562582253824958566304651212513938680716752798136384903060676496603824306844521424474974798402169651179277198301900928835877874551786318031213157816266052352420958386807745919890178528945692073978829824318254828803767836945769264370965570278955420236563465318633087533589358061430931666035989509802975402163642667940061694906307745403336415888401856273908779094219374541395289779919505811512398727811277052044628889676576204347887155453152137381991361998780634451422237710883316724087265275331735893833197129258839234716392342611646952816033259950054307629463527993424446629554718055401467323011537168845330459671616005062986429892433717372769708986976311304603813694466876866558852113339228482279288771725065980107614730689732508546319518769065056680957782914367866215918590112732510471009325001837807792226514983632349787121937850873634795369167442047937893608233634609666703704587131733723929085811244615783860405178507877859666805690049528538712275243036223309707838878743093968440740186365488240924198311296922550429467362803938321202544305084030232602891812533837834720169281029831388109862088373636124595410033526477352125408960443495710872004466944740504181430539375974997235191384764262912442475167562557149784655839519095519656973612676149775555468394211684073546313305136429488931374979941004482067517955299494545191338214275004688648850080625425657255697031851628472826812878438128524708409359692881087063253264481220907184058301090967458080899506347453532002995200234316121374098161410900539135981863658581370995732911051446451138998982787447971905437800015184192194998890428219996377737564767442914336298428740825412724669981656100409516386221832151219625497417581073077338087294189592180026420910118672014596652061567734369839911877944565035730463100962767041999720431147498003871428186236484743508773318443952371300988256662194348824041466733754460943324754187692906063468991068425866078952725816706806990970194721942596702352590797837064926809786719427373172154689565613653917663261933894602724198203854026358029130198575484449317765398657516813791597967078843130547339469073783524497382496877243498441684162650928487855937959542776542381517702580219111410239373945791463335216468817891797159897821504141336134011961229585863213744116868341898479921270173994357042490280766042368231306294592305816034402114190442648210070915119128632526643207927399206403270502196136290923785508894091611892797999732479898770027343898906937912932694388260729491337611804903421576030209232881941209677305990236485778758568570909511203847749727139447140750017842138051158739164470079822994287470311711455580863809119499634431231542924995363573544534166199416944524373140000391672173343392584556167540657516390123765234814227550308964579212558077778186821292704585207362004093356520798803551721188807088087772466898440741018646115406804612936758076828507023774182209672664449988128724902414993501219401001765370672317191401925997949428670713449531376719892790107292559315329271665439517184073930078672355080717529913180235718999452728793715874798090520042529997304171394608223665519403070588265928559013346665409955899514815287087015895503845612331949334663867288844709249699760870154746576067740617109411671360905733205915721144812868914282146396418963599623786016511558301453135637971753217719122740923575115844689612181585533098056418282958853896584799967463642188879073429673984966106974767322904274930921304431241275791867912140260586098638979591977302253507591795249943499668854219091401728091291240324419097106670936334674554710470587846998580373319693822832186125663563662227300196033318571309952940878063796339388257833300085483835132481959803926226375922877243938995147684343099551037900344498227926589430544888103232468580078181742899166208452521226468017225770159292796370494628221608659705311860880457610945893698767024912686130786102451619763311388742213622180967440266735615377707064630432362851346787104938266503146626301826386009911001332410273267944348625003805191824863507525729321246269404084347151934903222130472688695181142909993054528914728385212132736819895913661164653395636100392775995046821116359166052147490259673545652512579506858292074086966566678148092233349090670531856554153436180220853767903100802098585062424675371471614926784976597351943926464759004842764683915776120276735116378854746819555607095002547606392301607456201613727812460712017149291083250455836242558225613747332670029560146313664626625184108408526435551075760616558918639998468694149252839714828173433759651731790585540238768981676874286013596872690278563046650509425213768568600827027602310874261454666959825912534982207381304504165906647669730083754622626706293980961379228599568320787109947615111949624856762702790577996604294851650710262744819536909560241872405354015195815901368973088718316821955357398270458847336192054118678494760800661846422575105028339264471032443221584848296622560987616922442031578568960816859233700095456702725652471996634621805360039904773049493081061117890447026080993179208164914084001561137279717964474457910822698800571370948730739574958519456023949553713352403879552609629342711187222946890885571493932420920963889812746152759211771233710658321471894667865836881256359416902697886305637566565270511589302949804123378578009588741245234061360202559864224187793107140310370774238991415782896268860247160087221743398632360201329490179060521461387097002495616922113269135683217341549840373435949057182322394943783472872058473593126858273723016989321497958715693848778260916053432892608850153974019086350180056263354802687994169752296797729166187979142462997664638545934162928193655800594073599868087694021711982073641040542199591089911339670166122773835431930957664741772458832249655277342309784943306925485650386363310465509184262852528967556488981679969063781668502292160178629319257109918089175245793016717386236635810518592787953993726687773744355504320944066168920405278890106620954397703842075409790585293639502140471672275176364054469159930595251498121123000632836929940035415174800963695560911591519351305097536056757497122738733247223334299439795964416272756974788281452938919543919179780495830578105176873022791010237618749182041436120814538747344362413981166492880532981408473122438956024899704764414827372680888359069383203084252482710559799658759140471216458496005546408675587772142479513233766094809931909320095433919996718551768358151589619518928107632509757299346855803242881198506144473507763036827161335579895814696687756797267492473907511129330448610059311031697081944370716803795577518487360501045579868709621241757229741722143091970632237708849516805918096189012758100919518522581134272755075309636666228932838080599671285408828093511202116961319849653073610668505654418211025373854469615185587420505700575888261495326807192713148159720874106763838858514416282535260626452514445199386144279460790374332488395321942092245696971633409779711403667148196791467370350138794216664252879537117245964416540374786812119366723571213640039312537831206990870490421854920889257491088284125753811729442672269609411252776690642554159109624124410614773690847589962809481591267437473683970316925645103066449528952833136986667526561057302938060806717705640347372758940854559438090824022934117904362128241289781935585414469223058188520370422811243860774239667131292667503614480954661643166021094263565562954650536478763836171348484291106790718789951482491353812912872996022446709005369204478525205413817559888660494002070759867343020833304262695786258762182090471108517478008062047916158342858928375981008630590361530730991533337103005007767024431048399846363323604547570763844498393678827412313502948266613097046593733067129592808782764829082779540513431895899823748129703286439371900576065601753249715130145551395611158446136282331860450878473803949375391163105048460542796053348711044126190850489694720890621885113977651566300965967733708467656571181095189043634361442938460620424892828907311518705548399259321673290854432989232402033427695505537391672297800738391325014683049620765825976502001490715724896015980764535931939727448433948695121642423627605318724132757699110767075442641487063525797598420578507881625322631258275225375353312907827229233991901973469958877318300954825891826980150082560409853023435179352929576326184297304876469260675852353214336752697472278921785590185472893192209568387192363535612736411827177789230687431274148917049359515220791900149954463891144855694570764248287491511795465355571647974077067810042898359708679406723077456168802915159985106685165278844446272185418039624433414989676529360733224196806303027701699401813246007448367635711560091194638564196215462750260469722895057683130186655197563435087042456745552261726792507936708788382778795714813046436130676422706429620437824366040216140317789120666296561961817276627472468337572371444709160465057566385526105800512406353089397311243525990809771719833722278531018522388436675146455281597431804631523542433155277652876622739675563673188640006742892639445098465242739506308240042149149884627632749060858136523029010127328467486160496136970964099609404485275485587599287991078550382891153951255006778605902787210807236763823509705570383045418472207043091603551691808413012509993628114628175790641442073599128028234496708954756607086944124895421408720862402696781696349037884497396953950073338348468396830752927901597524196430868111165262332019170855492271790130827789573109557139053285109689778332545958693287355659898640515042491550628028917049986801903913280115785942913725572192146862247809512151632511954616445305241282672393782775249991259990268401573895663033422145829424653742257468572830795144571447217172170344390171558138444299290663385049414552445567639181283014510290419785983701505834195674761038613042562189128641343318579288380854262613061171426518448419053079528551126733990801837900708461500681574188884795165426161291709564074295450881956626201918302402436945381093124745577171671312225963759197527876184346331791160454187021677119481282452140937671112699410475067112269611894574476316058950214818972540215691086743676782333339834793090049695579827352673705992602098532938745690406929370454895121406852644336817988310511018606485003687435377377880357687101549923752753870842331086890020957072110482921078203892582825430743853678938678845171550824421056075012746445684719777935620199933697201020688921671515732288023709159460020579281422206200660770662136186411119039464511246972567849083853953974560152919983727889703872145059312940206651954534823197197456037124574320069154489362428152384518561176908584188017896443196497458965211081852296712793505164224540578823521427317961999439433840947679261853070347008183355600509419881301091737467053884095017880299752423221585377626802533750299111687354685486159204618103044084872599593910681436894070175869895284548114007698177881132942381244912110629421844127353550884486951712261822154242410334674508400867284003116207597789041715421899510712174705598161680472160639854366218120520371025267080822589762082721234822899143897023722519527191182967187424707516302075467248142839624551051489916072253973677889265488627584976956960720624875569085896430625668405496389507310955276293395519901278703982054295957616190481642061914557057918641411590376116837069898283627310675729905679075315341752230316326873798944842338809064711121830318844994995728478247554519759647479833188840882272330805936564717875937759645466235877959356774680757359186747964855850779950002190153225827761646716858046423788030255771497227479049063699882556523239832981578690856832572914858098641904135700095112492548076201483334658215008902573568715728628589777880228112444674918240096125221488915805020859677852091654966635145651388632847300280396301961059638194991615057652714347324569091348372183877979671140165075401908204991585820352573960135268809787675490861799359172749390316567281411205233112473050152264568898538213889610052662413601412411722965122929820314537969307515359259003169193350947717065852529386538881686267170773291846400688708486999155003104663586382344290816318064759978010654953537866623711446364570626969502173544423423074929404208942616624720195343641583097741467031833905383231234374060924479894152342878888888587110637396276339544946001358888192005723471164751936785560384570786894012343324076324959874814196843505410918926079285183879707107430170210495856306080442455608822862122117572876456630741312672784076158322593594055019414285422443235678980565689755317999308802910505961137210498567710018536735289083212063487672806707334546206404814261141369706196328862821461886994687577175390043169221020130498162026839862458973943014519368318441838195560100295968496734198518495996314945289548715598718870583552621401683863581183106851205684154635910380524563847117217821212106128722162524253763046827147151974918777923681784807700970624766909477312166760595507462337125669968044357089923070482883709634106122062070766308810712735710624862438926613157497959226806833188459480017662980172063360634178971275611314406393895211433271861436947760659023345158492960047345295499295662853340265551685535599800744092303711269544719828803680436916119091632263364533324661266862974434455516831152632639373435575795104537875888710518410020589958339879959822445451353658029443025792509752253551525308255741984775779270729019138683637750829888081844708006890211552146344622614088468708319389319850769307851285942767252474785352358559267431807815209013706262561029595478897605034763527896789052350336340918526657057958081872287341591904736173950725836194473696707391163580393299902911848791441413850082003693596935427471422729646162077763129389201152696915172964938281148555040979580355711393742641390964747263809506784813646753925737960500015999521599040534422500550634111212967036120707920863177566166569229503234057262633077041307108981897403699595707664375223053442154801646621952674073998016018204114207792322619912823001873411899291943544289433976296710950251614937569204757779765928995747738757818760854802038762304982286305288261345463881107741394409631520373874750233139799838650413255743318875470620818472533845161123753583328874495241216906348859022307736592331867789432771689184631548324581181882547915784645287665908939251778029107639157159289196176127518723121751560070469290085609343869257334092947393223315517614003002467048702184847384690761234900833286623358455281883757151812237381345516686955628191314036123519539678665398336254286303408505084714763392222044018726750547293413234050365413766358316654410953551281819431995257295975108311779909520303889212337450841246936324792672921730951765343962514538205080555856311467242150053436496567701001851431642012883560394627048117888153808553859689392563362831101945847612823435569999360628749362849396263121141428978393706694610773760753498445233988754224335605409426064724465150571453306140168263830877100622522054887364455754048830624591098148199844437954318671983054725473714673721746781284214097106750134651020281137856143339404661336097397401255849460415338500002693898912492847012546892053061780546003055285372933509996259190318553322495887219489025100141803027682285498654701158621266627181173588718688738389808332699617026792423659913858117693296106288197971001919395880629554677187346338125838160292486198360147729979871273120571322032028504575690735750011778046083231651989085708906682400875964848727543577767320694907469192930438894927009743546491436041357955549348300042338360759281377236265892227047663620196806664771980284507347099402902967733697999621184233818138249990684015970535495278317959125975524991795957531505015611136002871680310533093786875108515066706678620823077849432976257275439747172137699295045174649617946011443989552460583705965135899024689374640564101925298778186797415025378969912635036062934209463477387146111182074864014263939109691429255035354418183096283089143643718609144817465350868728368487526110304341902202363658329806583404243426301929038999413811963719928900533075863880385638026377355762024440421846082611952343954020299294254318741900205024128317877368328956627168050002516703106370642969704283772358296461093955291187494644342390316988195849776128675653911509104542124861217280772932996221537953310962029452657975182251689107870392012504852892547316032463597681300089847160255250462914104176616050444245028613939373851574524967337186933259018554428928015559462061881262235852459856089108099770130466183985887436588873773243601088860550229426153384432008657567689985229925644560273502542282381742604579927654137058837459574794972575192961456785170540640531904771432931209781137337286211239818317844041106915878514399961654100374566986719879295231727712111771772229486027185802483882395198074790128622402561348121667919956756920273231028898988580958707002246439749981244065925735360676364733954118132106641155299199544857249592009103053430934913609249297653361487158248749289098935130229734152531034647060511392685477854761239602786254479061019382441139667288410559126176759142054940087896465268370081054931187899275164499441058030518288371926823323313797222058155222896466033422597096415435116962085378815549492184638325958401951721290473197241670371516491881467203347875585007359331254528344449459950467758875267278189820752127439854852566552803870490438503143232653957782922118685816688148722781734903296936610500471173522177161064283024894888579788472305995091180282414062431445897622125893030305492825543169066044111330888912781754024348338736557326750833574402747013630048297404805583748083230530028596408741040030162350741781079342392865246051725408625341045214944667618371021284914091497257188761924767939637028534628334759882175770670772289957481292738316309937728650022513231422234754422579929841855985946451468684350390314845273621075639131390824319325380971724618039332427557919436402942528867210146505840229198062530002639445641553444719681044247172959043190866680070064196331063863914130249071095131248563606711066426848149947420902504927075034868938069205285471610210028557331474791661084008529287736898562988280474609439222101768158060840395982029394044056801641541171538945243610104322534200730204315260865284828953604535787727385628812968114791370986014951254706844185451923929072881468774586758820306110885474794911532141074138864914763733541384283976740191875378571118515523438069807588777000827782446489266182050245346558837361947434377809680600377844482788019840369988901856492040146378437457195604765771763497148753529247674438388594397093126205511452264943420149474713408497012302647389453439359384872233770236640360026013633256865164883566645637992031106481526435623633931034222232355213509370961371765010288817762179693552242379775216656260241135497573014130795564397554787053584387187656853711857623431937857471939579985035081848718829777316272176681052612968630380592713032967004361608181691291430592912818088530249261471767125961629681696763811424116391066373303384993152768280740948118781184558104319987675542498579919858166065158389793255707776743744116436672753184816598112104831674522931550279998771106215597545399479437343520773636597563675211447481439779932609623982600338971268883683768790803057118303171340769493891379059633504014432705976380151918797310743478564409243233539718255459610193420711760557630156927018163410042030919328901263062660290810416055096762283837210531454115711704392214764971534200239720890924410613605239216073127851967270391325506751978212863009614699353698989489629129966825662563519386134716961129383146386288035146250197315211925553022512173302931962094722039477374774504846268505683930350343868458784422880640500784492844169201589431927903016379662303396527872095562568156390966362645360971925681857871968341995483947410283964766743270092620340260322997257237091573993613689320984290367200247030533720027280038417097783212839273035096338938542591727622575162362022599685496500554429222347884038006453190248400027743775341348801335215989938742326080054254247170602001952079080816650302245176710604093355842163642360723052540350943441654273802237051128416322439426475234583967057527446258480482041840231234842602058417412378587528062618463131988655226053150118765238820025342051914431270624521243139110536045516721557341224477691444072542250943379523540914610979701581620559268793412031737790984636977046879757487332724442490312397606565039366925463662967999702808542773925468580692839991293056392310917374429934951347005612307226284322964209030221618750098429366099194983439477136694496857689442264881224914039910670322116288372730289047738573108522450033816672394101565965048622910696973855813020101016596778492150524524163597858951412311844796147364899117621449468760602813472330721658608635506930727103404682194935368589333167590774588214751222713377251630553526943871411102693132298087279434996411605103626921829523837922181308665640485185328298412378683376130991261907022373866335460773339455678784703129263634716537532090282547777127534019418852120934212233684269568396133976431366342292873151938449479967788561358899533463702974267094796359284987637751201598974404152475871775040728557820818028482149140963098586410453529806961657287735738138755712151598174425380024951275335199558910669206209576113284903353418478945780694878129790034895748753362050781539824584920892084749347087235642519520452342493927793799776786136198617469969693126983224168201909587877154725998407004749212713544394340278146389166186340477628969995703328593195001704673717058025352438357468612946242018587325606773986648467186870072551528951891526255461310771157406650956757785133396326012890387635813591423184033135516070805571730845080137132045429491261012978403015641430817512666681469843066257060720964098086648402611312090715751833710679060879766494555066896257649913350023260836668751637428823100349524601403601892419159189925922959275820633937990644299249271169988339019515965180613573895432999894831577608592304848155696364198541694025900829134781366210991417472495148139315405572913400497872095116583163635740301688579861226084476006780263453790933289131487409161550962668826089637489553038837859879843790532691421980575061315224117692153481092599586056471601215629186621130434664996556516932298784329307022398027011414332176083277481254566740985113591763468957331875643736921355329794098131053487627474682120881562550550881428255655602726301461818701211939805917586146895437388795911816068375606614039394049767168461259001949273538210144048916666534903327280258028482616623798309398413700586176634115625829647911232227507375334923375588614078459209835676422299267049663923396700676273951091983057302624288416865668362779855525365118686744053391254580621393591196711448438077488551738236403307762952589858684493455657463478117126363062783121291423235729455410918637867035685633113782220139687642412165249598360509878714727491849673012334378180463831584187354582895646400179807708658382550667724914138565820039682009987745157792741850123714960764039841065734298623591290702110380779922504349890524389320347890308828719589040376100679017864219311467557598930026491189345663675214233027772264878374490381972865809240289051249348258334250741010764402699448241367513588990261100526633287903176928198197677117933055092254550168988385755711184604062724032969041641602920344983239296376314963817502741923901882100981471281443446703980599875657083621988880973620719138197772524100421922113549246894114245414372112090493791692600291606869049421927806267868540149608572744342888343192125058473363971742076638014712200975997813876869820888826654477230072783335769094726343439363924451093740799160365246814221521418251509165560016088242931176476666040166149409617751387959304000667838298475779617451435521971107542909535756971647840211114967059219572740619358273317825413217697042690085081762346191097822496311788562562031626726216116215298679994354658456828777010935958029126216060917819707341303406969946319555176649237050902062556966761241375058739571292436871898013175671381669805507508696910381959470264039318613075638568464398580077833659887720496385166104378193365458881086843156468468523490854549529450710965680147266392003581831969193933659362316072852675420800357125522249098898054570353965505168107882852864529840652677935931955087124815626428567901773577880059003707684993021595642820310207853594456286754132723969857923337469252202259735727997751116848764487235601899102596111514927141978064206334037406646670461524244267294399389563489619484717324536636445719285643430736881017478756148754273773852289888136125549801175894395271495950395640707601607104562785797592351715554623869028246265577155348990843423689483732331337719099850118433499218006218421240299027208453829439559447186342420117431465432792072288988488740343057267417723708067738577852233243672319230819937439683915440649582059516544561598623280971773789120893086121672269536624083598033868209624720281605641588278852741452020860395156344376951038233934553306218241725396467724828107444994633708693546367123495314361476105770109803860472148239644683473596101653816933207579295804239795231250209707489881769264862491580478053842336543358337010193843107143139943833585292436929169794827683225645488250493758065708204332690153429283252246824483410972045997105029219491200004356064388873493046364077650981091839516620395962650712687713049420813661020164790060026130112716818875580888149422706314230708204130100772098049184062203228041362580051800921206280742731510572822623376036459787961780882292249221002031736456366826421727834687640584814053632480791830200948413810861443283626261692032040972578925220311877455650049930685081104107394628130349553352694618261578823385706710078304466022726537115509158412710129375703385879757237284539292895988728180490390220496139617988669206437315385861127520716472864870732451423836516235084903022716386874198709556735053670824221685660220728278626961642949943462735737024852061880916852346905339456156753923289238892045090888056432159120268216479709411830925161705073727852182241843774144994444796800812422381396128011433956107925125566938292728894518495205656479288798467478295768971565046605743380817683675039276816505508751212423949926029841364819217401250701049413854705548216151519699389827283019852789171293382302732747354572335967904262121679778835809536307205684993347760735860485162352359870983946965085935681532501893160966722375508805057199214927917795853333092263437505359039352967087492413012955087698529172665198805420638824693085516459299213503601188841365820793247308338096862952405825957815923600207308796364681882565126559078649360912095932577475791841991368526488425858095470521872452183848155746479635949126054100759873565047420408657908196467861088860745823440200596937137469726554619440021533471197651802029945746028546114454400341137146234850866902640999835474619226352406181906965593958219260459751945218547186010136586725824330239183847055787095688060314095111184685688138832308190665361771520893357047382326528633906357935617076387165550366027262811769099959556389802647692621844549401990735569529998624105286253926755935055719547875890932694340554447107616689228089562066086569944905859544518038840788528630069102190204691632172591973746465885214629803758001818354722671577554377946458675180639189931170900056297193465314174724380797003889515935304761631926385152267377564862725712122407042606969044731545405432011544768262989326191733481446407893297863327714256422001628622845256022926722039032858852550966980793417370766719350671793803838423609435455646884754065033709502751899071375163169890856762230034353248802768786910964565926739703092124666704198303948460691736963253713870119591703313690617965257847769243951364137415307103859326650169756472734611428216414046385745227023184773573317555077165126936736741629792481292498743205155835997683268172359371347012456091212295887484642867877578646795751622965835785463864395557880638259410281317519825410588466995700288346083450655637106260214808311406178732561340081016232526189760751886271379564740782676263559705973541667456189291443581212424404676011914816089260905831619643542553993402039798670408163878137967461241701829503692199517679672763486035252098113450580438489510602779967538406778194913724886699243032503589895316658938365078639346817966446042366971598315102456226149656515684119923736039138700680083951001771224019777161575827820297993227494571953532246936982900599366416589787251517727463895146269431106027269854190552230633092628014821482309609635823553388474087969696520047538050162437487064672959995402543841470139970706134643073875937981889199695346910796106300932889981171735045657785459463379515938396509980647441968924682241853711106019941292568600206670508573236766497716210397782410983939914467015508129203700417353471801331728912556922317624644415889241609181001149181985321743941473620491460989210711065194784149182976559106558188134333708873913801535240126355571162155611895528080568951526554987444334536731499537753528195430833779794624656681766785270140096283044140898051247012255419499146558168259139756529674323772834587323355629868317816780292113528663119722680719024978280040818470547128362669379424806012577422038887191868631883448040020015452134369307399895551088373207616043579965759272959559449403269879855598910900010706024392636484042799046911831117069348975342142583017574911456602802451624070688915906429274072763654290623835166951367071267497654861627881666298541483065726588427718084629534053816735134742365841971731795029103239286268275708328610899135163422402889934113026131852180686527150505983759002779807773566223011788941689719454712179344607326254690287120395766024482256671418388078554228023784784496201187429256077058990150435615351155216101657438309215090638315321592936537200580321910657657215666815341247654573083731344740394722638474346512544521661792980002338816800181577838361703000507770721899400195844878004251805255464724701063911083619487594713834381627924257067711581105282570735802353540652641183829634997288735297250112282208477996416073074851093528870765045321232820222921439911099170191434612580973635919820391541809473112124075733876951153040686421981760730940392248786343513079856829965044538757787037942418740284997136502228750221662928279924265870962201635314064803827203966095428887928130337192039410759247169242739168498523247197273121591784250520458251462557288339313896397732661534729027052493515404201580059981956608905079272892706164790429218771081619749768508639849339364643058661360212160610191272076371006352322980097730083536900596908930188252920677441148336565335213544052062940677350237569694340838070570449158815512736492862139779132213211843388066176862669989419112198876291824452684702959605871999341982491423024679580081630979799600019718579349756991631102855467872079017699044841433689138792070082691245858860091100747333527615921285623074522312582760989162946865573374037829302178739225575289042659045727978291390647109321424303936944279972788242891964130377157310772605953533486292992603361085012572105175885943335595705321341456889458117518989992036681091968371021602143621382567898278967201088486661538826229576844449884230327889089656416829054301277201456616051237734474662164978054102538036494621644430726212087953103526033051131027386921359383088225533719150606934884972757665515341103897402690521343519506346008077717938429482549626794547576980199283223676534407717065157853712801659521185640516453515871565192484321804442962765733972699330046829989406888341627015358639514826801677079021155478293962619923778866000228101968771938334162366469804573202014667190358534377215482330962923275262634963671825984637003914633619143396330500521755888969843386922843589872134400996113166528653861650963770197465796117647298541079103250256973646631652580593033941058305941438443670583302078961092385000096028004387250797639227058729182855207638716095753795885220489180587608501087576665670950961102068748473102397688480068745397125317899151900803171836227422289946173194639475472087332607221032204172993718739866807063991965434685529724874290316386815414750536825089647609755324478912829208542640630837182428790314967707466436030120046677693513719304754091874591925748831794738661935209325972784637836372417065832634101495661541702552237720067651495419730409007777535110394473910436455762333458257497687020560780560125766474028996604483310845299656108458520836187635944075062965164082259016665860024741824447869072154938884824126520956717610359345956570059031363334002503160837760160190522749970822199550294007333039256459130986258366814988498652039570467430857270936255566922917138875176546035640770701881537448577626102002317298447304080275355918518719943682484835725447927289531637629163866387981244986227932821777092957191598008618007108755043196577493390795743913791435300045489842318803840629056604453508622889454329052961581308249435966212373719648882667006349214657094779879673766929203239990406226893937690672818422017388165317029813987140416820890222156353954178254095413385973580442456560445558499420284582912636669611387427404451225546415356155838383066957787260635657953616728518750757252485659572480629089199805995107320554322842323926689320663451184520268687258689886344606068388694479162354509096941490038433598847203104301976611951445601852362544266638679678290075412941302729162013553313728522646010957992606699109069616544863135068561276755095781547242671190932783722064505309964908887877840158912914910105346231151775487613772792899879678519963830591786250997836698271218528501056595898076691114631296567610559849673121473718916782416581126344147631655121086933981180869415987776601838722614534041581254100451763340221780549086746753938766610289735053241990894606197687789239665605165716452187952517064149162738755920000811374455502914943892262459729586085538415828908694331245193074260696566568387741004970586046250406779678496790295648201386486985620162529677519187045200318621917855086482423481330608007219543743506802384438536607353392218691697424857241893460152387618386782325153321432760552484142145781862136735387766492081605376589501268788700420050453317070218115339201229440765302660291694287227700950440380765107112761096963572158992801291875003909086676778623232366690994533299491222168137364267573039455654289904047646814229327801683590630142563153751747079457858925522910205111288353935603204598220411265610249301465496049605100661153637159888807908902323782288115917266030548928229073591717694655741521631460966838791102199409138425309485441867582737071365301751525547942825571779776968661573074132570848279551828767121886018701878619280272422103259889312657193875315049837541388659071098765055026282156387486107899591956053135772784100496825157507016394803644582281562465844931202245768097460360009083034532364442320183540873202417639221501463884395812838717474792815470457888288508076821945174144028105860328866061726727674515030087857289847427613927570162848467465868388369591904690837471560863827694337872032073339132310877824074716599328692954368440290176778939622098606562704309952427724800739407743083724696349092602202149637692306858199125713600548864386864010917928499351492615039593355117890366131905372145092198636688161883816483303851872238717415106454350355132051773548989777552757443255371566372474534435441848412809716879074979241665690375961387244267989469704939164542096816857631992943353367922943450974577981735513285980794037989658748077626750133198955052583318759656463244526191339847597578899938757558196148864075073244250467261088756301070340776077937405119970413498591233848696140017565253179511771575795275131945857256304538740165986955527162558693404651982237870681250364694679537863190584566503257017428760056979496904352580609209111103053294614675377385059624280899965796306324467850909780831489026318753391745970785291441580820547774726329434556660527022852038096530229629083381153469692319673185432212788337117250065774907249107252485740348419082835779774814914168825271376969001094340761377648487418731698243293622743693716904170881810872101742928109037100000977309557903344136643273367808231025012640831073700517532261466072965558652756539975841935786806116867047742157426598876286995997384905698693761028030005126905217313490141907445119240485586174004947125072513293761190201760157186724092851713785477603552145995848354307689575140731563893520272232436224697297570996577403366115446408204985059861276880231146593632332116664047060124406837360322379955207563026996917043872020612169132773506149751543096030902910862068818208029741138639192386867608762741997860087946363183791825619263211533747157596191757134157369834295405013020010499759058170439698811648143980733751968237686573164454534211394206136959587926718539689642312494935570859665860568612537475919659068040072420100618936747953737753705749383127291409003383837688855841053309435892404414955527379658360309647135313289366129538476897703162917189354281206164435348255552192776966124707287270272355902245433955885751207009741227994192134495378305063561634794407295832195458144059625112222238732508215922805408792621363851812950739715101715283572373388069309775291979566994423956314498349376967149231461962778062765502443563061034611737001968423504862603967799669087117588804859019639157112753414649335925988454052986607957770870482923146856099244325494894435569370404603972409346620158075409396512099348903782562196646067345376443663877635728814318418090231549113721533373625163581574526840997161673119389664334579356556456354401159515864788956168788481450985197215201467974181561001940631241149619657961920795580250374263473722428593232378725810430245637202518132904531251551627240821059617789024316527079137041828262423203999027718050493278416463558083739015666535614730630528564883352138943172947828201962484672894006650945217851258824311228840838756059704734974004156889921429014908926432337401389537678225680966329782263719847506238362967059541391051250329777158461686302483375117714795942380458251770588312881492313634727768589869682161697321291504228940601873619348996292388777724630285389255078462577634963779959329989151426153404562174906613363783607243267517210079578320766293154362152207280832251485579899573303194771526628078798007578233062417352061348072159821545393566054519332770028296707118564344742106657936278687268732675617734737178056510690046607762220209746122648008510436643666435541902320142352415694782992027493364828745928747851672282706320889132159909846882540327746849007379809382050344297894224907120550708900023237802233950487712523780018161507312354618054223609497536035163494093928091032767640336242711088275287685948003533785270118743240118979225026796544540327468208658559416238357927216565224536669218251472645443651889081645564816245005362169954201386198950135410692688457725430323102706392241999820836165265276591679465060858160505568568712438796347024605304900308450966553605733042168429732916370172195896437974642297090857585959129744911909686268599809774528624601994610190665878857027337811884181381233078873788158373359983366672234669655911799888726805731249876450737363254821569278028649052801255401131062341913855820271583117070719273865683054999663069013111249121297160457447041240423061246140642426490959698720730873511722072350750404737742430572024048268685119133667530568425561907620950064557291163632179554525056907363270277399640559645834440273363853661188000047234146519397763559239145260412600704968936012028106894549688440479900267973574869188916898200795990111065008878815333729179214937996646495852784883698591027255166736443038004395574418572899294370967551529143179055369802934328561669594406191593608936964899070486635648836640763029576597160034720166645043990534279613912479497024231544925793613084992394121484803964852738532840786244112636713504212176390740168740010064318423771759800182571206639184134636335947786714976994584189825206727396176883875524645479643946415113644023798932248203117158653341801005086972304051184189910711151723320637594773150678911124405222765005192822545537671036184314807662167004590802562833162356684840697492521011525880952899271472039977820122616771265024357322419282091459744940443106332422973501916691938329374288973886386034592918524051364182398592764975688780001997803671401869838010577270717330444418407603271989346719916686888680593245148354943447462721033986270080485900155124951082963992792987842114837857821508811758170325737210523836242819698681325151023148163454095321894993683800138795128096101389801313982043237028325779746911915430218574372464407978667515942327600656822134915485630059582718562671520698991302473350312566427091102259532338314893989689756822401425548363478786325343080669902177859287335109626530228527804055908960006937280662896796945405843803882948848124047942281965182397536936457929889578255794210593948378679524919234465908033421164868438416051929819069131125432441300566879775210550054157419483806784214653243093753518480506741715472803332755990227351462034161722520909347730060870649660727422118067613395865270827693082504392270738618254811116949038529595723094576904555387646766194045214126185045174967881222625225420294995105078164391170749628652025184869718810057932904459780474128600044356721564987537843310493494303165385746459512014483412377153293124606805820556680644340261399666836315845102022850213187298338640077707077917127911385849411484173150612304233608674207467083445888214784873006838124326048603420520398039994672066938235732542051375164474479235433550682373983123832947238416282024613236150041949833072908669815550674617589673248615861702017780769184080195436695753443836861503161723295315725658560497271219460777837509040504799004521018029935893811387189517865310399566336628995254428616900954602946642481835104052723177763215261081807631624720322398654828944688261281379543513838399159096503176110145561673340859375841223007298962049354231684731456119013370627451653372101952784150843366485718683154707759266001380413461198030059470241851889381598790912932175523398760753164627792920260871619044331651516812323419790246774100510382849642369445921137356415332559100571402192386504324237600586223716858020906861290616574468722975254000616033200134525382789948233703766721713913420053378522189534440356774167756989838340371683053339160303712468122195094451323769643603060107933336317574884600660754013122975875644836292687447653875456366671633406699749727233770775602930171119873713327502029649301339157436902586985805804661850651842865010512710599579744907900725568864758808468315496153957143231085273655909832339900927873362328571917762632399121621719422136842073993822309314300099352877919729663183063706089857543103711226019781257589533875565388292807852373328379571498654743595708116126805997489585227762613411374287400898540454081729983600454020975504859445623078574230082737441934713309411334435977095406278491948107490251001075326160260816166141665828764940536675366409103075438140950942363295087616474038594568300076749067398262609892149434246290522082284867369996747369036618212558758764999033240531377456820933035653514739288807506785309262157018155354164246038618753605910751171596544451629138375154996561231768056352944122861796274432731602355764359001440423701221314110232709724507824830537580539309136187075390125804621374052404104186962215577145031687226391307500214048177954438873320863455884008371509806523844996560156955171721235083443685969318160004631899389556155154887502954567874337030723431693153231859698126685897895105095148228879264170688790144046095670747756454596689425959992788755978477536636909986217025002679023725302120269168121827137745844016745136986531559713305374725826662884442853078675832269357444922580319812405402267749674742781956841448786497782251691834976002692470785895021703704858388868515265760165621177267080605919982230358195653707487049616510340265334858744325169430110779016508192911580225932171227930158137898121057272065802163804143176177861748042060613560746270301387882517734888125466322091023046199189071897531864764481596203251883661383342557380251629906535720631765398761130171689454545284542849138949012752571883712193005628020569517371873637657312815325305329151583778151502917902733190305271744684958622121010306471264222608732792916887491000707158866999254047913786054611810141366817747429490945735777114365311619138196776056638249387208249599690279274158972264263533482913699417066232424301052566108557105882321860415953995261011470246610385777123349945013365720795738329033328267790338461440694253915947579607200765511873466671258279119860920470033646635678259287228565899281046026195224102321794080074560857019502214981683804045378001236533286039783959384004974440166902266486137702679291194779601542349226685477920055280270194687371379891364308309741325341794454848006333434887621180433722346253849620431677039433650809755697980501277777113845268685091187424823340812151151597036955214920274705302810590187488774145471376334439641472564400585203279952036644952915857362994275837591364735007137899752917263254850243740999519067606448557348572716000678300808919766778877206053237007230414810898261174192999230284869838903138569158526989803738366062311867394482801934669491046627645436363276196627877141926295125717141746847349260139498229621952941926164899210479487462540920845674239802557539445478424605466878288948565437238163965174286067026364536764787585857086934460845630429301475483163588819083876568053843919529815202317165149427461863268394120150501380274794164226549074722497966714770269857429653319371853947557581888330894630187929986442821810999712432279880515190220225825103925627914262396261528127570244033580516736900703944157759769468332776781478170997801067263584947564578699956407063202560483281763769954234650000264770866320237533750709170825618178829121555348484981912976077434644897683103996518259302203185739168355670343119920701453229307854524542846194775780342354148147108371829689841186079764946697999961540609342917861302618236089580266302442813911419612144783451058076754515595931540231562270809029227064151150119300956423560999465999653837045524948746983692965835699733590149297182040483811117450935081926236794221159650071490425720958495747811724299488339537170111127932294679341722267132041146536871343639598304001759956917134651127380387343487435851780856522271135939193895628494326974660699269244961652914573600667083355775273620390457210060853612580746188269631693582473145445281407145308991224674238036221680829298174220621860798197137043727200723464659535963188623974496505669454742056367794214902540739842325758539378897401139581409478646694538433617227363033864822552034428500528123827744206093078356383899501146590774355751444444996321829960061275708179358728977432374068967803416414619266061210292307970707626315000351235693107429383685067164757433404492504794750614444438344268104672144761836840853236978233062403887482344558895359341454623603202631096561293380806547311399902028110050717415339231618537126224678146138703245509801626065686426890214790932004293128602116907695945906954418031458955572518471438409956497985277462584714340876550751083482988783963757153324906662143577507370210340928704211200056560771784033654183722097707039082998185723278388513255915407843806226096942825934133693270436473297298053131414410673096167498440524501223865224580163159731941779290670475905774711449587324396052040903560867749633607269786383362511207050385233066787151038662750888189396417820848864094163550696516989046092304161178546471108800040333177562861096097669402728598019472317127433242097596374209926949769666919449022650020469268773013778291584111777734801678122336199306707466885245484440238800072649836711310342917062136424156843313918053232383983078468123706545170731937525394324743353102231318881796761219340335058271096924509959581007125101692341639032718526132731465816895432810824251550267187134476525004805214087356728063163982776436973281937480367061490759085981747339946738833819701910602521740453589700326016152713271589647731441404281010739627169860256321696918143984628976348066263640404724742103943068890300262217919407490294185056643193778672788621514872444857040570417491743083668801820211916799180279149123365031855739327527333088498161734020418254440569737292101091210357772958736197407944977294083500388828156900799618885648926774368028577963627085062949536784319273455247935719907179765485929514896555210085742609479677331538755145823312735881427161972974752998566400151194369472948682330746237551435896015230533986496331433897402923227963168267620139539062424101002664413774030587496049713880031234957424411170400692461605233008783471512801605298659812776385852174133626209981186918938358345653057146829280758503052663152684412143145572569203330345681676854169401128235623310323455220016266200412727026684927816836926266791942439320137398200185642991418955464718939675339859727226028984577768619596135554459532721055935991298244358265061294663738057242475692460861527669477565237601695691691877575077509877316632375206719112645395824232996123929118615660776830180353162751919847202804452994454045882395557025233387374545070083797953533868365884599308144877121224106120864464121937933917213846371733319958318928844743660588628753216510072394367819660276153579065026923320200465135622260332133326790916912968206896304595976989601528304064458567050884821874068569327242388967568172502936668476374070466511317019575209348088040354641188892289787348206240433877593443377351012788990782745082720418094253843066182615519009334935552955266684858475485494938494967552976557793389120050509603720244080853334662123762719793723288604484467147679471941170534997419483368784944658587229478672681938138968282221403428105437551913127361355898698289624008368882129842599996702944503383544658955991070462640172667935141602759653551368815776369942044583995137647829628663131001221231534965839399461463026651772976511526811468953158755101980388687271069507127424565908828648868313976235679953426838583195080029733092861157150407331246858177025938607115915623640069410010572713698395553642613995001507855911638582456822041072917198751686674415946936002316231579585375014210379780938502025242931562025826376153063786386677390155167472847163910141829719442198145128316851168493735526463730798576431768575701484236408740789352058681668788075735862455978596131420928977008662021317085139495607926794154839643638696960646064044825882368579418247614851405354060662705787252435746949859486068833695557311397454945200620586897382572493191047700347322661176946901552848619336843851237375520485128070259328150932433696874607136164590619330725124114051944408510453107152694912451523749776692224397142477111739160271001055661493257893822390736623648614862400268263497424561751004005831896928283068703198441436303294281620983292409389164251515600756093175861284494043497224235994824226709698917461917863787094372023594255212399834252267422936777442893986231106470680422080051493723415218391429320112757538538152722308570014027075530844822501991820874404857371262082276060042328948543302599518455335980198371870313013246335949291371848114991467063678242040592349751000085649630969728832751513083136617133164475700823575348532001183443076306074233894249336445788755808856138636225218959783400429992989436381421511961005832721133631275549113641226868484408007284898058005197058362236770869886182300061523332360237274414046733500673667538411330822614792668451105454556192218178234854687567453892043600237068992115945877699734273688549462432595826857808760858752097166448743979126536642225144766853882164897991219139703135886522295432375281686953025665774373025556138491930286406006798907600465458206946206559399603295541764326024991786904949110480071204024813493511561562807263177679249625023722645669629485182963500555510003335448887796367378236138310691157566684115092107052582867873880273394459968866636536467871590867185180009580075210563577153824342282110770314631151974145511413151112232582017775144045997964536000603811954043472225003066247455557263394762082853850116658090037261991247692211882538771190182621125886615683314903791497925118251236601408921425321372440272474308166026376566103285492314773620130839791355348313991833920577761293186161487443714546368334266843700926550269914013363603933096481736261401808646916666943053625645047277738712426916089523675260346358278950869126866196618323149946519669426092399385520071822088538968327620951347854373933736478358464833341988758379440954439546160099695643379929492941368487698245794174994884303415895408845403336262531882986477376183597159377008643623592744228955744851179963996057437998203792488734880620325546390780235577360282627691738879284350348303931706658969021190228577090613214548879403331887319146436620250981113501638403068994314100847127956423998146619152481508119331358228736762915421760355153676599027887866998088313007968660592865811707769576845589411213031205772873869932186264820028102066026067911651743403664004162278364920630216801991357759335718017897355535376875992900410463543711577972110530813339952464979263630750562505388948802268679332820101592290211794529137334659869207531837711768969445037532706728557894994806768360107989358484976663557718022193801196136210942917405780671537338138341560189293146145018854550800490363261289124650531215691866178661123946688832836387910091158318626391704067701909442417173700506691173895530421379380710863913241518828902128499464067152291584149084550831801244343608041746464087808753602870085445324097573012361069010422206760722613567966626449015641' ) ; +test( macro , '717897987691852588770249' , '0' , '1' ) ; +test( macro , '-717897987691852588770249' , '0' , '1' ) ; +test( macro , '717897987691852588770249' , '1' , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , '3' , '369988485035126972924700782451696644186473100389722973815184405301748249' ) ; +test( macro , '-717897987691852588770249' , '3' , '-369988485035126972924700782451696644186473100389722973815184405301748249' ) ; +test( macro , '717897987691852588770249' , '7' , '98274117348321974353044780928022697503543794108996224149902690255438168118107927224939057895356483251830948245334782867413814443266637838233302304694183773324275704249' ) ; +test( macro , '-717897987691852588770249' , '7' , '-98274117348321974353044780928022697503543794108996224149902690255438168118107927224939057895356483251830948245334782867413814443266637838233302304694183773324275704249' ) ; +test( macro , '717897987691852588770249' , '9' , '50648270951104922750154368051586870571131493195253277558448154467572398239992609359412793847046346201052022004762903721738077206909720257557511103348958535839847634617934011064335949101435909492826285656394536682249' ) ; +test( macro , '-717897987691852588770249' , '9' , '-50648270951104922750154368051586870571131493195253277558448154467572398239992609359412793847046346201052022004762903721738077206909720257557511103348958535839847634617934011064335949101435909492826285656394536682249' ) ; +test( macro , '717897987691852588770249' , '11' , '26102980312143604580379781426139335779091260301758026221495303393196039344305009624874488017227324790317412920525253886011853217074287636537729904547128731845728160914486066244742089352609334182138245049106257642108402738856230144495829015803277090696341313660249' ) ; +test( macro , '-717897987691852588770249' , '11' , '-26102980312143604580379781426139335779091260301758026221495303393196039344305009624874488017227324790317412920525253886011853217074287636537729904547128731845728160914486066244742089352609334182138245049106257642108402738856230144495829015803277090696341313660249' ) ; +test( macro , '717897987691852588770249' , '17' , '3573275582766550916421412995798134382789703709314385104884818112662852238582986404829924618616654726489613490560634610856652852433199412781955936605818387336430363300497297843489165805533270350826963139013723342117143973258213022730407788251463239302985363622895194233407234360656339752537037204386160966863282760795179386609783329264325715584866656109211813856395434440166721187549981532749010960740594249' ) ; +test( macro , '-717897987691852588770249' , '17' , '-3573275582766550916421412995798134382789703709314385104884818112662852238582986404829924618616654726489613490560634610856652852433199412781955936605818387336430363300497297843489165805533270350826963139013723342117143973258213022730407788251463239302985363622895194233407234360656339752537037204386160966863282760795179386609783329264325715584866656109211813856395434440166721187549981532749010960740594249' ) ; +test( macro , '717897987691852588770249' , '22' , '681365581176156632412753534374262781125282012419825049087724194682872335055219639396310501297264530289064963157507569861612948673702326507540305843556830845144470742979453946547899015520738361534628988759199748641145113940154534539818775453262688963129311220968303038658465790258784846759677427047794151246302947777449489906933250186470399660798890218035218608642881019130459098257182422713814006185934129977355115289444874704561056766143547053999767907222964203241196702396756209771576441224761301925355900901280569802742001' ) ; +test( macro , '-717897987691852588770249' , '22' , '681365581176156632412753534374262781125282012419825049087724194682872335055219639396310501297264530289064963157507569861612948673702326507540305843556830845144470742979453946547899015520738361534628988759199748641145113940154534539818775453262688963129311220968303038658465790258784846759677427047794151246302947777449489906933250186470399660798890218035218608642881019130459098257182422713814006185934129977355115289444874704561056766143547053999767907222964203241196702396756209771576441224761301925355900901280569802742001' ) ; +test( macro , '717897987691852588770249' , '24' , '351160503938693614343626853747071562171016188034295260095490111881784318374960146045355120758560422119505624375491533176393589903573845466689382216842197981277867514717013259791763929689440964343969395781792087124646063583944648684169111729145300510135702655848244592583122673432949987979858826614906829469635537237525614665196540272658828569629679791428934101079072719564710584542576589075082850692588439679596816834818341802539921621995225917260921044846812391894365530686773081140839348912145464664288336497209664739248364322768319800659209785240272285297767697234264001' ) ; +test( macro , '-717897987691852588770249' , '24' , '351160503938693614343626853747071562171016188034295260095490111881784318374960146045355120758560422119505624375491533176393589903573845466689382216842197981277867514717013259791763929689440964343969395781792087124646063583944648684169111729145300510135702655848244592583122673432949987979858826614906829469635537237525614665196540272658828569629679791428934101079072719564710584542576589075082850692588439679596816834818341802539921621995225917260921044846812391894365530686773081140839348912145464664288336497209664739248364322768319800659209785240272285297767697234264001' ) ; +test( macro , '717897987691852588770249' , '27' , '129925342856448988764251542089065045786155911790890516647657119087489042404899060228369392822075223183739765014052360206502536732276242266222695367972367328452765284427361172142362321443004910207800039177476242301577150613859831776093328430566500496443594413224371824361420410550048411417760224137393585174427565041635390932623375118187728586008978789234310569306311929614122033949249592316841971560046372431039697669234018577505272948749285774218193495971402810317470288145379703055809020802321420732619980008200661347545521210303094880943536506460031092224160192777095197322219385161928995729071382072812239062743558406558464517305710105484249' ) ; +test( macro , '-717897987691852588770249' , '27' , '-129925342856448988764251542089065045786155911790890516647657119087489042404899060228369392822075223183739765014052360206502536732276242266222695367972367328452765284427361172142362321443004910207800039177476242301577150613859831776093328430566500496443594413224371824361420410550048411417760224137393585174427565041635390932623375118187728586008978789234310569306311929614122033949249592316841971560046372431039697669234018577505272948749285774218193495971402810317470288145379703055809020802321420732619980008200661347545521210303094880943536506460031092224160192777095197322219385161928995729071382072812239062743558406558464517305710105484249' ) ; +test( macro , '717897987691852588770249' , '29' , '66960601081613218995545615402693600374639583627057873894478996761235534940521876203825851640372285281121028022306706156922783036648760227593129124026972625933013798555768937762460772142044797003957960219229519539565564116948220691395428662251667454449762970671596782912888080349684772071024984546225188460055852555657228531306371662448557023517396895942248714935653633379580289509781187157995620922388883890668691615375469973820302219060616733583757178470584754927697520205194864258128911605585342110346435691476086856952623133602717988980966508297658793357400697431392332924229866368079543112854041068400435054566433206423406557876970185985505776428441038078323222858222598473938385526462249' ) ; +test( macro , '-717897987691852588770249' , '29' , '-66960601081613218995545615402693600374639583627057873894478996761235534940521876203825851640372285281121028022306706156922783036648760227593129124026972625933013798555768937762460772142044797003957960219229519539565564116948220691395428662251667454449762970671596782912888080349684772071024984546225188460055852555657228531306371662448557023517396895942248714935653633379580289509781187157995620922388883890668691615375469973820302219060616733583757178470584754927697520205194864258128911605585342110346435691476086856952623133602717988980966508297658793357400697431392332924229866368079543112854041068400435054566433206423406557876970185985505776428441038078323222858222598473938385526462249' ) ; +test( macro , '717897987691852588770249' , '1234' , '240666810925796631497300464125793793876153875629096662520743987128655138300518806793333863505002370424150325835897522997035758513508393749421313311380386678245885529902936330574270897824424068780701595312024191583797781168159472099893770860328570371993646844140203799118143686616439077080118602046330501107174223757814456182746333086177504034894868587120939461313455507702811247120286468199645215838215144781536578745753923838005482894245501661797497042343390617151204343021554518498735362447358070369090432988690834865403291509113944458407089222159417866640525805032080821319406442026747974929325112928921447323232212274973452975883062343094212146738595192633791120734889354763869347495932575155161944862722200405955280366430399276362677049013925041871227530264219143440107033389736110114624783260190579707152045014476353193813168715289380838132597179842738854542064339183902073367485289715584943627672587668112192162491400086760878390153498140343600949752356890781346460139220027272654766196351251998753435700609187724419282733374517073505387635776141937057086008339977487598351396266355557385114078610220987097361567756363195532914764004598634407992908600646589647778700597919884751054929681098369460031512377150901578312180257824087931889292083387179002094560172630492173743471238348161722683402811331621904068461649853237649098667186022410987655766907338482317060412259815938817187300402820360378490149991171370482329371650505043884192332467954232225473438096361196485730615702706338896803459544893784510590248023379843299267561024474106199710926586300140256218142748793677805122624858592543944305974549597571554026676016225109087448889480206990407910658105566060532854331549685512672824252906121631110818833232354043403137418311925998804066986754875440423240222092764003746250623404175411263344414954113517360947070716557546634100780648355973690014553189027477234402720353402501541699079073208241754265407813302554719501911786154879576504690648777330790234360752380718909924776795870591070461878764685781345393089291677007084060723076292423331888969906994889802559722805557544432185305096822014262735051471669354024897723343139333199330147964590265703488059466191857192410897868609291384108526636429139154008874646743040881795937998168293882623621583556584500036772108578773075747899050834512563302362032542587715210166387236382275419681547020073143476402676839032589356933008399060939093631291937107000000043323532799137849647405096232083364392703455257640562906669605316805575467472071569944146598547468221559924113348400144610716847685364347467929073894879899123491301645104075537984420168183636199226629624957989433534137128744185230344994592856898029628268331117744171243766865397230810342464227680605486409079213386036803957679866952104779315664126405241076356017313310476722815126991777729855840510871727519397893209033487330193378894526790670497601404262388611693537246084432220039998668497909914891728825779959838738394310285580938434539221810042937887451215631212371491462951157863268559393019049906492412696634901678674798328369463166268199126370427527431576741235550771195727247585539256417952853329478914515539806021976444112084626581019338193239617668568672517993467174255845823702683834750228698628538106052353376750716489661771727612994518487692989696065706319916267876683157185246663635313221904866416368381426519462074273529104434353847460205734702566140847713395645548499357551950806690743433954202058581687009317012817649884159064284249335591683480037524895848927954651846952405664224327697084573143825212146169786019851375852570935645324673501437526819689862546523710166522763874255457046134768878318504847569562740775920029079242062671507739909787305724552670012633097279820790400444955953186180036141498111027556284782611831968632960254971585279229009517389124640521071182508552930150093115185298823230740659868195268121798981841121508518238922062146832778512233130516701388382270437021078314304384358232872632935033731255504313450018207186652992855974803423357233611324893304082721355054709451741004386686923054310723261481499154665026674935888222845457736324171023246366147102994195305848085588996476494973007973902151008585594112156233214360569556745482837925015827621067498561246812344514749188513286706401554080345967322077722072126008109427433431070325726521163012868148649582784383995723396360310319509595957738338411942892357400728388524308685812413893999404967999249813865349937751377717926369301101787921984260122186159989136656801540380770978320766045936205592959488163833618604355519117056970124007977963289037930079739906574432060855963578944486246793175242282673514112660912407087562188397053739993885193130818225601480302627529684348527769410385079008546741019828845532655444621234451156249631617457720152180989156738006670404506338571918208165921758803413253593685587469101580701192606017766650438994704981870117413061535622136601016979952697317238276873256779729419028069631432675219491767318800339045855442030264560075159056776340091166641523596359578961807101748144945138318607039052076486075699577782685718970588115246184745849474239861848227033647872319200256588719967644217877454602724612457063846122996574940120482768446762101146242787977449369937867250832112867230692912468970042855717280755106531667961937332446742078258774278002352847604203619178315262206430766732415004556722421674647346648829974839968356832918027747760706008251337997576672550889603071310089578634747901944072670071985016123486885045817879153495396347705516599056944513760289619758242073133217108261158438678792867348399912643882264938522086425924074531699941057823129668543509614970599670225949760759593973290456515031451150061095408009491932533974765354150005121720734711745252878859000575558573436139695813170049848899622852245653141171375285116196880631468001421360473881187149476805269342296424485310215470494796178401944348619754324798206578015187379609260920882768561974442771209643829629212007051116346637625763873106848673476948458383017883010996340518563860345530523780019175023658557801658436627673907676975971882109751635784820139654624656191522441490775749907596367211611579452627181067685977845460985237049896675479606151704752856005151770161591738112961723993454693092539303522485285732895462643804740701516376964927670122135657823916458074535855817547513841507607015010962514867231406668733574660708546812140757605323461188423370665178218323843285796646737709047020502755313516962625148241570458025214707284812497971943815765595261077725596928727447148413360293693704268976245064190940961850889245136042407154085469838297857292187347035492359540055492227822512458140269037567546119976309595685267059328503097802601274596051953728897555043442182432638912118214086596792857025735173692744450906559633901069848611000152694981799908562674080212673483483714535683816021391478836663467848746594481778215255545090822995407416235269774848665232107297962031453869358953402040347982467139283098108055610285820589613275368865515242210501491361858362122708451547647239066214844062386833772040444917284525202881555120247439897055373293814403955325754500816079489668326796664509455821614956472480002144936394671934338050270783459361214210050599756870439116283220868124998006625761895550396584389321270476762755086709308051601531689562716830791751872883137993455070471233464948461931211369790177531373113631239997994291418256714478265196669753238257830553539691807842745455955136875773828554605336260805640377757640862870194935776092004134130289520896834858656317913097532957724133151945092000859020920237096913664009534675855229755344172129957141641791984538395100720317980525185769142781585509930975604069100811643163009360481907738801078884830886276286316858755498443168347068032348883021378746194698784811802339515331441830238719175466597762050420975691354490653471436861965025398816127746666639354864324232964949049300538005293308845940271700888627199662903120034287206034687813252949705816491402178398645719387809539644872118409461401883654312922279080211009210189799876128819902719937084606802972639337531957278291820852311932551591955350790335928152884811433450537315845604917323956883583239480347219971438941586085711934485815121967398164101784083619826265891401802416571741345090544188799381856839432343498457496360597455526238460117589115787753968612657150077978004530794321967803330389249425352563744925321708518378671586645666604614530902858059020840074105043307623670946950043194604176031013849727052783428735689851667778432798381033674827978887751236650974118849759189503239625343304532523005839417475498961072873029640889256489519703706344292253527801297251124450502273288023521577486079679697498402526688946738210589004011833446500132651961861200853340654900269802660034733678942996167533210265105504648979731317667399933165040919109758988751189548962159739945527299915654716346246041095050960741515495587998776985363865506374140224005340645853795347072152325663672271845064723399857372941894460100333264447275387920605177410030429482678126703784114018103844023345892034742213333395468046660012665242882251447818527188389084106839211601891516465629590896364692175169015105701572123182161899801710734441225139364024469426754491100056297212476895075865513734972712990677136692220035091504362225897411284355159962673082264518469172649285965322881981348609178818294743174542244219819932183490365756919330710479957613508601495497295676950329757448944977362883166111823279769434700959568955927643656859063742327008267599164937006804048910677286568538933031439840564237461535941197796390759052457284051017778672694027120426633268111056448896881308374127555545225553090822535510692077989067554686838662757792829768851773704480230259292642841141429771977100764471997993102274545765814837384547498350869645999651843659166200886176115555346289903469340446739207010577645167542297460407137062960215028382415884570633157792532691792641314278905490923087079766067798937780659109451731519734592939579025164926515523248807352103381305168229367358321432773551392789398713507962778942820119469523225162863178680183911570348027961700553229115316563272964376101119188825605514991804081027954389921141273219285131032169547368944389824308436381941175515798111830481000043636844809228835704445068305252750582078049987152297826581119584963878880864201441342341314647264252390676175707582693479476352854352886370525502607349886832362596404647139600857534060227964743860211405500060294329186630176879724051222152101141867575359408008501674175606199047463432213378831599134528934108281929480497040842200684432006775368915613194065693056672838195707429303679749464784054705434213357415294902116744802057352193718342238545126703326661042546563491168121691269341550977021406438785288342043569889077634089317033122541296230748114388665029044499469546397108299753200706114193470635536895967048169021873576306364846257373205822028138269759764442484817509279075026743603019509097159849066563284407999202539936119877761212471543147933987133791650432393675308321559611393751092509456575599446737432047081189236910050329727334141146991725988700140584975269036834508080148636316737184199462112708124889925362377529178344014590919552819769657577672702978011641143673156015114065926314546589192090878523676668017033871729579063980669673546335286849239147941679867288782496042348838505520661208416542384402601836938516863582808398758530009389050063886699985783925267497452701039388970042411071173551559121683897134217799905956381777617760035612136975496448360169358472611166991247066660361258257792717955895802886807621142240955311727190733860080248699104145339409596193747533219052958194006816842395395133815227958447183027408201887154248055155515252489593725880002915429087346780489686173993006485543412786317161927405570384085201230519902078033355645726810161924247926196020315576428292022629241922920330634879366713250236205513546588717366123436426532878032863695637071735051269224304497931038322951508526569846253683590423751042200651378810558188601895181845187598166177418938407685219535673829472096697071612870362277436920342738049215807079089141509386167010651751786772439419974350420945450780317330425760939076658378846814831229353170269675745570687143370733413098798744099031911520221044007327256897909622230050896081391104380973572938318409605238511264413423963577109959485446578175113776603615777667633293449071495602382745493460804765597670064823587149295646560929042625803334777303751883329502685780494009410515987822344496036156411290474009548223625232450188758230491801781290987433426377664288677071271225318178134265723090953908487368210301890173799337794414289839164334384499838476694064042562380923392170814007209797114936223969923288492450317383650369779029731134714434936391643766311336738629884184770965675076449262359336759950385687723231779915621937147640435620959355327348891883061403815008875737737458441613654230046515389312374996035407943181440498220354304355266414125515658969508581407533490313522890987856883087879602650008064327529989955508937331955239874722401238624800305487314538069958888480061378318398494570408743929545890698144755401436645575305635886766888309290821752239252465276109182753977002117165726763101082508643896734872331680782581238479701159334042497390606376542941582331808271248759018721187949059390620081627947668715490802983617888543466920624132979650708704245244736734577571335364024219584348266021595514151130896017976378599765662306270194051912298827281348333359149495872248207397081180112660679500488646194492335713944553578485524340274065812575443967506816413669283541021458439360404721464264498869630723885583385346819805722244341238149657763492548458459521747402931332148061021522859079768700468052335856043104242388423745990751764752080395046941015982884875151539581000878641435603583824562615084914225729901628394177372130985466208762313918008648944381048427957163858317218102829834343833633544901126931143569398807905684970202348964194612275298885061923925145525774876352222523781858372282001957198274173098329010279847291113009852613678253123199322917136025127117154756978089704874006129913373888341731677935563427208491533468982839070555222905600716758864558055015455443368534003989339266991496574749087456141207063618250411241902141164015442390891110956633395370303166431966298954503533779086717784121585666343471909838926386599682823714314774096149220614537617503626682222182615668880281733598355987215201453863347388340090921698878129884976286937514133684565405410347549261471700192037533086493793953508999824708254409983739425082813111045769624535087578645427477116700686622592971553298713236705554924227547844058030634294043977065066654988266829751374105278390824121371044031181008428048205223923243651098135005092948487395324912456217052331950187603567228183420265978222659169332375919592362911152011838702189535847577763714114425190514299564739774757564037598485982927812147173140747827430978393017504243724684098500167685714749941846120533181791178220367836024729909146669128836477415610531307171288054524223649506374655503312084693854015857030163886937766181098823169023181572231477404931598733389102380674704591127778547890467262756173574558080654790642471369332640892203135294330237246272074631760017202872694312963325722611729402358297429077465902624984852437593479190867737167006749083009854670384065327519801302083242691293439616132893416660268947919201637739258769771607084518793369204312869826490193716352930819450570212844033786667236068075375941453964216107149779664323628747272497685794971849040594638565097670630010455310220514277785818284186463200618441748478788591987616681646033755321959251953987293706031605827100615706433378711983560088154239750803537349035070283423517350889381534886372817293834165533055835445256823942303051891255521175486827650886133221071633589921707722114526609240665260264492305806982431844042679579783582551609283040246523428581845720374540737897789979786180180579009825935175015723992444590406056732840128165816199908483281974729283159640149821021618151095300252407271226953926728439712096665201813821962143089789720545389677608391629805852569311950851389264151131224953921752017840922075938093985062781184787646406285721393870539756657767030925030053022461302204093227393963491255643017235236360807076699601286868224950349231983608760919780584266842953210668067889511328397050532424837545546721403509681669483144282692231815703147470176852156718005759125673967988457229048839619145997585270368102435074595029990094324102493737818970275642575407600875588537013441673454455861497898836728065291478392070865090189959309947742444986923526745948057899128034232868017159368271694223700039666236730894705407231009389857561190687139334624948051152611495443371208819706799382667564652218904459544669746954713753183826624347921466724650586905939136598547335012617702607014113794591546834254696563524548343500981096958481191991323022742758572702244370470464413665803392605126994943740602380225661619992335366449312159389272554547255369597536289533017879667844179574297853538262473990737634615419535991688218597561417950967595509116168022993443293531295365421530990278428579503023488689022645550899786226625323338180515144059213727584521215321722089993299184212218054163465777614637889378688685803879328452385390951350548924489120271418100487678768868428228212387228503799518279495595264908243662176970443975028752029355061454695157141184819938299926947437018478957044395662391617808375468649007600370172940115843761412592237460566795143736348519450988859101853660296226210668299394693230720927858276964586740548558363904065214488088226818002415057852903743836014126022876012254536312345404960062753442098036019060443237049994545797682297235099797863438436593216207403158412477892107575374686442179451430350704320791891708254315536860892520182634206456725864813704568320562591782038671811141093425946482688159934297090882997856490197026962532578625837338928755211465291529523683918247460452910194710972484675179153177104097104259910518268539520304289744878391349554947980543388976876106090112798575825073980240911865137171222653996955929253877954855333315507869969643594964229605539468134884245036416894025484737992830203554155653978459691014928198149428959910752989307071317377965664300905553289327994588549850950284644007080706241112418494862133916539297959029131158062514264923394985650739154621700845808120916284537924609624030443114218948985698358239949762635499673659005627824880546112922811671183977198549908295009183673236341667156736650377361061056737332063403410177715559814144656394550604447538215779823278536104712565326761405690441339115296210030702222989203489845948281369398678770779363415632864910236794328437692624022552548328392842615492736782204301768665965365930746241254165608754964908497067499545759985298460945344650446835792542841082131510112938961881927693248231120221756864036707731726487325938077272576650743798183544800139162905157445216386915371613768879264078891644381253089581539609558090983181521395649500355526541811118635730569046931361684921810261207373485062516626873625896376115969793729107031511621422445382850451172374270682693053568648031104008891817274572963359437128249991844891468313131004074851541435190896882353764875480896554449408432067645595533709041759932190996007431454089967656531249566609171679862639011907239936167049017771581006836981063193553563613522749187290893357797646951653930745484252566662895227296365515537656517639786730623586151975310765480540289532531601949395336304927562830700960037825411985561643821347883034995939999815320371904489018486314948455952559263146409710068471713259502647267478001977847611896061825935753950424233795977832748562746151379388667659849662204204370582406208836832264614999774576849343391530101628342373099807709619251009982948420174200692400576186926512032915961194241973580587141742017725523177905799155980685544702998175691236820149021743148908860959473955326805004843786317283255788228027783973963775307044681831745418957729607897287660450576165731690039127804414511168095180765758455897687743007250305015608713824106966239837615772559788333446260389735144551194566097856159222619045281993121036130544888850748533209105902290817972040683491743672438537427407555076754103740470470519996488106893988963679893402926779777315510136748292964498716616387480928391333727613516511458687653975670170800714203116160576633121381876444223289818335512535646590900478008372238152919598466400554972447258395277820369798167170321756327919408066285581702239995204777287480387161536727459448442509762680258106041535327214632697312513497219121039425133532472242095253942361432227842877340347922588175651734262339738440446492272637919578131157514237627203984698773116783796765212222546280365874311759355831644675241116934493294688108999510961605213084570721687715849450396639049106141887860856148954550750471455629931627105000620532269066137825781316017603220973433261333991034567108467510498624962642488699169465874363399488868154638948242465984577292633553735556852420099382096738662832127104872725881996505036610995572650123609241043781086883738614012464955179446535377004978611118562176293167638027449612637695085975726247778121052711332364566219200112876185845464416120363602708440087210524126961712756204182189211477418943839212507448032291316566737926226650207942465800405168687099249273393069060646360798873617365864441322829730079901581793477840461467290903920089953743513557150545457465001493281676469801544541444627173505187869563691796834575745981341826378231855942604285683577230974772727095310465725871392788376171498988325165587658459242478209763818343931715246275249033847544355256625769712507232847344158590312425822454135201105768865080501413412277647350979797597165322409320114702032426981288520271353130012171484594553991124856728942246176555811779216453894275972582641573921036716718553318429096852951098778309232081644343337035691135410384601765183315931601762146264393426528312050751636769212945201832547953844492774251628393141343106226795356284876139469403273284444586014152400694986734961594079272858809061960949904448174959103909564433761703907276125412354892775335876415272646526126192989549857858930065881045254576136386486138517438556555308338685607210816131204906145887848650892144421256413442786428159719389978047391109134257790046140655520758094636923303925473166438103154754510983147606737926330885845999568999353851276202586739695128035976057952375907156376600975164048300965313860942704588148212587962879654957903805340177854247259711308541551603503567837780970461451995771047865665783511661730311276567901518165972850520986636796137347177492175264790310493561351654339295597668712467832251955744640272444007155359474048804304065788982945928352532307632627576930665303670890426050955025688528627309916477125616012512925234970728304675990574496468777227069085170298364495254489068034897491392933909636369331527636742699013284766902371352506091776350995292002731244023865757006858780469293597018620342571723772179977093125789699475496105523743724832176529540068144093345882387953940656084217900519955099464578748726508611651485516665622261135808230656113185935758123090731435124996047414425279597354359574378856570913306377601759010157157490619551740940998388274502844305091669547119876233489292751989516078837544062423667004292912251992330172087279616497346882233046859736081564275972335625958254887035338484716664189318473872485695845339136606272315059741608927734938768821670382249825317380542046557829438761966527834167384855716224439462405323266438326536377961771823507569459750423103138290848070089339750740358977330113970497456562209782789816756431729085281442325129945131381329920983439892601873489278892739994343671536564003094063601168102358102060511646184488836555280866265439572865577916493719868641514516664261116535122724396782278955528978764063014169535540654859120299172230842177436210545014476071475600058330214022044195137271228882609806962913480150447375885450575324750279251402851061941914287093134507336790423199888450218824466412490267199774666086468918833734387337497335144015840693004008549890781493464193192460097751739334161380017888359443004786038046374825235310856409598367802175188078401652900630883502414596986630872311085261238505708931003788068325087199867279768495262956883650359670743609352716895125122349956601558456299500231541599105539315180746997839621279353395686142155700423447977269222089468138684489318419154262504409821198761325705465328527695537157420782082354078175035903462010430134986159387812646272750962009925857083492829567970790332465325289206689049063764087436241829439763284627544144883357167770069639466367471860398862788075053410539365200406384307372970511564096399841314435051459484946899992507044444836354985269418541366246616097379154763081470481918007310765539689731840724466167823996718641044946480569623102013135147003272739284086213587006083417239308558779132947952435879189833909533561483821067431049890268359556509392353401539333788301678145208658937272723188794578112686709909491108016192828130703303524780820687044001344046854958188080136806595303293237463476504011920463204562731540166037081435695648333493988584792808470211132901764592133330530980096778425332932212735837577215893864016217901368345444882023496497506785629435246203379531538457462340173890359032774939687844147198184957025212849427638320378720167398909916718917724985900920192030214246493573397230398365110417352778733527631095124650992710118667623539554692566783429394136221716928121159143717386855853984409631021985053790618629812165917024946228153251349408767853192940114553370189242241369551007994010028856078603666746043453656590118761983375709654169884658816846754918144899815282484040063735003947309015844941305847294632029009712335365639096408778574091927109550299652681981479767150215206743081866358869114610816772333138477417708074433283279303532825808874057642839515755856791048739006988848065926839028819778433988669939558066650036824490486884666934262276513630175045822348774690095228540301868104997197326328212569850060274724529767914857676420841256961349265084840795236300841400994212367633572991161913691050780025455347823394988202788101768864502813390202856859126972599856839543990159365234030538827346354126800097285185924007284964690706128142631879645458992663766048427439769100788649351932617465546902567125707865370814068813860587244367746419075848390538678832569432671471062986454254204755506074801888029161552920066319891531957945773273477214975812022453730709392776469844678661783580960787047698418293376308118134867752848112612486402593064704496634807094220104296663754040709636340404817455410880891536467187831977983640996849951650389805873899168181319390054320789631028913388232046260307268390249991322854583613804193446810865918674501358892715568404694072865540886401726893184784714501860380117604550931574048136798023258513596201002070068810852653249151000051456727886861808962487581377647552163976398924881561622659417081146106665646072744668498044426052522804636851043773834785399184804744620318835737108437901882030516095623037578335280017150548691261342926746197516595593226496924022045173580598481046504353473187019615999528239277638114058438415735028254220037867803763085393466530484468108461280119649653140359265924176687880191882252356096667279055875924399802049955390469540917907333623282921659561338713671919571784854447264751582461161121608220632552535539574811239491907977080055351867435082725503419467499187011802283659752233542349669207811280081047966667824818523441274660618920625130919101015888482026053951969439894711895548441586107366790258898741612638693297959237922447608589158095992135723952461923994687823650465896764883667052137155194576002906847524103760645387180490146865124538922972372819826875923731390254431637342915817358546048808767134126047097505431381328118991195760134187889545091844395783645096128280496313025953970498006602276712809536127205652543720418045709969402565206329936420465311999349099261495766939883753463147455929093001269063984253071712863023553747896664603639453734132845027589712104259060427174009223665700657893713650553018587778453891754253151543028835750947685193000377825566600933648482508779760768199662372049766387638985631992100720003474151721375703211133912952407983355924232680111677587187241552829353741946423917448296404338549819202048685814597880693735805572741960307139515943152276365487150482922514045581253293812970267225644349179074560531877646062461313500613224648092931335926366379056886844623491593907009953911828052093623916145953431995773150699039217050325951921320241782503621522257361377451082489605564890402097866814491505081488150019983296575499211151451554027366425864934924114301930078755148355932268605394003602081353485970925801149654213968714040128138987924299507789192344817388231539104117379617054404077042219865132840948934920651343894411168095993753287475595036673571212995962900134686846347787877484062299240326083529798662229832353356661104190733708040289237334415143318464007457016765783370725688178760684007631997290723697308539152704845065598303686071945621892934023531809446634995403272958391058435649685487542623361855343322082521933633876027950702259029069185899906864695622617535870612593631958372152800863964775616329570345552185613467025464216600056930056849030169878244758163240995914072907600096163507820815348734058513665059114508068178367617804243332753749239571295040855080590873111579164335770288383740923440579367884707497712423043388562508100574697765074001' ) ; +test( macro , '-717897987691852588770249' , '1234' , '240666810925796631497300464125793793876153875629096662520743987128655138300518806793333863505002370424150325835897522997035758513508393749421313311380386678245885529902936330574270897824424068780701595312024191583797781168159472099893770860328570371993646844140203799118143686616439077080118602046330501107174223757814456182746333086177504034894868587120939461313455507702811247120286468199645215838215144781536578745753923838005482894245501661797497042343390617151204343021554518498735362447358070369090432988690834865403291509113944458407089222159417866640525805032080821319406442026747974929325112928921447323232212274973452975883062343094212146738595192633791120734889354763869347495932575155161944862722200405955280366430399276362677049013925041871227530264219143440107033389736110114624783260190579707152045014476353193813168715289380838132597179842738854542064339183902073367485289715584943627672587668112192162491400086760878390153498140343600949752356890781346460139220027272654766196351251998753435700609187724419282733374517073505387635776141937057086008339977487598351396266355557385114078610220987097361567756363195532914764004598634407992908600646589647778700597919884751054929681098369460031512377150901578312180257824087931889292083387179002094560172630492173743471238348161722683402811331621904068461649853237649098667186022410987655766907338482317060412259815938817187300402820360378490149991171370482329371650505043884192332467954232225473438096361196485730615702706338896803459544893784510590248023379843299267561024474106199710926586300140256218142748793677805122624858592543944305974549597571554026676016225109087448889480206990407910658105566060532854331549685512672824252906121631110818833232354043403137418311925998804066986754875440423240222092764003746250623404175411263344414954113517360947070716557546634100780648355973690014553189027477234402720353402501541699079073208241754265407813302554719501911786154879576504690648777330790234360752380718909924776795870591070461878764685781345393089291677007084060723076292423331888969906994889802559722805557544432185305096822014262735051471669354024897723343139333199330147964590265703488059466191857192410897868609291384108526636429139154008874646743040881795937998168293882623621583556584500036772108578773075747899050834512563302362032542587715210166387236382275419681547020073143476402676839032589356933008399060939093631291937107000000043323532799137849647405096232083364392703455257640562906669605316805575467472071569944146598547468221559924113348400144610716847685364347467929073894879899123491301645104075537984420168183636199226629624957989433534137128744185230344994592856898029628268331117744171243766865397230810342464227680605486409079213386036803957679866952104779315664126405241076356017313310476722815126991777729855840510871727519397893209033487330193378894526790670497601404262388611693537246084432220039998668497909914891728825779959838738394310285580938434539221810042937887451215631212371491462951157863268559393019049906492412696634901678674798328369463166268199126370427527431576741235550771195727247585539256417952853329478914515539806021976444112084626581019338193239617668568672517993467174255845823702683834750228698628538106052353376750716489661771727612994518487692989696065706319916267876683157185246663635313221904866416368381426519462074273529104434353847460205734702566140847713395645548499357551950806690743433954202058581687009317012817649884159064284249335591683480037524895848927954651846952405664224327697084573143825212146169786019851375852570935645324673501437526819689862546523710166522763874255457046134768878318504847569562740775920029079242062671507739909787305724552670012633097279820790400444955953186180036141498111027556284782611831968632960254971585279229009517389124640521071182508552930150093115185298823230740659868195268121798981841121508518238922062146832778512233130516701388382270437021078314304384358232872632935033731255504313450018207186652992855974803423357233611324893304082721355054709451741004386686923054310723261481499154665026674935888222845457736324171023246366147102994195305848085588996476494973007973902151008585594112156233214360569556745482837925015827621067498561246812344514749188513286706401554080345967322077722072126008109427433431070325726521163012868148649582784383995723396360310319509595957738338411942892357400728388524308685812413893999404967999249813865349937751377717926369301101787921984260122186159989136656801540380770978320766045936205592959488163833618604355519117056970124007977963289037930079739906574432060855963578944486246793175242282673514112660912407087562188397053739993885193130818225601480302627529684348527769410385079008546741019828845532655444621234451156249631617457720152180989156738006670404506338571918208165921758803413253593685587469101580701192606017766650438994704981870117413061535622136601016979952697317238276873256779729419028069631432675219491767318800339045855442030264560075159056776340091166641523596359578961807101748144945138318607039052076486075699577782685718970588115246184745849474239861848227033647872319200256588719967644217877454602724612457063846122996574940120482768446762101146242787977449369937867250832112867230692912468970042855717280755106531667961937332446742078258774278002352847604203619178315262206430766732415004556722421674647346648829974839968356832918027747760706008251337997576672550889603071310089578634747901944072670071985016123486885045817879153495396347705516599056944513760289619758242073133217108261158438678792867348399912643882264938522086425924074531699941057823129668543509614970599670225949760759593973290456515031451150061095408009491932533974765354150005121720734711745252878859000575558573436139695813170049848899622852245653141171375285116196880631468001421360473881187149476805269342296424485310215470494796178401944348619754324798206578015187379609260920882768561974442771209643829629212007051116346637625763873106848673476948458383017883010996340518563860345530523780019175023658557801658436627673907676975971882109751635784820139654624656191522441490775749907596367211611579452627181067685977845460985237049896675479606151704752856005151770161591738112961723993454693092539303522485285732895462643804740701516376964927670122135657823916458074535855817547513841507607015010962514867231406668733574660708546812140757605323461188423370665178218323843285796646737709047020502755313516962625148241570458025214707284812497971943815765595261077725596928727447148413360293693704268976245064190940961850889245136042407154085469838297857292187347035492359540055492227822512458140269037567546119976309595685267059328503097802601274596051953728897555043442182432638912118214086596792857025735173692744450906559633901069848611000152694981799908562674080212673483483714535683816021391478836663467848746594481778215255545090822995407416235269774848665232107297962031453869358953402040347982467139283098108055610285820589613275368865515242210501491361858362122708451547647239066214844062386833772040444917284525202881555120247439897055373293814403955325754500816079489668326796664509455821614956472480002144936394671934338050270783459361214210050599756870439116283220868124998006625761895550396584389321270476762755086709308051601531689562716830791751872883137993455070471233464948461931211369790177531373113631239997994291418256714478265196669753238257830553539691807842745455955136875773828554605336260805640377757640862870194935776092004134130289520896834858656317913097532957724133151945092000859020920237096913664009534675855229755344172129957141641791984538395100720317980525185769142781585509930975604069100811643163009360481907738801078884830886276286316858755498443168347068032348883021378746194698784811802339515331441830238719175466597762050420975691354490653471436861965025398816127746666639354864324232964949049300538005293308845940271700888627199662903120034287206034687813252949705816491402178398645719387809539644872118409461401883654312922279080211009210189799876128819902719937084606802972639337531957278291820852311932551591955350790335928152884811433450537315845604917323956883583239480347219971438941586085711934485815121967398164101784083619826265891401802416571741345090544188799381856839432343498457496360597455526238460117589115787753968612657150077978004530794321967803330389249425352563744925321708518378671586645666604614530902858059020840074105043307623670946950043194604176031013849727052783428735689851667778432798381033674827978887751236650974118849759189503239625343304532523005839417475498961072873029640889256489519703706344292253527801297251124450502273288023521577486079679697498402526688946738210589004011833446500132651961861200853340654900269802660034733678942996167533210265105504648979731317667399933165040919109758988751189548962159739945527299915654716346246041095050960741515495587998776985363865506374140224005340645853795347072152325663672271845064723399857372941894460100333264447275387920605177410030429482678126703784114018103844023345892034742213333395468046660012665242882251447818527188389084106839211601891516465629590896364692175169015105701572123182161899801710734441225139364024469426754491100056297212476895075865513734972712990677136692220035091504362225897411284355159962673082264518469172649285965322881981348609178818294743174542244219819932183490365756919330710479957613508601495497295676950329757448944977362883166111823279769434700959568955927643656859063742327008267599164937006804048910677286568538933031439840564237461535941197796390759052457284051017778672694027120426633268111056448896881308374127555545225553090822535510692077989067554686838662757792829768851773704480230259292642841141429771977100764471997993102274545765814837384547498350869645999651843659166200886176115555346289903469340446739207010577645167542297460407137062960215028382415884570633157792532691792641314278905490923087079766067798937780659109451731519734592939579025164926515523248807352103381305168229367358321432773551392789398713507962778942820119469523225162863178680183911570348027961700553229115316563272964376101119188825605514991804081027954389921141273219285131032169547368944389824308436381941175515798111830481000043636844809228835704445068305252750582078049987152297826581119584963878880864201441342341314647264252390676175707582693479476352854352886370525502607349886832362596404647139600857534060227964743860211405500060294329186630176879724051222152101141867575359408008501674175606199047463432213378831599134528934108281929480497040842200684432006775368915613194065693056672838195707429303679749464784054705434213357415294902116744802057352193718342238545126703326661042546563491168121691269341550977021406438785288342043569889077634089317033122541296230748114388665029044499469546397108299753200706114193470635536895967048169021873576306364846257373205822028138269759764442484817509279075026743603019509097159849066563284407999202539936119877761212471543147933987133791650432393675308321559611393751092509456575599446737432047081189236910050329727334141146991725988700140584975269036834508080148636316737184199462112708124889925362377529178344014590919552819769657577672702978011641143673156015114065926314546589192090878523676668017033871729579063980669673546335286849239147941679867288782496042348838505520661208416542384402601836938516863582808398758530009389050063886699985783925267497452701039388970042411071173551559121683897134217799905956381777617760035612136975496448360169358472611166991247066660361258257792717955895802886807621142240955311727190733860080248699104145339409596193747533219052958194006816842395395133815227958447183027408201887154248055155515252489593725880002915429087346780489686173993006485543412786317161927405570384085201230519902078033355645726810161924247926196020315576428292022629241922920330634879366713250236205513546588717366123436426532878032863695637071735051269224304497931038322951508526569846253683590423751042200651378810558188601895181845187598166177418938407685219535673829472096697071612870362277436920342738049215807079089141509386167010651751786772439419974350420945450780317330425760939076658378846814831229353170269675745570687143370733413098798744099031911520221044007327256897909622230050896081391104380973572938318409605238511264413423963577109959485446578175113776603615777667633293449071495602382745493460804765597670064823587149295646560929042625803334777303751883329502685780494009410515987822344496036156411290474009548223625232450188758230491801781290987433426377664288677071271225318178134265723090953908487368210301890173799337794414289839164334384499838476694064042562380923392170814007209797114936223969923288492450317383650369779029731134714434936391643766311336738629884184770965675076449262359336759950385687723231779915621937147640435620959355327348891883061403815008875737737458441613654230046515389312374996035407943181440498220354304355266414125515658969508581407533490313522890987856883087879602650008064327529989955508937331955239874722401238624800305487314538069958888480061378318398494570408743929545890698144755401436645575305635886766888309290821752239252465276109182753977002117165726763101082508643896734872331680782581238479701159334042497390606376542941582331808271248759018721187949059390620081627947668715490802983617888543466920624132979650708704245244736734577571335364024219584348266021595514151130896017976378599765662306270194051912298827281348333359149495872248207397081180112660679500488646194492335713944553578485524340274065812575443967506816413669283541021458439360404721464264498869630723885583385346819805722244341238149657763492548458459521747402931332148061021522859079768700468052335856043104242388423745990751764752080395046941015982884875151539581000878641435603583824562615084914225729901628394177372130985466208762313918008648944381048427957163858317218102829834343833633544901126931143569398807905684970202348964194612275298885061923925145525774876352222523781858372282001957198274173098329010279847291113009852613678253123199322917136025127117154756978089704874006129913373888341731677935563427208491533468982839070555222905600716758864558055015455443368534003989339266991496574749087456141207063618250411241902141164015442390891110956633395370303166431966298954503533779086717784121585666343471909838926386599682823714314774096149220614537617503626682222182615668880281733598355987215201453863347388340090921698878129884976286937514133684565405410347549261471700192037533086493793953508999824708254409983739425082813111045769624535087578645427477116700686622592971553298713236705554924227547844058030634294043977065066654988266829751374105278390824121371044031181008428048205223923243651098135005092948487395324912456217052331950187603567228183420265978222659169332375919592362911152011838702189535847577763714114425190514299564739774757564037598485982927812147173140747827430978393017504243724684098500167685714749941846120533181791178220367836024729909146669128836477415610531307171288054524223649506374655503312084693854015857030163886937766181098823169023181572231477404931598733389102380674704591127778547890467262756173574558080654790642471369332640892203135294330237246272074631760017202872694312963325722611729402358297429077465902624984852437593479190867737167006749083009854670384065327519801302083242691293439616132893416660268947919201637739258769771607084518793369204312869826490193716352930819450570212844033786667236068075375941453964216107149779664323628747272497685794971849040594638565097670630010455310220514277785818284186463200618441748478788591987616681646033755321959251953987293706031605827100615706433378711983560088154239750803537349035070283423517350889381534886372817293834165533055835445256823942303051891255521175486827650886133221071633589921707722114526609240665260264492305806982431844042679579783582551609283040246523428581845720374540737897789979786180180579009825935175015723992444590406056732840128165816199908483281974729283159640149821021618151095300252407271226953926728439712096665201813821962143089789720545389677608391629805852569311950851389264151131224953921752017840922075938093985062781184787646406285721393870539756657767030925030053022461302204093227393963491255643017235236360807076699601286868224950349231983608760919780584266842953210668067889511328397050532424837545546721403509681669483144282692231815703147470176852156718005759125673967988457229048839619145997585270368102435074595029990094324102493737818970275642575407600875588537013441673454455861497898836728065291478392070865090189959309947742444986923526745948057899128034232868017159368271694223700039666236730894705407231009389857561190687139334624948051152611495443371208819706799382667564652218904459544669746954713753183826624347921466724650586905939136598547335012617702607014113794591546834254696563524548343500981096958481191991323022742758572702244370470464413665803392605126994943740602380225661619992335366449312159389272554547255369597536289533017879667844179574297853538262473990737634615419535991688218597561417950967595509116168022993443293531295365421530990278428579503023488689022645550899786226625323338180515144059213727584521215321722089993299184212218054163465777614637889378688685803879328452385390951350548924489120271418100487678768868428228212387228503799518279495595264908243662176970443975028752029355061454695157141184819938299926947437018478957044395662391617808375468649007600370172940115843761412592237460566795143736348519450988859101853660296226210668299394693230720927858276964586740548558363904065214488088226818002415057852903743836014126022876012254536312345404960062753442098036019060443237049994545797682297235099797863438436593216207403158412477892107575374686442179451430350704320791891708254315536860892520182634206456725864813704568320562591782038671811141093425946482688159934297090882997856490197026962532578625837338928755211465291529523683918247460452910194710972484675179153177104097104259910518268539520304289744878391349554947980543388976876106090112798575825073980240911865137171222653996955929253877954855333315507869969643594964229605539468134884245036416894025484737992830203554155653978459691014928198149428959910752989307071317377965664300905553289327994588549850950284644007080706241112418494862133916539297959029131158062514264923394985650739154621700845808120916284537924609624030443114218948985698358239949762635499673659005627824880546112922811671183977198549908295009183673236341667156736650377361061056737332063403410177715559814144656394550604447538215779823278536104712565326761405690441339115296210030702222989203489845948281369398678770779363415632864910236794328437692624022552548328392842615492736782204301768665965365930746241254165608754964908497067499545759985298460945344650446835792542841082131510112938961881927693248231120221756864036707731726487325938077272576650743798183544800139162905157445216386915371613768879264078891644381253089581539609558090983181521395649500355526541811118635730569046931361684921810261207373485062516626873625896376115969793729107031511621422445382850451172374270682693053568648031104008891817274572963359437128249991844891468313131004074851541435190896882353764875480896554449408432067645595533709041759932190996007431454089967656531249566609171679862639011907239936167049017771581006836981063193553563613522749187290893357797646951653930745484252566662895227296365515537656517639786730623586151975310765480540289532531601949395336304927562830700960037825411985561643821347883034995939999815320371904489018486314948455952559263146409710068471713259502647267478001977847611896061825935753950424233795977832748562746151379388667659849662204204370582406208836832264614999774576849343391530101628342373099807709619251009982948420174200692400576186926512032915961194241973580587141742017725523177905799155980685544702998175691236820149021743148908860959473955326805004843786317283255788228027783973963775307044681831745418957729607897287660450576165731690039127804414511168095180765758455897687743007250305015608713824106966239837615772559788333446260389735144551194566097856159222619045281993121036130544888850748533209105902290817972040683491743672438537427407555076754103740470470519996488106893988963679893402926779777315510136748292964498716616387480928391333727613516511458687653975670170800714203116160576633121381876444223289818335512535646590900478008372238152919598466400554972447258395277820369798167170321756327919408066285581702239995204777287480387161536727459448442509762680258106041535327214632697312513497219121039425133532472242095253942361432227842877340347922588175651734262339738440446492272637919578131157514237627203984698773116783796765212222546280365874311759355831644675241116934493294688108999510961605213084570721687715849450396639049106141887860856148954550750471455629931627105000620532269066137825781316017603220973433261333991034567108467510498624962642488699169465874363399488868154638948242465984577292633553735556852420099382096738662832127104872725881996505036610995572650123609241043781086883738614012464955179446535377004978611118562176293167638027449612637695085975726247778121052711332364566219200112876185845464416120363602708440087210524126961712756204182189211477418943839212507448032291316566737926226650207942465800405168687099249273393069060646360798873617365864441322829730079901581793477840461467290903920089953743513557150545457465001493281676469801544541444627173505187869563691796834575745981341826378231855942604285683577230974772727095310465725871392788376171498988325165587658459242478209763818343931715246275249033847544355256625769712507232847344158590312425822454135201105768865080501413412277647350979797597165322409320114702032426981288520271353130012171484594553991124856728942246176555811779216453894275972582641573921036716718553318429096852951098778309232081644343337035691135410384601765183315931601762146264393426528312050751636769212945201832547953844492774251628393141343106226795356284876139469403273284444586014152400694986734961594079272858809061960949904448174959103909564433761703907276125412354892775335876415272646526126192989549857858930065881045254576136386486138517438556555308338685607210816131204906145887848650892144421256413442786428159719389978047391109134257790046140655520758094636923303925473166438103154754510983147606737926330885845999568999353851276202586739695128035976057952375907156376600975164048300965313860942704588148212587962879654957903805340177854247259711308541551603503567837780970461451995771047865665783511661730311276567901518165972850520986636796137347177492175264790310493561351654339295597668712467832251955744640272444007155359474048804304065788982945928352532307632627576930665303670890426050955025688528627309916477125616012512925234970728304675990574496468777227069085170298364495254489068034897491392933909636369331527636742699013284766902371352506091776350995292002731244023865757006858780469293597018620342571723772179977093125789699475496105523743724832176529540068144093345882387953940656084217900519955099464578748726508611651485516665622261135808230656113185935758123090731435124996047414425279597354359574378856570913306377601759010157157490619551740940998388274502844305091669547119876233489292751989516078837544062423667004292912251992330172087279616497346882233046859736081564275972335625958254887035338484716664189318473872485695845339136606272315059741608927734938768821670382249825317380542046557829438761966527834167384855716224439462405323266438326536377961771823507569459750423103138290848070089339750740358977330113970497456562209782789816756431729085281442325129945131381329920983439892601873489278892739994343671536564003094063601168102358102060511646184488836555280866265439572865577916493719868641514516664261116535122724396782278955528978764063014169535540654859120299172230842177436210545014476071475600058330214022044195137271228882609806962913480150447375885450575324750279251402851061941914287093134507336790423199888450218824466412490267199774666086468918833734387337497335144015840693004008549890781493464193192460097751739334161380017888359443004786038046374825235310856409598367802175188078401652900630883502414596986630872311085261238505708931003788068325087199867279768495262956883650359670743609352716895125122349956601558456299500231541599105539315180746997839621279353395686142155700423447977269222089468138684489318419154262504409821198761325705465328527695537157420782082354078175035903462010430134986159387812646272750962009925857083492829567970790332465325289206689049063764087436241829439763284627544144883357167770069639466367471860398862788075053410539365200406384307372970511564096399841314435051459484946899992507044444836354985269418541366246616097379154763081470481918007310765539689731840724466167823996718641044946480569623102013135147003272739284086213587006083417239308558779132947952435879189833909533561483821067431049890268359556509392353401539333788301678145208658937272723188794578112686709909491108016192828130703303524780820687044001344046854958188080136806595303293237463476504011920463204562731540166037081435695648333493988584792808470211132901764592133330530980096778425332932212735837577215893864016217901368345444882023496497506785629435246203379531538457462340173890359032774939687844147198184957025212849427638320378720167398909916718917724985900920192030214246493573397230398365110417352778733527631095124650992710118667623539554692566783429394136221716928121159143717386855853984409631021985053790618629812165917024946228153251349408767853192940114553370189242241369551007994010028856078603666746043453656590118761983375709654169884658816846754918144899815282484040063735003947309015844941305847294632029009712335365639096408778574091927109550299652681981479767150215206743081866358869114610816772333138477417708074433283279303532825808874057642839515755856791048739006988848065926839028819778433988669939558066650036824490486884666934262276513630175045822348774690095228540301868104997197326328212569850060274724529767914857676420841256961349265084840795236300841400994212367633572991161913691050780025455347823394988202788101768864502813390202856859126972599856839543990159365234030538827346354126800097285185924007284964690706128142631879645458992663766048427439769100788649351932617465546902567125707865370814068813860587244367746419075848390538678832569432671471062986454254204755506074801888029161552920066319891531957945773273477214975812022453730709392776469844678661783580960787047698418293376308118134867752848112612486402593064704496634807094220104296663754040709636340404817455410880891536467187831977983640996849951650389805873899168181319390054320789631028913388232046260307268390249991322854583613804193446810865918674501358892715568404694072865540886401726893184784714501860380117604550931574048136798023258513596201002070068810852653249151000051456727886861808962487581377647552163976398924881561622659417081146106665646072744668498044426052522804636851043773834785399184804744620318835737108437901882030516095623037578335280017150548691261342926746197516595593226496924022045173580598481046504353473187019615999528239277638114058438415735028254220037867803763085393466530484468108461280119649653140359265924176687880191882252356096667279055875924399802049955390469540917907333623282921659561338713671919571784854447264751582461161121608220632552535539574811239491907977080055351867435082725503419467499187011802283659752233542349669207811280081047966667824818523441274660618920625130919101015888482026053951969439894711895548441586107366790258898741612638693297959237922447608589158095992135723952461923994687823650465896764883667052137155194576002906847524103760645387180490146865124538922972372819826875923731390254431637342915817358546048808767134126047097505431381328118991195760134187889545091844395783645096128280496313025953970498006602276712809536127205652543720418045709969402565206329936420465311999349099261495766939883753463147455929093001269063984253071712863023553747896664603639453734132845027589712104259060427174009223665700657893713650553018587778453891754253151543028835750947685193000377825566600933648482508779760768199662372049766387638985631992100720003474151721375703211133912952407983355924232680111677587187241552829353741946423917448296404338549819202048685814597880693735805572741960307139515943152276365487150482922514045581253293812970267225644349179074560531877646062461313500613224648092931335926366379056886844623491593907009953911828052093623916145953431995773150699039217050325951921320241782503621522257361377451082489605564890402097866814491505081488150019983296575499211151451554027366425864934924114301930078755148355932268605394003602081353485970925801149654213968714040128138987924299507789192344817388231539104117379617054404077042219865132840948934920651343894411168095993753287475595036673571212995962900134686846347787877484062299240326083529798662229832353356661104190733708040289237334415143318464007457016765783370725688178760684007631997290723697308539152704845065598303686071945621892934023531809446634995403272958391058435649685487542623361855343322082521933633876027950702259029069185899906864695622617535870612593631958372152800863964775616329570345552185613467025464216600056930056849030169878244758163240995914072907600096163507820815348734058513665059114508068178367617804243332753749239571295040855080590873111579164335770288383740923440579367884707497712423043388562508100574697765074001' ) ; +test( macro , '717897987691852588770249' , '5678' , '52992561458966917842048333229403244806917799627848421877881735070477262881098520765035249624964340882038688516377409835187369665592703958080735736766945912536313709777389461793817187662953548213601180992839097018162700540199444811234129652849225410276267930982552729151588039493817422762367215695837880393501083343614940195379176805915010804690716402053261575165097342342740863670719437568773682027047862479103787981449864557595411550480691451690239227939258640148661525627569354056573032574365819474479753874049318092332197860174730296445988139873008708564407683788184545625049358109338930604072043506368501486476015294370204931967091112231708457059830732539826223797283205277978138098770871113585235612923319080860928191126542635460138797782729492896291235430456696065935768220494159845006073392139110350323314505384289055017134916876163400462621881373937156047111273516233295024171469513762593244072341275620852077848874899582624269495895402815765777547424606219477655639449216632626280672365511304216574465048481409555551898153578798780997838187598030296504499299634026846370222734083675507056188173301287819190008251323703160735842279757966250463716342218905187576189745969039286653568566712245083192424309450098888181155360995569923237384829100088794333552637537227162177479701619093609870600007097257152299648831715938521942096231520452892461541884420652580871321292450318548928985510277252222535133365388202103209163165539197901552072608710284236732915850819518113234646115533291363606803403675185089565146698511010652775061073223214261491866092146057590474879116664838288380912194992229955697790523281474198511681898554287250127257584177956384808694445714111240128709963424475982531545945446204678284012510035965008794769324049843450109531060002528540713991395046933182699881232634176242677648962206607631738502280973898290005462656772264590786129579181328545465308696435762205327818322165386961509403474972525469518547542068305372202808432048462319049469153118249646785678722142597199696100956128198604501655682922926268156814400446792306656470188135722009834179368221149303323894575881803165080171867765138413350984666824885942458943042705023835971675031330773162756179573615771369921528023990741381103617964140627847781113773752668975380722356219881474606884340999916287255829002765995657643610750292167091336372823055491725335254964911991918866523018470993631691434109295300263601212125887194770564215757107756618621927605011672982388667069376436126257785256735035080395442838012293011886480858182971214107329249888540878170831338663664497081571648293369670697492303978168090750719696674347255594774732019346186950722015778265861706529434650218922964570378758677250144083322218433388621419998372158607084870550629095764769864396578302522198678754554607834625544465903300910375218946617943281021263817868702534903565965515996857490410905151194367951674404671401634726316031502775424938708095480058006939655833612970659151929020021108105677362480187576212239598103259569657352323481949129023622185672875961306339733885857708982104417776147428446169851035372923120375171782152648094932708525562623063044339202972582525453779487351603066880013958145443211731768489287736596200008852460116803737486674746320357688425959700168747470090109849460232048475582033235140686903423628462653109627172118888613705624945389644912331260448674882803772456442287538433120812454253132443354729068891796527676701606716457913622114298779919239138678095658602599035272101050540631199171079787674726148712746094500511958909309383648848324958153313684693020237870128517588375127269029825997693115614438073154312047924340357482412336581044347428383345931096734448615207346214924813291025243318597445591410601657643923497289883965796840775243249869681469920755474682727417587202159996646531840273727959008935890037688256043389201553466973472089962210203795891910446649680901883560841094031991763415446185012636385884139521383390919645656949585657311438685339885917614078799309904047978363483036838818577158746493373606130783588041171423001575976326332942068212106971788178296357879590268289870554895714998398477383074091612380803534549439364991095989289183083877933651758973534265032552397343750530201088858666516716202042806877592785968359618297523122663345711107589355569471982996246008945010788125903082708965247233856493295495884971617005159683177020951059046089360849718770603433176136962787644988761679786793574894146198596283619577589492917433648008790154607904592377489003959969338300144125428308936896784361334723137983098924994947562038207668868190447389976840741447171621269619747614678405424544476952607756858007392925674149003932269670585532289548230838340609191813200074864347826444440499651323577336653937195827618989214774650052553204749548153719625554328240930029474674929792915810450109353297164695948404332144143911830336116561122587580838323433271508758381427202886466864203006769876629040113309536126898286439306875888068434906684986109839807912211044229574073513385256008653277622489509139402265793326372569157760069106457217990235011506430988742050031863394618171218562494463476850191629255740324446363242993320648668718706796758945218459365076583628726166585648610786131608405727805072734696605117814467304269584486848714577856278821187639674139091420868276683680482402061170964129020179849417226407523345979683703744990934601753619379872634811616761518185857620947821097797023780246814812679446740501132957939033231020697754175111520932341860938863741889626558269454453009814222388294592392173794599397585978687451892813356296473121549635013676249164244665043044957101593039072361182135678926932958876432422873012810178205318591023576753916592920079031115341838800740563121977641772239560122596720253059357199257880604788460448454541912874334474110048318114397597184518307140986163690693584548192536813827180198436161154497288570678489493883807773676094581689577716104059811574599177659911227887188217401978474514757553745261264218832355099235158560242297233406180137292308698109610071281861640728221129462482399191931254988997403297870669677165754913546299432301037504530872073067858354779137558761312187986108590108671713663509463849235645441069025317032282653619885664511756487047824929057588473863132476505639554060087119089853326292527491890156165208813193528270287317866931952302862861082174087615226626147432099575255480389022327072418068332438673738233637882790315683455450464590709105784350178739780127964769969011026088597219619472341103459382289201174496483005244865985320414773065969458214373055466663167449827644842719260068316989039810368349530823214414315840300587086860582920441160086337872788129994593466901398749881456816893076117420457023093235142704769500472838381750950452685686468352355934718793080770041896266326591193598230038726258131382339638465090689033062834104050137121528398579502285618016610064410178458485780348478662846002089852720537701136965653853259363332024728436379986256649234691293765971251875100216741285408346246009343410757983483597963489740851123818712786795291798837714819930591978286010640687992692756495314962784887224591285887831740631885066445063662149099404455330521550962587381135521874864351037529468684827186997370955447481995887639571571525702373403403761671748587109161571183805369675426792116895119621582920253789699657615500011890976403807282199844302806272514657032217062946033211042074109494896045803992953473587506222506781346147810525891832442558813747914920938494195556975736956239077078403047716108873401240720217398379985768790248880164667538691286461771920136462983631359473029704858507306794650707316446091278308009089124701630706210560168792994743974642056525288870381921514176601924996181921908722977903765494032218635205563065562888264623205077967964252752702442201464476030020851153648989654374063092609825139716406169830702732441666788603492696815334157061439959989046789065423318960712201089688946540796678378497252260148940700296093007934347669870770800342086190913566676064617891161093655936605836899446861184700094847166382869925437304928565010472625277681782787551544062045311275114543518096882812611825710549053207666530027825046311534181156975603474991929909024388711945463808425263464957653237271591373069179547100808683091655216330416092310214397175383390044315163696300849781070219134615015219064302516596226701912265613020932966925428815092790344445459519486710818501491744578229686083894654498423852571127489975219254353172438337650602238280223597768220243105815348527252142824365262184240072688609964102457657199429178311502128276669149947703560777240739423309436247534508874804401314162274740915591635435183346939875420896409168143366133287003880010386186641170364265028042141513465453408101841921842528837600797310807883817569665409313593668849776576983790985321325237847569765650823790815463692017963395752927945155773792906513914253930342695948572439951274479143533256050317996678589637630517043566370062714774155238038673228364852986154012293796986173903941816772421914136811088242656279247112124439226958945034478877984596864873339798554814421219750181744221681578059062457004925780474249073437168128231790400216332672320703915847426463055894401088311795843457416623717000078714687159781995749578194250354449880164141903126715398601118555657753088212238422071158309996360998060316430904776007237664213238747361809842176066931627956726802459178808505394046664002938285314488362839317461527679372532822934704704470253690263875879702240062788026418261529389183596155698524599722228817999108140672748144745689714554812265041175714545225389990781353970530998752805250297945973556929670870774946985404265424068777800150897438843100570165412465536409965604362377295700424297999045416603027704210682281919437502308628718607989662408388051610908664802514940396058178295301888644151245892936386802507105326053427738255325180381762764389027620113283759653480743839809992357496074117200755535328327778239627950809058337055235742086687019858930046083297050726069315089882694837254737886800564117843966144822575643639731768343937069600705061564770014386059309401600994691145418984296800446891914436526504588487235668560512126375658106759961423238985938919327850368124270203404746108520903433047821070462173699752058768991623911437121303926263567247275258743101051399711951304774969904872170431870967998534905416515742768485058006433022048620528364549739197129869684349063800961670793383545725472346808561542828191153302612521938569967207547584404136442698715207952729855421979521420559878331433668100753209636435675712543276009510142074799136997641192447567079334735530723873493925022491212344710076896739154338361999719913499831623432329457641993249784570344228676317925346610689759322653659928903365020471696174639950909615303515965200146660518282411647170608800939660621685552950249611706475325198479518423077155301209371280575534360462938867984963297040183736104969929190183531952577283379234782953108926401989267488044466794228043770347285979888837421775091151607628072534183685174245345816369526145717126891495096063726823540297588186575358585981265343937095373338996442251138594460569709569806492449609367188654079820152455364920624125030761646597005088999711445807387895998396475835641806955712083403146532371590752368935420985233735695950492134965346564198873831201899225738635547303457400703163201429850285547082772143821844313238723456259228759115534200528631507109400219431734564426566942208047195491924187286616903223592310617985108600082628611087567285767001840566153820546701939593194433998024938689773662808625697973543664837705457336677737765607746286815865891347597385126417092248398027369133671804532615511954414419259304523253807140857494548560843072982788068686101289767274829556337961469578050554176149354133487258534215364379154660461310427570189912699705529950514413147328168458631103249872388038937376864265012237965847164952284836681545396080247290559401291604967701175723121502236181093388323626875423056619719092568232717945805103108385877791944344245670750247392343384296108323807858305055418400741553693700502565024106126585636797090774279356316370509236531508263353733878156923208632989404619022265962263865918260332262005803614050713268964027332085964017902372988449905870060050221522451244273428597501098201640739856281753377806262510621286335117441922221183997764738785835690806964058090618523209727153455617620262903964419882379089412045613968114570967614290250244897455062121766814873521607883867929237291112681395681208806316115052463955424369530957702703335301336133507196464013784297392355963686577412082487656646900727164897539211910515592015131790757084187802478999731058868779493827694303480414208944059771372285831516411891131036856120211199256880755033121745020506905940385581282403448035169726911436826243069847201133079363947969342361067328363441956715292529385906162072082866885762473853872136917177105248829462003088491198093528321254844293731158494353309329359943621539173472646030822664165537362617032785562181639419716789150739604369299294852110605262082459555983084488041202822751327819978152651961662242916641572040409255879415966668785223872853617095739101441693844227787889967257101619837706529517298805962370005920305999407921230127760675120172113782634335023130691310728800481538764425860624015422603351785485421993634219805565282967254634644843789616543323341653341146495092459321686531162492849751882105121323719768549112911144880654693888232614646653956763580397332567522797083319499426431434148243989859609258432804222067142397999063441042035277929314828603521084355742771233471852499158339778603981017500121847933601889420815095445410655577708991650898864592139988828909325847690688265292963327637387564935819554712076627813142907683346250203958929989323689935059457421263112380235019472983111424135581186825910973214910699149667710959563181536691099143613233601161732666745012245211307688622118221683809456064734882630698593204467656990257941572412614139802715394281994293120883156362501711873082011731962032490574884682131178885924065895059613017568119400856466320056952350332528728576467215637026738604714597593759418177681274482897193349099377791845071840865476390482509958300517175834887188010180465835340333367167368967646066303894894949259012937252758312734808329709232360933894530979086189948266744307651572635781288044544893571461370440118431167905294073527312254045244808871450613885567599305888413740007585647252065620950569327491405356998305146429471623136661921767554001049077582559141269075807726942292324962879195004849835063558899374919319497877100701211206496709025329275359077524423372451805882088092879051313263439053059246113586757853983808973560033255079821096458791208111949975520419973969738539460358523519982416915144979569986992658895580772468544281855421641228395656106360926287526507440986113241371749929933626943002948875469110027470912266294656790428857661799285796092963253692751518091473958954584426686863281912392953724819538676197544419608647219428371546066604565530829571887668487791705473466987941636508397417037367030291035726974209122929822977256282776129310660064280234827050717329256768834139633843952427070535536323343517859928713869623513480175609016408364304241592622958594443056559986989106563619631715224662514109451710877519669377700137922914878226108875076080968720985553774478319079858681651339801277697214672775772710298769965771899451131005224958432124257866462047576738776398467445567954900257927297206412032651048753538257470550748950042956467383856098326990699095531754983730997777376855850204059808381527746257418211558497066091371508074576455448794073221457106194028764995140574406949894779285509688637508122002763143590113564857465357157613251821223444359965532981305922833468097064802147367022534931051008695237039566704201353988540866088741667038552935423161581934287462404348346959712557410094417500120546248110357270320222372208679677188804508939856387875484398668973720610306440393165985553874361652311139176073072642232364301455756578533325673397255829115802632064375030488532724282480941523096056375612516691335273199076868478063949077979981834693199226789642526467313758886727034664155374708233413052241176017997770755357925454917422006910044558649830410441042783912087181440912216816911418077643846400706686847762348581058766312240711484387486718123588654129529313123730637305855816034535443508751239517641963906747738873083589048844951039924094554710311263734798500241327075231542378920749258310205825922008644493121370590192760015148501273427214461014155067372554805948839297269789248975606338557054691632614937241901458805041012227038978979812168094150773239740200926858206670986309560725257896194349092782159293694188307081347049188661030610107456715733073715420873434056971119630761658470234370438116245797515154771525887334083368102698399109278569996061959700658346646955565093203139925211068688479012109279872461395639869548120204532938913593022473786111209373901721432107297071448742770742412159279076830118439645403061943303917551223288001014702113659615663577592748103708841776873178445568235386839518530066675979433748005530615064885650866749177914061788524262808081456736332733040493983863214714692393115801670972860894965741349096171975727706157112301169070137414347667759125039407153467452265210719726714985635420293189470049637210766042254751512445609291095350283495503549502917353512206358756772848829158151755615008365723008445582823523075844725615067686956618810366284960890688672135540705475984841760373827462101875128799270857413282580082072800739904057148821354442778410810970050701431502851594089320392059591004827037030949407048303186582849254894900004175510461919883551638536839489510245449220044773071872011316439740663014720019722095387628672305811492191697738078092246616407460689410223935009608878423391167281114435298028095665936771603627090834937282850979762786426899134362341889415374040340896380252725754909908018401107333556100522040895675585460969780799009744922983914153517048037312468584877909733205649413029335540211297879068656419387807383048842494215387689331649844934805491180381285929557990551329032335758734597115389529509449814729908343459195813101027114347572133759851590325554983005153111501432758813072569701126690781490951740575825405497526335840722010023321789428374242548378889836216282253171286247053640123351326348638420215428018887341486150219038345363430704186782773219435948195386840643853198799818242098668338179745226151996534978279230096399308636037991368814207217507069935928147009785676785160027497317009001777550195024132691150567507011354412329032340603521157466518995650811670602491853174280204852628446269615787322879786482369408633164257134657023953228812362587592950746528121453810577970418765900895068401958324820738606431245080063027400254319882177028368653741793457795068935169938691425211024828792631933230877447721276360612404169065676636411366175986321744222814400246758586497722397143948714428396712767471630538898122410697568130170950184011778819880862316215372642601335542980464853249009026580690749759635033913834129498173805649521698922073038683841857811453879318495594875910979538327284780569733959417673964124812143583018523970514641401891081019284489763221082086325354879697385907787761049442665031058490028534622149846137905767487116029644971254430227080575349336243717394801443483839458265798732710051462772605466482812641037899172879970734427748668316293777647496909333662168116654868712457269032630974156741200422999141171874097340818602076458352626593605494845936264195396202806647904404677157734745652872270210704027405978135714048673747336292778720101960923698684395527092073172044177213818544969591585627238532808299570223371536372799012875224234778370905326852914976423861886454350497565400489482872955448045615907842220173649212448684979945647349079756570932865476086046458864652043811750235877344393220429343034415180297212581588145608747445493372426999318493938150343775786331056194752510426503166230913186538526760445807413799806204051029905931303093836872257279463684631738363832006044614840509662858475110814261755496445327276173263161251358809092006580985277059802629992110919876640778599238851224190806234298093499859897877945279235571464696627205637879325947667945367188005248720580469836926696939939415121732586533901411675573681854304269524168392617282088535658385037701299391440541334384518081022468387518749703363096233963804922423094068395126707285054702218861778016173542392815212283678372323848563282862826760297013819812339131493327915541965803998097384090951244169643369018641096219195430772492922432677413755019687006516340030964660067215342977430274756427296622985672207880091256161463966745535322513359262081324439248033434926360421216544044746832762555450035219016309931057323669695525075977196214861598745789848117118689974917406963326147153664733948922010644259043986576126492884735748201429479293157327397169116086340829373474447532461009810536262731597451754627874681161347317493618449699664690398390949643587566379695090443777568885944452505841199312483422475407319328641366974092114345516068535284073079980141067468263817385977308228962318323609469322490263507101669512786080642752319574742157425134152748843756299008728152305538809501024125010339213159780735824709099108882350824446352596024291069384003047531175618027373859127640704478972526885889432610483189753615050833681837753536005311543749368107499347315534545941713644730273702333948596900145557971505509367959108594407502948243020888234056853650963187076323765146652614211207546354464881645918117204811380635728429776867963381852884230518246631190131825530206787122927542913920281579736988824992521073962274953252144927376468933425658712672597384028057932228407070530265731165980966598601076506604289064934821557949717410539761505040873308406110474412692271216992858783788017692940669126619626790274625702146919817133167454141020585503777417647004018422961010432475942591656281157554753543866527442721860074055221343919493702427083052905183704806054896861313080853192781874338774353472175893928663360488609634784890485560515252214309637081204987618424027884591397424067625820413547165571090593288097729180898304860943714385424978418160835850877717027658521907629768814727424695191227358428401962885565649381238098204936255938797308193040643227676416950981533713051600283871175312807406414172316740879617172963584690587789848239482341701897688268557616992035582225306531638164023604262595670103263609695362798739463036593927714273709560324792380672245014432684528132529510597382659551239028729153767533108869546101650464606517031212471681999067256252173869702628620955732415793090541749027540473718940312552425322149119344958406002437705982398992267252296771928467559404038212669370252790729353944780711661881552113249584403769083480856475063987837244029373948596829428019040641426569984762280646821052726889241697080032561970596779105934595957656757479131467410030344286211442477923310898646446342650046369081113562118381113974544065289731235914381813526415129034466320886690781519982064571162447720218016309577515552126698701486349767343461948090842618080712299219097673966015228424172663889427342731020122066675346414052340618598182609249461329861211149036514914521730088889300616712047373574894553971526437268977130623792336839865094059220733603108966045443149552683777916379609517221061627320405151444134819286421255392382822364134687682168786843209394288411699746863444889434411414485519234492407599434325668997799101520066221602884158226756336984242409440361323534712903377984364440121709955882861088033253565408769726596294534478786779815095706073686709431442168829090896416212535563746063403950198043478906364003836786350526095004964058916984298874819382063723661497266846181942426357905013650755458667314604787157987764491101741899567408074361392569794087507924311908229702294763769391197478812554522186741135262551897352184690374471893073000220162512552332060179402611785987981834888043869118074160633762440696320006275857520907876405364367283599977809702429809327633774811777287837997929063319088643981288504577794563897734368357724456507233435413578168544122187905557510349163877892031860938380863700212457499941173051991635044055263541028899765559085615828388330183855986870987907204189354310066588413218192874980402116441641033329112521433352585269389744561428992772734752313702102338324264613628379476243754122969786509425444725576325781027140066964089023790292891876331352393285001370386695304261889280274262043056322796927733119572711356326685350484589411334123538058781520196877872573359539914258371620972518600167848136853804940166949001046871343046124149316149555200621260500187812862150026333455832936133319251080100944562462138196424435420637124060278270301200807655723626316279314677989720701526760643271100348145148124820564605091911779855169535418882307665289900355017573800822546237397396616805582194694056466899912723329771183008166619132092740342879643527581402206500436271851742975104495236263710329645094452343102310844177958838929699065716898974352408381283451421410089914102753296005962431058406067303947323833242313152680641247938380343115958860199956778403253209323348645070739497071952928327376353617380302386451510499726403590049039220125741769453186556766459550919922603305625386150812873799214104365798370292908598658060494523919882837028108696230018764525326479800889430827403509641329404504108584175416299778457550149516420306914056180810908889377149438217925739822836731498632998974190671944437651733816831832102819701452336948218481443109835371939006988086201718924066189320116586181314358289815550824203560990687366887222969587068618783822844334383574224286655847585666103020816988760101669647856537819653647348642372860462072094399934119806713804526340303858796726062832597308487962786568628209393365116177313500258916696602298504935899488231886983956122931761650910471751605728341369214793135444893690581825560582275170663803345907902656817500959962305071703161844221586272436733043463590790972533783408461905472360665984339275927320721268991984362793905235237928358401214308908599626975869024433459897721710178957512745942114341723971665941816834394308329806825884356070709685761638881841811423881417063972638317949761209293108884169157244310554120522091867059525129565074635172821024753666469843554970503238670636464476697226613787178875812109508162171406085559173637604564435642338746751084270357452547638347056148137732031656248286326291618903398185758507933313960978162364875292581607458217158798787916676003226916398811579605403809873107421485543087852003080885632791018542669430381491298441535109732809291308440227122322919323520142248717203062944396531767516101348669545805257723994808980312479264837725492136882355862941108451810186385271944727323937476421051113190387402775727960536639091788137833258176311969569961943551611853786770670960071652604792541940305956411115347733415222667549394453865233071674925052111317188727005402659672862870124353044134138940763586559553241714723475928344653659170671048092842027797901483049343811224941954463977298856433740106969036666079845988063391903825032855950193013788243789490182350376071702678007109765795706678377357340602031572982332824123773826221420577356000773691991307382149359100536109508425616929397580550980381697733400694828091467008203408893560621735626409474184799062207420684997475127497499271462600004670205579497645152495972389782480775949584706612600406180867943792941868858006175201936307008047616757589672523735789473093905193759863364945186628110590148829061593580057092925835363208545182849585868221368570360897560213869098865474255930740671657540215219483723251702391679084671148858456387364281103663462079699683913175189821329916045361853985054542513239589981629807348515391518514157410480876717317086568995965776721883816029400496479881361209069153709752129572198334892249502748191465310837081561861610032985534309285339681126580547626611304860810381677502832262489332934346926301205586228829998320869739620904253982155600321208706995102261899336727019317570934776614228279624359270351092121785581627705454815208145814747270980169200427592287264446298455337451867154675225312599671885696403119745068812877999940157697775260282173718338630223097905166067171605705202669147542203111329964484204150252769374041699642264247344682780556183768647043088086067328086717187740722470761010716276890826844033820289730485347275758989422619495961781370981845507287224106646612891699787304991489991450237892608587094959507431025121524157532996055387813931382902218941327406937104535120623519125622928074921413343511233341463048114587623180196119633871033128642353961758736942162376474650866446500486254254052378915783117942846877531394483736296707763850427149576406806692201719207270711640436539293214966734241103817572475879693972994529271225318511005262619518630808170022848370992692989178376091827819432746605823278836088860098280229785555789098175025591438486997677754831517943543494195444780421155712600231315338591816992539029327290383750279259408507030866894281949592643856951856970260492648859191372445722757560829643128598473999963495915365217562729260899176033339914368657427490270587754614627221314473523385599772728811860813438436363568535104917622395452899623639754284218650275206353695145264760567105459178562491882032831507849731082780751290549815090526014153248389638366562779197588704003763886554458980922773564631738946671358670002437792609926532640853858166371833689910006342371227521888985462256616595134913448753896321572610914451983732905554764025205460856114907835462908762361867725808829101494129427887010484807824575634192790958596192835856035642229775443466803753619433447559913956011510527564464490362903893004175699539657818550413774129471722988670400259357614877806334270973688298172787849219764510531270431348031231230366988119457069574129982095326123736732280724513806554712464556176030636815599985296475879329526942793809334154537286409720616279737748877805830625972559290659320870467177007699656878854930950374408662534796671508779289654115928497876570228294960433889385643701335793908755514074473749964759488535101951927148371376246782141759279753146527867175256859600371220723263087493647651934107824747038684956089218459994098442077055339542213286639575013424597339692639209982667429839922996745194919443742101455841754629560994904267305390310619195510596711795233359996984129886409644969307626193230100243445176341224116774838302230433293550887983785529668376917774923810049977020766265752226119147869678480128953266773825987624533026602499804124858105127910152228288680919984865137490347059505127939634012785058380116016158201512139929087364709693014634031763687342662706605079791983804043837557045973734575431521833043317763655587404678815578341748648519218701877257148921016285162472607623283323249556573753034374795565710904057626708068152251494257423269988884212986826103841847235290434753139713588793284927733100788323782464581521308771041340355123219181562733669769963813626654980259896667571531426558561083021853772568029181635433012078770849834446674149991209906653073314199262005928322117392615818629566430413616987317922057832297584265671398209566291140412705971275976266486649851786135002249020062965980087138574535447132363958635609925366757622786251073626356537120620726163351028366500669047752276806994698670175421508941444055686927449826465211114309355867990655881671257209904683585254426503206543491199687267119577128778582396178926678946290201534745035364519018795390246746811766723584255073984715970376061829082762752016704470773798620997166862372135899943680412430608608549449361762094538339329299440793971638832722944360033468293012144165093312313114839006029476318874961592758500904627465226488109581697907382066846687530136534632837946481815741937620620154295350284380932563345904144633726510177800611951790431250878298814044606538474701064227373555412349001233072133083235347487459787376279403703807888154514448002202951245397248869293062600560134295500105008538576207064629412523316530627112626565186270777090318018659291403078286535004079092813364057772695524445708298445548622123608796436695854008220295952906804796979613002284502190226292523908476214322919392774132723010892233879221455324852691358984021386299602980995708394090452538155116048679915227979809152112372669411580872195011069091512211098837265014358497390191374862378298332979828589280675262431318918898318225215446376722107524363251975033827569456312898080064881381141772242054225493451609900958323016634712370823083984626439009976816172490877077263224311036942854664827302424290250141379316709351675690520061130683735321311996496187247021962293994184343787870574057794627801215642399757391689423643087425702078241032082171429850853657783936393491748921202257137973536585938902448803265913705675751505623829853836767351048275120136814974429359820277661179090491547020218952518317240856799497902090061811729297871492235273099451994560780849999017077268810932708025581118347013333023449244901948116998051103180964193421409328454794534892399934923614215588057091032039363419930676743779898364001040849687155406279816603303339546771517073573996877517822995705129876831722490952428194724842099930819145094619254525540759400392691443317175946185255495513754986746278892496030387565394365588879946177842768690923727638413659745835806393996818031833024802300235446835796085570745553032228525815450531967652475109305456596317989530038989405999117072923810555284059845086948523349452739911967441605727895585516463617479813514316281381343200540684480647554584918667587044879862223471871709991329936110666394849738825285286263958437079344497666129723469849274424451217808101012327262154782486868475696579972204483320055712556519479118501769492253109282648803982799956007070413969057766641895108542980107519788443327966941933926975271423626274088356029953637857404994029785121788713172223066847502903458085949291823486875993171596694026412513484348659991282842807440540512919421580435830982886747148859097314781713081716943137837514388166635564093209988083853631966764152001236937201021272205337526464980001923248970935051413391014325982735295720169702781387326630373314301750994939700432204266441734849243617137063200743900861763556953331088533375662647974513214949950360582587461449318953013746171392411021921268719401083870455409243782703438717812520258803044022398736843362885510789738025682748439023460396397947226212022325837892155810227799539254487217780142395057860256227526753652355653439544898392544874518721260751136602267606533517775781758994893256983747903520154900084664232199826595227499066488170533660614570516974168882282194703476740231831764399346962406995812197194307712384356275327126581811963829857081764545583491933201665655011341750864389214260118093942175688349922926371415338795911538883608650663492494285079393689588623801351274317524162255546872032205137602055977698588526953067919577657802157230724010580762546282119676770146073279290190567417587379003247680752947289021207629278566655115192835788767007491592173561216460960732338187214850961468821550647703718319006714895171928841330718580062654702438419600965779600185378625085906358134551760230035403561105143710833508540322391028617424456041890440768192600260326521458091222064446938238524580192166531189004653013760970323476986163112729146041847368155310536930201842388100514907989986285028152232579121250243087183900990150304104081116859121286448239243348357354426439332087091013606470363706785376906184268755539296047766065167508797445567080041967876599818349026917276210630616917313061541554664359090008971749776374922888008224470479856127371383520079697079481864438879042548335953589849253380664920899400066389165030020576281747877494368823642902286149859757979430259416772186621524014692936483589683321666232231917198657382422968512537393374246432506459315712945887280161525313402564412785562279688402776014658097920177207595566191984505720566032171980817248093432499471573407422741267535537792190907867772310470192246974486242409294991646564339659296311172821487691415387361518368358002232126427175348186260983285915013630462489800994709039714768490653776139921591148425560513222581914691269099627882433950238366744049435126864696551517102338574990439051014288641107331775276925590557112123848552944123712559927798767656060604001870745831020943534367217710806627918743824819528778901432361132400874522503036881964803363227725213671319249255588338379558944373081448848288914340029381563870874199421074704225053940653263054076372331153673021564933861085136777463657122583608153245145603654759564012552343708794221112376282396672216677067893583529685387362866085958575144207549201885063634649664356022770450599025073193635589697904649689742659731140870664049705909529992131119908451169523625982480852065130458048303330783267873632661502527296193654564481985949017941867590637521370248661759842942985486580506523527905415291993129997589693562083571993824525692390012764335534053818968643292421277387911598443675823895632044862101929611888494601135784807263444029447043613253239718910969875605613576775133853633741165480175557199106843404370509722920321859723309901527892004815816154454240322704330590162893392597841258761159890728628197646144967822207646701728736399384331473403587477868423279416635027533248541770967263778198842567490190381802603584303232553124123738656775047738687142923133780711030685516297965124193566037052352262354539607323266508361484876586175823446779222126520889533051136757982925713629289751952089225590370193731715841445105382621870755409206256938181565226769507387707852521144122034388075830457994525416533663962455970297774911851804521911035459353309532169948020448427333167113803415885128164774439258952605402088109777145211067039266101515402978544740570697381766558881546774239387495303310021282368800400514079555621371851412626774730245176141487171901398964327496365698995566554278753549639947813610318041843322486236707793661756645237618569985152051174050866426218945874684052954853332216442206370490833124972712199887443585954028942543566576436008194402325554516608853398435525073932650524074286205850550540531543625550602818516054893310255606074691613285654709269754001340023163558376144694499945698271995324998769772391227717778525548481765287382012664202138451078614644891981447633443984616961062704113987629899385435093671888725031427992000013446048294556079409188916356329263861385119483041778470111323934672117382552154014552689712635622044067335585091419078549572685722517799853945139066113116557823200991839478980485148139756437276310315585052962711094520823502876017799162004452308825294752903780143322159163359216776682795639765675024359141047188281889450388835463485151185055730257857244956639772765885901407478608833348764219975332660938410968229409406088016572970425472041832771272378171279797797035736576275270098485254500981153781872753941048954786738308270916748413503252625251966120660459010356765817802826429045068657112315950170987790686087303575594630278186797170965451147353365942405760693758157024450678772714436915222715682621542648328393696771847903632197735143219253117775874065572827559278669061592703292357856712182245702829796197056320474383079124060345835424419150979181507698302000007069045583234865337926621992623375749971204642446990777626632490383499047710478578862245179305716165431024544308084192556089479503354600043311566543487429471050399741986074927517309966574629189828300270254631391989455006206141157242311958987861149970781306061082396476609746044799676946433313570016028171027821734752039087742788832856846639871795304172840764319177762201671679871703331176399614205812745806594113056822213610394374595550171039503669220580872124167464169590577829197969856928840564473147431728291951743418213909020891248139717532829309139307324676418134145138999363155157666822088563424974605011214474234561958644068385566981590500191642959522021800166068563481044756233678800379514457696678176805627254751999892080533501886765304008355851853948156310423934798610892860385518158372125742586604990037334390212148772332920836540413171820995316460503362722328438872099507648776358269375088834055987113695732969353422819649914493670628253189886707685826733188098490064699162769196462197178091601033240633742092060902726567598519786428036312494443148817711021658763571536644924743944370048324568741512735789195923635121797799038653592749525637165000255493407622344594232313502271601912269778165783446812278845417457586538145675618091493526724848167114864548061108275777820993568273138069570417876796279053044809083376787522011494624546074909061660691640637286419682093499212330107661282280374851441004473097968359669954161836104289719705649964194654369452812111646977860340985060266188051868138264924697766217093257796481229661635130361603763575209317631745373236794727193007345895568742625048392643535752017720886976385547006530147162370985119567662827452345951611661122285345274467812187128152772828198044470287829483436630828621443834283933061869973426636841662503174938088958731532564136006533111241497517080811026547277241069801619368046197038254330917315025484354794049944205979487352155731523443985515670321446995279071915493012622438463701624086676046991036641665468428667863243481438144104997475129384407937791753089800722213988580814506420181828434464111345849729424096408245260118164415180606108341818909452188841412079787980645835501934806620697807291698253154706727593807361760609508840206608172948784237440941360116633737918646533724288158512019153861656684310632599855068395383404299612799388078946939439804726113661786432879308541638420957312446608450673637732399682300434221464859925923221506390466698969039225502809581860888180763430173987356554433665298962587119505406649522644887130093859157162141940270620429317071422670076888270015287432039353142292463201458311748039953024013036300157681289307831534247803967378524151269240623018079511894898426335179627535676928729840275620799295814291986056942345428344453545269535794124327345707388409443474582974771283667398460633838739913858003572434702047552352950879994724952355013458855725485470732726133558254542140241633844025957105365419313572521406256164016462372080325523482769734126885228449084718164714605387688663314237773503394896942177771487500288657934065953470677148012467516329412866843212947650541393396631386347555804426102036080289255754843634434329602817459750576423199736486570021428392611373877893467131270574799604435726228651959220155729187266319233386485777943988660811844393451428256717646755716254300083904773522205309371240685190676214538753207966844645134821197918259003182495235479846985293701759492154378658914612708682142567444147095497018617281359110902117920725531122469148975703268958203323016883831569236133529003603833362202853118400173131984771412931859271574480640448580883928197270433178482028973090531595725903261739123015610187695736065475604480716148290769317072346477291109395091443012208320879788331725598789382708448112357055474285327626461197894056314208119696290296871946392825764203702558293596084592330063422640815063526516709219894586212199245909945107086110527318146202939164664570138496089256131319667582023030903220338472809679989900075966190134720802260549733743988009810716784814967132808315697037229066016638783617803049541403814297797063504097571959601223859618220236460435365468876273616964977582199141192717139286886479366882946601855885523540939542911001721165181303035250295757804176416487538695267810352135675174637329741832437202038317518501153696331084859275436546896784758870744418504221637131581695470043451607111498383586197039434557677809493753161844551986777183528706928317708570047213682844575429346154967850073774018951110599706445779164048664056208523721691779348621942136050587382152008824636852587867072370504325971481960878918898595254980293982721591693440821999279481942233518649498707717083882102011010920568111932250810913249902342481472764561569756057047564387676395955386968088987048250789547613391325196480282398866643140635374540815498886375692701566620478926327386180090314769809070586546850483645016414930149011180928072625396135675547919261758488905962683028189154974348858839670607559911538799594215181566419664461648293512903197378392772465968575275924040207070331647259700136865792916743805636460060225022009555911506758744722703329764833376608884035244776681807079272059851958248969103955274321981361055653095030882610383596652083951976626946931369787729556364440715932097751242497500001584071338920490837692185167860605115070019549822090122604643634410262326319800746320962802835287034390354111115865790874939042813949509988832911268012219132145696181195882383952958868481795589403551825711445660055304159790661413008365913113607195310961659663716376009165695349750905934408643499052196577976419823962941950712959992212234788580725813670158180525202141811656107580848620353789727923453309609949287741837902512599149154339176262431563817727378679677652789586189907215092360394745291315315178280769752824178866136127120364844360843686570666924377391665188451950415163418019008550860833335991205615992745172384110734413150392823334652249716284396986055940980014856009188306532585605420519999060408247632994088479770891700298117903439944095625163759805013608980060771557434355471774895250923968185127614872473437277089861855286234820208542123288985527978805250685814884921559427896393702833660533784695823628880970072319349073259978716833968468179590572694799891627034479004070759376277217793391752209577997711609243576249426419043330333248714674522314937604818018967788378992728856961524893134453753720792091904689980700491208047979392621587263636601034393317517058140153695430456108047489091988799433658727319727603208464797159018320689274278962431580710268611873345082042650017311093587316737506047072564104601699540422208265285367519250051097876841814985282642872180071842394128862870024131550427158424470800953331106953095712690997421000768047945089087663231635404628237322206056194051230418812268915485268026095537420507465353167347945777910402999486556725081524841236691353551068809229611287678981310879402131425967814033549233559647486789458759659524816156257785428046357885788728798334726449873717622126595441912361442030013584241365584775303418366701542287195829230746483209292971621640713714120962019145289378780969314257595128370406067557489678645404458053687082712789287239312499629853769537574070273969474157449684007131644293612697622540605642045541405898737405461999281923424705046372116343888909788638977762339671372562117660223660695670784812600612056762192717861277640703396725012445752647660972755926419081291679166524667260979795012933256505922882790031660146080407763031478392867425713264775858816101821915969759500481246145397674060323709892952582602767900235601067846724543572473980966420366855192885879180614548283832841466665075996354149725301338358519169323717267254062579184541615446217563552842801325876467818631048968727579042055430766829056006240108948018339677305715364169866474021158726443045415282083577876330771922441471903310208177751083536690365995902758865071635759854772834694926455251271950341529608500788151798625090215572084029028380951507817448298079939298183520695590038747651635996543349440728664825713158380373219558529466057128032322906043454271320772921500287417319365976168419625624605115776262120980985923226829065963505843252914585540909170419599634277050723038933433924966297553342377580579351310874515911272119419209407790850494402102776888845698141493104421164929231199034729805606023201679897060290278578720809957791951623105561111133441647850732477421840889254450727982538571816636875200828789909673369478549612505123453026030215697838939324904100215648041600048460039211128583146953718878628701163065895128903772760366897751078368367149449860760323482919313636639333077112532263506484449628903562140910917184883359776685061477491947729628529940226933346422619715834114167408979784271108750432262839890447106483996662801874672678069833459187503127812301867619501888954744651596042888493821496812330875953213277829557379428092928030401078060596211030759341486094758152719531736557706698181800703577011933959623488542790769609795754171725493159747905511760096118476672312212214368328427513637719899441014615290328882809796585736312071114005119700172543463579423776006423420286785176042602478265390069956838609562249314263338461011350408175605961013927967017552360420813070363697740897703263694257754856012654337464403965817533944829983303847137943128996206061949794495555772350381966455640399658960314931510072397034602157188468414498235332005390066923861865352437171408532901795023023963305004538478595986842966576827375616876814560462321033161451137536544148847560393613737181536328819284288283654494839769934062928897803037442335381073377792138665249528844845017487627988924712134129833878665284628767176241405461020337739105966169340002371434437030992017569093264600981712234552096820682678182956004241998659956895146005707847390853503811705773368682511571235504699508351848211408274201762880277944793124322084314104623005572039931534794296111644783972369615224022661119722029047041665683970708585749056976393919847203913389066146411665473936057926195115695695372679013803092665461271109469924054694941918792327473598367085225448873229547450901639248463592556312744455603370397515050475356724383915330376573631292372402745732770801947701519132781347983632063172159675682339097266427478373480515275484903594400622175573994679551026905871042323165045382475029142779227145853127831067763040180729594761438319420585431546444900131105212053283280444109163920317054623845778114784577652681377523891236283117469043861099922393013973145606449737426020400959335723260763918132824769576181564972959353534565137763089779652100094511330446364797507184259503543793453450700361208294282937345258864388186370815590043966329954654849125677177327740604000767897331162108194915690616287252972595860248117617268977717440000074061968313794506703892623292525804480259861766805425912512279877433662083855611776315705013366749522257941448775139795054547860959739810400803175328510521654357751870807142781191563107709530016678215888193691287437297082541468231278653445347712336543897189813930534546163421054102145489580924669226658179842336331091598641340097439471837720432580138626610040040257095582924562504785423881749020155620716033485839761416339278967015865325282388487004257267088252026526083144317305666263332820011765688760660248950414043569433347527093520428825842731654779513418611057685506312236998762941492403138134130278628895223957785888951153773377278219125362017598290832241727107181732628628969099360075180094934523410329138135442828417419667660450020302725791226991835309309904350519775277169896695751012666612484996123705824658061230636549341946353772353847256502559299230059708672205806258078192365971229407426411100522203370801883360978801045660422495415498395392435169201553938998447359782907217478259097827470124954127685902024144358350312650572612101443964768748398651928890056650901122614041238234484827589365452085753800901291898609505330030279920549391725529609085950104393364051410163218270357861744280293822046879547215661467548620526839159988042187655020925238897459763039384102623956395291728187832665657676191301309167658030267202643710625509623416068746532059528983901144863435882231708345398017370764455523600539902232933592756840568086521273281265548544166869155189217769253547646162274698681904982234866298619169147606728419531849753765787033118972568320216833418202898103877938830638735413399030740564216566952884545843561312568965256410100307415769201396847369236405710036800927520184308720379877462570422389272530968336374888153750668030474213183276584156135282037084306452805350387567036817741427086657772348793596448591205056211475960654991794579079509727749744145381046319701859330950696301434310162412623394533581040768155023230373375367951934091941241165048796250062129299057998101829846308428031549873308933439874652060342146147487112567741122821920746044030465493346166046949934759667809163747600240109859253313224534523318272414115305989077622667597620194386096109434183389241552231538271746064990361981994758480643400109172872094736135632452901332851948137971314553706055023957966448686966821991071157048343122334001260237583112954121317179044296283918200831396802298468845835281830105166394193289527823526663377548771320675672435904302829506965065381751997283437772160841249722003409268884062102256196782344983409233009570294135858257059097270907739258344911489341204245278111169086281184455973633769673687311268585203110806661036758146943995527693971279945008388466314779754691489727612537392064606860749506761615404385929028920080939532208104450150030102765923748624515319131703319720895752546614973524876482149732609293236236247273777247682281412717649106363575287531179493828389605764658808933368078871183171217047349880988574824325448372362610802218446169817070746575905701523040744440387553885188323723297560118413455086687428020491756241547694681510237054642664561138533959873257613324391861408301343062755145453231896143425698238618820153199341060086040582767420305271235520616347786529138839814469999702896131238637423238457679536703133536334614066610801078208632267460386521332681908693272437495162368891180048919544538231408211021882239835055241719820614932102560630354408793308986702893896750522314290296683540293827484505905300023101114992678464105412926567451101220289034894056181353733141385555104182626617264287068129416704930481819217760443171667541407462632641111979636261208100709624085412270249731273141538595684501410362538480004359104643319518414061525957275846423061937152965946901155002156142045064539496986370236697651210737114979925333838233483192299783546734471866931551536263459780264970260754449708918898646840741976940696392398098349093164620481102695289878324157316315265067700879853313949779009728011413535569426979582389581110912157244737931259265697284970217655135182755148621789122423740790275289578800695567912194172232381437001835055296422752802918477505980017007907830328996730968596231403288779932382828401789209564023214626352152557846773852252722874386407429775877571315794193926987712301114758359459503977627104506796335065315210696845619852741005843152072857586021494712277348477454941140247292113886806982524284931523693052325966127425300967746893055139725681250453767381048254515620100529385732505537575705833592952363980135107610728887764666569723973048108451266554589176904835207707227061181003264797909809603964010740136778165330131636080406736628862983444586970582772349185817537741391488455814718914037828201228379025106991928961877954472191162771803243900838963413363540922360099635689809501854005721083471139343422463302132347161478224568573755012232757654186967083217823591384926492065733104917127987001845373958949362819097899361570859947150307057739759117086549735298283819946900303841606500062502318918356952336582639401806122557399912051397857458771314546873219089182093197569434149084560114632323348457092797433851092597638983214843267901257463663134781314617308650305690845449700988250818658679957942716416638441577123155235542071894931406458086716314074927818884112642886658753625509830302008526793083053660843091515069802823880052816971852890353005110913111226709140643938928883849361969638411929899250818485685497351413304912979628343794926690672319498774771835144880126905945243021432825265901074072219675205421551379944471783809347780511228363292693403155051134265892661797569449245517472868660920599174127187787266072773703505077452795402984339284890109683702584921296131737245478223242813633895009345139605954330605487395849639794196025882962585218410041041429164367732771713486946842899444326395469338024741363056416431094423601582895344849458557569072143815600281853202226854482541926313966220609663653863085267317512426610902406967587585145668827935607177770167562516200765317627419446873064701802764040551347065283472151903752719308428159105984289801003877027690073436219093706923712506639592307178568316033439073153303229391098307418523745556949162370839618754825331714657520945252013875481051845919728709239722269244770125576684572285165138692025972298962448488064282487593614865073188125074142887636760634331369470666365999529301391916359895775328977931402715320155854718004339702657310779570651367343411980684708960460486854085813610752944735823372229719711477975083318919444329411604351499806575223073087721623022082458857799250279934773245731569510756715017313617596479814682740942606042680619141077209118785093772744481092324182153082120461148314509548822990848713228383587947163388561905319606931240687609278063872344362746752319253909833481608694446649396658474584472355022720916237042652989203977511744555535046390355716747577476430768291790028136110008828218535184055926064540415942043081374080942301716267577776825913761241698826441242707207132111082549055297779800869982368478064129006255786388275389167279944085935618049212708094398002773133828203282452806125310544290636953095062867364164973356884934487769366520655412414671998178217851002471623636416831521977100539461389358348201695611378431285352130979354332581354421771886107996693593322598686163173091956900566100319732711910014276847848482784607549460708071287982503797286563627735864685203387781411711447488662580506919074616983249559689439820043740266093359451795279470837398893812510457712164918416267341168526716387812302708234976506100956892054099586007977404466522826031043604785853756197203659574797542326864743641930696275983938639039383976918529453645314080185326049716458396631545041942484131324627562348361695524825293457752765911242135039196794110091975825747570795386505568799966389696249682246280342966618524092015699346105263218024163990791087132083482297903130763979613473913387176208922928712094682675515949616267443388284705478374658029384543881572979624256705070684391120324441805258828422852509250787864822604748651961772908816194380783959811159097025994482453404926919796944922483742026319123452985413278017571278566886309150358857124522190490885881345265863704746228263588956571919236644608937090368268874303754973376288862484085353465640115041462926017035394130089878665138771334776409467909158695157752579971217718909443837122861551887220981191484052592382920068292711250569816439601772572259768012623447983369317370268885112258821014795706180517495609583877032038048223764780202857829613900087634097949867241477820722398981112549887784310561560787017925696945478944574899189450789104776948969124427698064774021771308210774498675118083848377140246948789789200127922544042988206918987941080213229730827690255539103739275582043076502307615545309193623059515142968291118529600993950169553663464472074240224949614572614109928901068324130068211147114566598653975234575260644389185930565044366393116001108968881017090742771477265223806396303581603252017467829710954822985343413521574441176308265778385626082663160908651082450850219494390316261203030852320657614703993356424039212793921477017152023812702975090180642248767216176787186820146640075049858959179489141898945811981166766767170808958417303432764811446543595418634015844195047934691554050223561608312574096058566460662719383507164351661101386660993035073313069955716804706013822525515533056761110682353978362144060302654190404145577230935702804278403687876413224776226002198161508963623553291372473425796690649269790459891949449662734434497162619543058824618041217236890350648441493035341339677722497236966734545138008331189365802094164092973437751412787668677178386372246386901815475375282245813809318446288294605920682942075072774629822880638169371477662359989082379276962773285629649665570212988295554230364047191993415244940920604530986966933515031262488004170410349415695604383630856473825495652469190529276541843602095979249080866386859816410557433030131120597006919307418842721380676606492045017393675143982663469887726869561867405220787200566946232894314890798822098147226028444874947376198263353641501588628128443875786381112926797179439990922916825839092357124168749174656866448968685552166470253991097450460836745665776472567072345311249003579071254220431847829346190277916865241513339550320580978949242251407171309508801142462524615167545251923953553812812796260665256935971137006909979688518557390466617284338472954227671934777936276788589891063819758889652011751278052432598139972244722591673113941914651135780718062103411861458368484552768493818792461621795938862063507451763056325760717280557051015665570040719485293645791748867210332743309567807945264041911552088112683723606891810553846521465344581837340337575816983786603970147034983592476490445618714709223745252830335030049582105783537791929412139077666889615999658819848049169039429437562782426105040077835870008683383707489836861848947846519033195580928067520781916779357919581684434751406228043820330757395441949923732785636347709074020264905031104602407841853676929169108066940640934182483936811287487300187931038293402458787582994845693268663457343886526115370317989144981530950100566693608492368194385097064324657539024043053941959974602378726196174219543946708813954653192301733919067704673869912462150060977427632515602398636678171393136327767037299342951693778873671329147637095788215580934326288840911910852018852545035243020530629293621139561443932574144697089598068829122935731776730489045717358325562473156966942186455302127002114022039974608747779644709489115244797796589906384418770997189567851284837589695124739467392960938675720763779185299900011086163519213780957046726615385324925492817408567133339731588076377367093080077926628622522134161015406886491016458182682593162761762379998002418582226999896385410590275161171583552341286538648885208081413890952551752752797152221884999513693097781447598139937479799584372915499176297136232836731630374010313502043942856037083079284572855603421118286922603912225520993199838422159918448395641159089305976756705607255697017154184132277599592427392938983213868915348765539995943077594858133294717775720439621772454892132175003496794944803486399576292334316087142198570183000261767196592083498937714834808242405965785655310308867240264750725084240104837398367051824521123066238391904852929941093000718163245431136851931524669736901982562996216814232339219187517362249544143838108073634560101557169614027499080920897378574498357297870125151949273252611161270439044500436215339165600634590130638837538406159637912104127317075279667888957046588281010056971189276119613442952242095845370940420408785438221448450917300404499485015618821325815982156305406684467854915034867591295681736123801644123903472484880982695945490420745637844789016272486813545684665580677166106400066529378041174791179705123454191196373928042558220338091435619540304355802434014630796745807381153118372758265098581751614693253118459658201085261240929239816470742412216818546733542986999607169421929800394326943465975730067446356260970304813476771890576978631310520918610986809549213489461855270160970352221518582845449240776827108303819094494349973652345765519749649310958102444092065522056161957615174661219101969136249516408701120946402626071662270491861796002047372616649580878748688354792295293871534443385552049753198229230272437336753678022532393043874055184367911111756841551329365459321352608483315813334374337310568596237612671310603149703958105283852010022577250217733701047198419667300512304972779175103484703105288038490648270726239725182927861156936432252693896147533649924016941277794467332256579075124762539427709667169335313670086668318029176967310803557640237231328476703794053310311820101309395685542141383864830782211759227453232247222599993480652705495692598122075926249149059025080339063266945367639035599443590872363729278907201041022180650203892026357573097811468229412919246771523165703253446140387755383761517408100583680263192942088900969832791145099411098175243011028495152388183916902688052544899401372205613020195513891997531637831222041877674524454439472945945212254095374591974227370351556447699278732972179879420749801974327671114047748851166038416940672866245738532130035162815316105688928284265191769628703870398388478524535797061411200689742531616776934946758693566097915215363781852121921266589221146009676114370113880990427548952197197793587964394675135785553969275488255012991794910026117762758243938305646893882803367448467823194897238658298949353783762585384450212168523959099319015548041035269244644024724153384295951342588169331291340066513552922950611042664665784552557527329526991222642332215088273248516866665361603520835955238201517248244853520194287825971728930306223831381541107286874995748916814798772743186221871346550267849457341258409383121259355173215564802573398512742704407407353903309711766205739603005850572880227927179705863585546462587859618635376158672896533233699549913407067756479576671402085350179079209249233543131557488175982125732060048551988337610948620176856392229720122234214910003609592928397806655297646929652255915926843451405045566792524234905885047768125291074726237865711707059430190638416289880363751650390879052030444196453432195347346546471973595196025067314493203517091225798046431962802290239671550536465115332623149980169153056475053547607860207391885581969225821190724446164347656307844194594110576792306538361726391459536687379047485098306982872205684718711398869858317294785706246042607703321866399929168556274085551900157149582074858798858927963962886642316870029583741380775822184803732565395060022164330511870278833384757665789177983496628191962352707765946493535189857347970687549875458419045145213049730996897937959794156202605143810611598713734230136901890281412728525398320287477523443561838173293818292316049345833632539136167226924039140406480460644135895289197019166310421168967015930147894946958187321911099505281897711988711986440711206781762152755466176871831112451052660929435148527879081317378330218707839157868046840119670787750254465819236549430724723180882781380800498009997681913741209779008348640190124094824911594977145019009747796649127544460467428600868260071783252436776499503307448874271267037441639349631669659614339079901183854967640661714971402324716688608371364540073251883464247008581361272298946073942177695211713468753824764056219306029960615714963478676063271289460377364780779908789119694374694948721756119137458611220931626554435268407506342063623259853423754193831196822960510641939047408041517463239276398036147791768823711124554469403650924174273895189888261773301296597176093238168673898602284494223265973033503023529023169812999040854518427316573312766087472511745078594697118939720977713302594750217872938788577622688281692810911636801747417784941249725383961109844305428477014392159551331431076168788988569290084440324079103589355431543999281199292075106877733449820167248665228704540250235452159420892950731047234328569696921783329007157636061574786939467398213664407458777725098055171191943136064714165161316072512894042066104560945492786017799288070461971906640229475346422951137664902689538880023720233208657917884402752519306741337770701896574672161185533453422328642339907867753444909885936388031154743698567644292878171602323173273194876934667058056987393758751001171478861250884636993226549158207023070147724477550431365239144561160487466568984511452077444385275342682659058686754277070638882719331385445448903571853607535211471856374412735709013764283377436284460290231937342006032339701827707922817442089847588744750494996349517641320120671806850677834301397403339936324196914179019238540804491813927635863888947846261154343056708076375323933598767814935726758167789515936496642310804474947475865687661340840217148070121244073595708069268852618981241845239625501954372889470019480473741407998604411900951037029193441263418405020994094303361480076149295100962624745446550467217847414473500041749715164653532302920687277804823616802221784964851015064347929101622179630648327637687380603612754752974970029149053744377497534328571746960809258496336943458129317117108749110943530231269560651773367664239430832362186295189004611440592803547913033137146900023343642270506956296218655251529600728827340284662917217550133975294701804836435603468062751800831292702336291596085862177615293016738724534504884272841122349359660602202190360922370551132725799910004522848934386417702739100885687810909977641047143363695788010064393522909865656672138344979003352840989665576735791189768139643655400593235417439345892545613635058062893557581403178518529678550854034011830876857075004332710375269005275398156726238886594609684164522894656666643117415552255406921470418708233253877054918082927050214470427530282060399553781104384375329931827341236247969602131021426032878342743245861195045306133939322074780233254643933422730663181976488755094378227681335718503138551807719931614750344541719384731755237076027863556146460738410843506758494102586700860138868618715321908492007126865589707875689858105219292094170543344099565493690834388075882098724877634249396705111127634773665575252350634275462563176731500256038365869233021602990256900032352927488655490124416903452271837447299576242220639010907061858064097277856086727174377391537703531304601984931766854839949112775796533738980020917645130808081778526229854568799545636474153830960355056110667221970651174118436424704955422926114611808924206118633986104009778463930878802091271348693806759042132848977432544907839407229894124083874975784340941411789865437199229987857679079972812278866111383228117434403231935742412951943355777337320738797039792870381403337389249836994358066884293071110536418096095489031736481868834142904129262251299674149240088681775282677536767206682131494660086697105301879195912692669752737013459414707875332326832316805520209926198362044238796117915453474668621065495507685425295760656476351263333253557053579391889347869918730826586903927618911562012746134707451077209085361192437234954620077993720817707292652708920276099798204463859903235184577063288658339775658030543696920328358660586443711471963490741241704808567130613058265648429056733041283618448067490882859963365870952030401758438815166830096400653200589361857914073145024511257892789282012220366162507932778645783796644097201418760841458244803535271505188446325364600228373038329001148344983727415780410763608177474534085659766722855438779553141472201463883660140533273604776967204250729068893701780448002308249402131898895961276065230462135625138814289282424482034365894100618732231319262029630825600077324878984657127034891232398030151880850241090275223242683618285738275138652335488836850092016887233957720005123868359875312327017035129899936666445612378536864845904651190457646440643419208135324042038936473647725455300569901618785250323245030220455885019543920298770089651967385349965131986410066329735724022730291043988913669457208725464761438891007894401376051232101305572947867492280324821625860898937283773095038586551924151489767910591860630091629894310383726671100588154173294223723532094395594361641772465744163614789556332071501898580910681585287558325199372423177803751934338469445772702432876660006353837836703326676911276499512012962582693758329854966142867564873486417870035100330795449024284598485149429540972856737011140039980827119239141453802229603530372324417112527376064694011108981738030056876113314966941924915704431558708610086023561762708054622649049338521931180300209671257547211129794234628485633664404045197995878735616750046586846414924027073838323950629857186400659775611342196592070598169552997720795851864641489120086666175562439645778515180160384529046359837419156435243229978218877327828099325455308008277836672418275750435346665325739671985506750834857577562045612641496395264482426347660689847274946791804353362366051874308617906390474552359039812115785633662445482431920223051425348154020780114779718873485466160750066983756633375027947280911825376031437610838390417455312417927418478813239767795436873710212137850412494991847465160047196051375938686881233218288388039855640742456557676359641088365920800229589580739998212276979988060059286433886029676374980065493978457898258899695626513870863967195189417628051186051143850527902484536697960050092080018734068164574345216950905142467408231172362206509108459790789900935688249765506819076585037292263329658400840334443703911651918318863206224084506177979352979979285550048957452854769917110802987647100565140080883702332581718307479417361622995966993017794884062651434505397196069395116054966387078372208286495937249742717634708016775907594277259435004301089035868485896786714358190271668478971333623690298798338050336370164705382206735887598487705212548608557462124012177788808319104211003460062057906595584891542518494477419946177808481450736030647936524026490478748604770354459201268694152330901493672916895616887540284078399037382994770715721275703971619812251168155469894038647837135488907360139008313193339134501666772312541329083212102053108202297680534247758836007215220486139071741091128638505452260822036101738481918768120578834529930885032843468332338214627474749848240644896029175385104045688659856645221426062024389308831897432888911414414944316010763331281262581235973890151347909426838718615554968270002332886411059869219763135610736692850809498283104418349888858763568626218359772693675365334335478813100341812132988089348275392076257605274171608160729989915222663996382159687340262377596184844167241877430499467266696525961873922792118255327000888738216608308731076862754700201872012123299536865580913664556003609198864693989255054400782510467971752863106194886628216151529602069027034319849447481284632401402237915640524566126561377818427940870089696647162768112040175042203777960661383494935285891145967925288239477168587336692115864894200011358348022914538241180031723440081229178541616281104862485893862931314781580929099849929790025723663385256738050541378141257540675818027576504555692856993175194886865046922723986839223166952291510690890165099157192201938772180073744361395520795773414273656501934718321083650656676350516063046085473676585281605009155309372032971540546011226179858420919660100034986158006779424245268971529623483525659750103449182862259059710785618881444488273733830185781054259823531070834521256848926296318580901514461365294130225580731088689780519225535627633596308381077143519930759854675257282942009805297410267669201305522661882855813495497652520497056053749341782487262654372295554021810241157615877726221411357389852569916914983039078011639115242061369651371401013692164044884974391754028877524959096257867901994221198623002816636508756310729679857551117387731256752689642880393660681171598157168842922124970023435776343451437495070027872413143136382052730545706647770154682968890759108065134153342367104434332811695524280188861318426064822703530749854578337218868094306156272452304474994533083367209766079100311153501642596737484121665343039295709715162425462481765140610641555838017962917754230969231794114357430700387322717740738700586105183786602763547733814371035174551077017360266838442258888747614643313397379662416429156052575407391376193894937027042516265648175002807819642603937857799995239621182362330573252823250875082493043588960464387981115975753794299806069252212548430384332671093753746804835254281830285779599456875555812405004701236669125054076108557987921717995111107562970578244152387726255085686848362480641995183322918564509299994938762357299373267298403967538867641015301737963037778935533677014535475081011324338102251375453801006253492365919689556561806644926238039334003165876996374577216681658198479696434174576239983489285798119562279428430558802982138691171545290362097942755344284308392470149696692385008832170298237602126371562027732535865155136205379622116039954181782634415852155025443272581908624586124718784401841161075490255822610513885381104394407242095324645046737970945278053048720938057263899032107869608840684733339344162087061315569141541690358031957803785560435492216633041206749563324626493755605530361499281079517131761927349415342519441964635054465887408014195734522524559152447637762736882907199165483902875080669207754106332336256502832340626975864600210262400101441051902364927900090207197793645715907214990645793468082625989637516323092550321713708619296231930612607825968554907168407524424310608239531294860686660184589407429093110615079805651419178750377809588496473618838710537934025083717492051238501689615871861837795819859955137418083137190691464237122867857076941113699916940827867146546635155598183891552561999272509207582038186215300842416270615518293669136213077130202556885240270140233207568925519285405771849714349471020896876819018560735591774498811447805373682376709486718830434425059480764671062008087684322053388648762910271810955868607713741226069257158205406990492338283398598719259050095358273501618694951416638366242854951116180369522536621635584125214368967250494375705502954384661673054380970138541985618333307703413139071875739741609451613880135268595475819406443893674820007777916208203877574152238813569011666641007250697809462612754152291481878329339085734557254848138124936556185175334404245302932807118460919917012991472799316658902876636875604608849255271382448180701117467463509579827179311312155647669973918331820253398718845511467390114875450661531306595628856340586820203397692389477774363747053287232618196637648971073255115453659333031131019093837523754490397623506257940717326344758993739373009238759217149207727342988082941988655737337424383671105894614626266075399694177676862204501649525445460526198676572751698707949663525811638304723613463002135975787275725219470228977700513200757408099214966882862640139754551084791362693587493746696253240644150216789661628399342329702628214903408580361406044014865241815646434858794634740793744505042692975348467389001436204130244618877930798247365606706702153056279968717165902109591520761795948311965675398848465582109509788726131456674473360619242298493294306142893529140284629321460464139719168132403285421872814168793663610126392388471464309607701426225262223971884231211723241178528251170093721871534270061933311595498730543615131823936392577568967539517223475649003844997070368418613474674308765914208900631304862392751757847981277864004326705435717501130544568703269262181355349929067903403360424878045142937824589905520457189140714116930371407937881364516096680848055029622052790141508054303412531022029881056493817180956519513504013831135447586861323098418168321323757426239151245839501767790833857439105288430536520736402976318014980944312078301338747341912237683935233667387056271874000661136024717667617300205568593418411197402206628045098944517305843697594277739425160369909705027815638484482958311632383602361876126761221791635737974614019349604656322329612011064354929806407903660084039298666417004372296693731604322471838653582941761393122932124245459427083911147218652760745724866541400780804430839314587578113265531861843024870552342479925640847791089732550690026132077594543080636376137051201361452908792574156595525593276359496205983398608460565235736958415647552120820624337542814051703358253495253346020518449244995570377607785573434495947148424224572744751333165970865223005975038198457701646057586609251267367198979242242018515250637248688088871295146174992472816153707592002816226506493229697005533132193458466936497983217095620954670749188705355212240606036419133669480054626067267215568269605394789349499180845560667795288877079118365476136004044472585959458435736732884420822122890055697499620834968636670013561346785109748994354356515605620136568323207434115673380351968083658867696759771496500802578150156205511916453484276295580223652617612841420795331185687514955890841972539396331337316916351046072476706623699657385491293952910671198152781372078025150413035333790575059925316323076926234904691078439693919503812227253037319722474445107099146554139139585293136217432533683023927670384608882517657875687679367688826802695940687804841146418106685395001137486599604050942632173426026287127546531963762849816204839507096419762831052044956594159855004016940136789708720248178961350768270834378321868474677540495878377199733504049533538772454398417964054190556459785157395626879579992047816425017023482764979268964008018829532737403651620554211646915489164186182798316074919088977587575253262157720481892314821402725214316039005468056289053399124229893419377122172234826209868816665230233616502919564441257594581002453851979454393138900571698717665775892740867944879706667133985387529742552504368290666490233018000734096980479808073945050477005629620854568828395501105762860460748314986895073828914679474789748527513182033344638134277887902612963472901444517018438143417821376462657187420280605697389887995845254366288678659909456591066483923766921200942698991230878027491810036505479997723983042656597143100832318711397560932673606500607519587893898968006511950931308681524097327560388960449834255195599188432513217605952122193310060569405443670914525358791994638454429432326366615887989248283154920673603470580706613831867548250046983629614530832844894203115195024594470646988053908339618926329288307421635764352491973317395839783857928097959775462224577413155778815280270140280183489248197763398347358664975682943231645235787590879860390876066246240379451402426464566223188847688056924183288654691332901016380627219840395868061686735569710546245018166634138876378118656412460912988305033297231269719605327649849145386179128799275341959272146560632299549028810907091312356730423946815705261442498829696311632781749438332180642260451002539535926743011856879965684711808678271008917936930854554716587677417568858142399652272251496972961508077595477789735977166069206523904688265871486630416729839097194434388762595270762952480989071480850435073905871744681266533585665209763017293860317850306798448933509154741534217851834293717229819114541440577969862986380475729358654211570390196288226634588777383624005694618664604870482825275085166715081846966912011861668904757769629316542538464272966966702546856591634179170709790375852721660931710156886246555638054452364617443736259004578487317781662207444596091645029647595952532876958226373385749776121833977179892556808444531368422986141522654432213299872447682929801506860334099132784318954437215905328766159443181948841547946909751109178351160298054745607824597883460815700319418238597794230052904049854114762246201612608843569776717411765428764240033085327597705212634848400300748421128101784787599628399531772422652689523483453978463030948044199270373213609678688893993034604283598130447131074079839261197575844478543836718669148410596408518698649459932637590029734297837119733638416379734691214400231064602461058933789261762335312910074998462409709331485382264652492013791865251784211461623485811942971957458982269248373677379612275941200724619920657380899508626812125097502369559452314833258864413444720065537952020975396495991850901486731351518109598195687443139747651552324013557805886418933529947085566865372077889287252337948184687538937257038729540045045833436319085659052025791360048431816233635756387365413718971976625464688697596872128350645949087909756974073666125132452461233459265630928358888029908714397813123863792474307470691350937641561754523107565386801177756340991837065258690416650489911759226201293310124738536232750688214749827030955510983784128325372475161469965488404257495219056316372602483751466340010554492025083921368942015863898425791246738845851872718854832637858632363569243155707638645306391476136889149752807275946394403861412170215765362418180470323040380570108221370431503601899546230178315197685525715751551466151447719649094281690954346804349549315803597832004615651346211887077409928332658606628047657899854892509258886520396187956748336897332390926965463883841175378026821488605835558124650258632093049329910306812195104846742621837268128757419047426852922265868309214297082105469372575975176929180118434696948478735635004350260201072124473173510817529991708783527540203507444126568487182014012707333059916456897528833512138866463890054511850816447254550449860466339675370632744853836099597683423899729790361675693473167044458084656898049689383627760480335392379511841670954300312096099484678253036901110456621552286014981635335946702031364827302207937992625799382112541273652331824416795506012521275422939402357983947734074160692210440586935413034290060455485616966151091517939235565251322529005706626616399840747556161292409265342001828229214224771889207206563499360255538814431913796473292313626240757295374922151541505481486161439447708184391503375595637129668920933750343455058857906266102795051632484347517785978295775323313411556403338574996054791232512815178829995016073083615911762912807140943265709421880676954040922156791249216105364614646174270237019981464259861076961147343871418287024208577454102744157251374605807559652989668103983522331773005856798736211784358073721485893715199859942143076831892246250938439460795076346481880361828367706783175298020954885880573255887648742217293879553030687797055720059330561244848166263936991471959611810810988600032990009574880224663426077308171049142086505869148868192698897864934503622373256781630869980093411805561454357990857799965478299502781275790717707902607222618674689348285072030524157074910082856597144675664428920309135370902987523038654736312562578641361947882296467413488060279839437488088867599828236051930534701304652672217445735590772535403370902678093448222682680053593274050927198651958864999928587927875397210715075391153809797413174486913411766000980892551332294603430136868166360279931872592391424354929275993507786607438760277234827033453019219188269528949249774088459798992834262074116509659699273948423691240298934697772845831203728284342734080440582279279449385500813880860469186297615049748852512933782219769723482671459702540254235044536179822421216874614525001775749713947605392725371515410220051017826506129249370210074713215702646718970176529713529170846693381051341914295151409449535274191100251786675606588089286740192896220173361061377707404659207467549180382211210880569761422139184898779660299310669338557566288780097323071845964934545679097449303139272190049957007922314583636747895359566529361116457007403202909831940409008408006455189265916040115644007700978224902795314347419690556022233793451243422812163267353732124081552859052790805333444858580117846540174528080705596298960709801527940509275683218397940646245808634695942020582766084267011458198139134217769109493631186188584034555691133503811542411654924031597346116788156563936844605336064630810599891078683964173599911243401859150132908382095509344410768769312197988782293593537198007096111765417917288730733276028826279830984888069336133917241494472894000984748321005289428136407417143383750862604881892027565094938513244107402464312659770144751611495298642336640575468116437589335038757968609333810029938311287642384822983177956957457919821467535466615144194479940271281199097752277123252119610598482866706058077704801683207381237291016268712673697468663510162172182951210923396488561245335863030883344219370043264835426428832682045085253755391670342298510101240791652815282178053877948977154259387833692525521791097260735254755618317567726589263934090236977898070488889533001768033080964352020515624465895005372854060191248104423340744299475277063476859885100620036971367756235206040881659896008808970295379153880140188652519053561359286184993498714652572977374716481459400154748588295102164232072066728177279872344476533302549821537503226858890572258422159433131778568064332111856079614287771157174759861565675947119039965526059445784239886587228092494363643338630209966115619657624250037371779165687655095648387588685585792363772629008898474154430690326056968717544653041367105232246651558722455468732326955756053401047309862796011602372894278565100868637091089758266599361238734206663049144555150539070595637588187554293181813486405153628836709662862512993035807782770529389089919949664542622271445208193476990560947875444134292560734053337063940557698527728823901527391674988890430190248277740962123437623771908281171405783186441817996291976810993186075556557998226961899670505172503176970478318494381174105275028007164338657876084119897513726133620867213265307058021024183986849152145662738263711400764695322920097385398830140165112304853506792641405855223258965232350377597738969524234776253945915473091909670635824951733894422842441690890589660074437808252302182164094347365335981091810165325498936236852670961537328994524144662622431693237259802425553316465647703219931940096947383304113797575355299426165435216249264901202435937549720565760272838440903152626779553219325273970382404419424587985859846781540788635587515948941100411778748944502650203511973915518963080129984974652062938675447263343703802103216183312660101358702610588424035217529640766864782156402917035720017055514736724330170550520652178702579779484955594393385996288966604084534992808757887299465721086827531800822034503669206341119390769408551044063234359031185562305536043937417842317487170226200062346072656604035728764188813684832337862573503838491030861586594880626236663590941386623327835927321717242261635468987759100931389908205337030770125738718912435770089268772646148830404363784732440617363888102030072243083955413007193831439679970456749005959094031979836487634126392952125001974832070209779717836871185108707618032380023315277752035894893300486819522695218370814949896932469516548422492744407152604262917839754341539982172145176473319158732484361020100096843159572114232745239469462523284332950336060642864278383011730314933243463477469646126012777763143946081809278161847363459726085802082993954311369716895213259145683275933972210865623028510820734195492283984272237171447600320627621860145163832082725642648053305440108558000290856661858612943374585011721473586332779871910908665438633411015793112979556722608816324261617218240188630575982778748753216923065833352233711992412960663285551058869264633439446795915954686294614812267851897476985265416264653881588951986235110499785126886178087546621762307192867904079329799033213058893242834314134564638404027209296264546084794193282406062348821824423155096768904504497061310235195168378920891210746365273129740636575425724775096719685973840576077625549226389290134994901861591563708501023107317433094683524423566926509537438379112112112658879915751136317409207119917901667329649860100149711346557414843299024723560695387656137649394843018433478356786091791751305745282035536083934703526256356798287317181098199795831694546370237474853953650490965856766206827600821037559521394063663183057061934454436641882284337706578013703943005306609352594266289781854950351898955694436213541830663431623291621695983012038496943108637122750855537092780036012131708176091919272216046545333582484727067579416840034091823452982412452608419924000653635798647992947937057854184661089608239599508185063613570334829533970740227350035397393155717000491010204512679354461400115671394772335434139709506541341677872172226232919488944890308313364141651038254765895622435753193383680251800772959113895329441321721859304347096223992276458699860095587401063244938903631524427854527566729843925507208921156170380241316676078047203333145097818042063695366164952250125868882199360300793348864318938743538350779520736015874513241645425213979256676823982493109630427250526950543131849623812953265194125672661660564722217583709880675198616844293991683931488262348199697465820163923974650871923890267949940031368580963834738838382045223106716399600585770193305784153142999204994212344264185603545510277282390117483700082920984635953011329815361699580130063349632704773033869225243280908569596520924798977694322277132318091865693169389910910818137796930753149498399877281880235453475339256418983891401212406155809988252657479354535872175784013808059440368582374626977844863590704640726364297744401319292782694774852043441693789987538844035071829495800277347848392945872711029439190143738835446051406882570211233732353055205031785601381001751490539891533463476060914684491865795302793124812634292938729258908548785949974381609026349427257680016784008319822904823431224402746515750618877298990789566549591167421981146525982486041286695660346918649040893890529952835320375384828169153724378204160041109679640628149360050340719362200395015558988046003444392907438562636648996672619995607099011884690679787327881837494215470994195935009191107945020127290308719121239731563844162352311262518412437733499009201665458264015815084041372907673911545500186625364412514055512709567948836632239882862499529369150873406945635957430892689287223897788917209404656390186123754643704792312526659721911710831620882926714044399797932937935874846204682834735444913029508832604600747171792330300686670068879045983191414914556440968290589354551936445290932282717284780345437528663826658911009721234328805723634742252808426175723315214034767241558579691071299808539939227912672632135448482769304015962884348742552654461754813556572068845625918388293019201590573776635466348340225490519233570427113140964091080026750991318428149521130592552801650429338683804247951667750614813969302526367422406457815563011843737461106370447413823835929427571149495806735636579636505246039196761251582998379113194960798374548881126167046083541577264690350164040695374390403760483232487426907969264701730604605917641115872186492751601401540768096893232247106816237370071431262516928009116525918031071732149607695717330287664400388449004944403498864333360834519927216481199359488483600349580811081108803258488028117205380233106944766633970369772033836667500635856303866070883281834303457907185374443436889871019188538271949884260374458219127304807439449908032641760467442676895825187712284759765538892708197843487425672698947785306797456136861074026466056025262726253521599259674374717153826626922252778432014097817849155420887280472049764295288679353452257281475683610989060632309587905680120375957627610190163630854609626389444794718618646337790455190841902049220437390756944540835564472841204458038075119485233019599800644385006444878260393031248453798817756948921281426853927876203467130843966604509890604936184239397768012564657747251009692110704436962950828733238200269704213001973708578284212609185512288364053406427420303718076236718966075921928082423103412412810073729438174264930535115279310370809436535349704372122092772808311205709694838483480566612422178866540874830727924909126015149114122361383532493824266615853045739591845281785115924981801565811135432910818553666710891431263810106402449405293846623437189678807007567580086177116082086508543729472080209244417461996105698618463632958636895512937468286886682404553092230351494222523983785368113123054100219201694508508160335783567635083767105664768942661296097468283896289743762752819459804356761526930363403745840765716926799790752853383204561001290717065254048726204539116643589665766760207503852419405772018558805297914315650481025104791231536384841908392109956913137298910477627531090150672724521128080344094934375618956437285199128164017185489864055505480273524163381538021863534274161007995170494627712376739573174171577949643459882973059466169081648635125606820015220192986268562363724238995378028616673102128718868859658319934729971451370770952241624919178579880792404688510246051074486244400907290665535504891210734791442862664527925011154938086489761748830213420041441410795441427287670967734944140175009830148176010626330199995334445025129924805020099189346881861627509479431811633412006466439570334316748863076684188151895455803823629487713358007691599760014770387051723147876917505701098914898156122133031445729257132348607973498863402998273351611396186096977683334633642642475919666944082526369731541662808000659382179410786966504805500337258129350693101053207255202279770041500327998007405564901936828562060547815868627270776451890278957005689876700179680660140928575716108494803686725737227355919718772745097589449324636885629611882714228876922922654727015549270728493342955748787958683652293011241684802436474270400250339991796631824618261137921681148269031570836386231758265876473874785409074213192879447679603339755275165096464233516262846292240987012113005142402910732427670326800972269997556931810321969623075167947349664420039190015168031606911955116810359733062178050525928264724932867089085518874155222323826592938411100883237239419184717929853250063224262081910303242946266965212686054995542914328193708056213167768755029525425228121730715134066039136166913974313475237170559641391942930559556154768506208515234225281915601010429907045194668938269933118586223266628686524560667715561982855423538455341489501453565071388554543413749648778431986954572055748058525780086179666897015651026699461670974852804355186180055286280122388273709964778105732046855525585709331418308186257861378324726572970321067236186259757164365173062037174367307490246762922896153572456886183623969935172618995367851903065774032456161997373528485650562680301728277393976085706730015645692751763089210426842212469752577387265542210891229336053451882108895436093074719896835353915251316716889023128918198142247183496249375669742767821529802640336650566896509306560107164502860459284808453346020497140593686897163253179398741826121969231913899808762316510754425254214527198383609803492073431918205384313892349547927187330484542497846422247526867514548760491877160241712023567624788494434928841060712611775246913294873725213093415321346717577035639780758614167683275903632702235317671179998350358779664152708154826805626435810369727777705898847828223156530818093922760967429057841723216560880367472838031056702612438620596147962493894376430630634116658168081135637041043896498551610069029594620049986471482218095442076018635583292167262827239525881900914642855602062909618153167647301300257865177260440887047235966117406219906959148898946796785265630682107773324332816340438606462744761386084650946327756033944718602019303703826129060200685372385470410133550988380528141702110978409620807711997699979439215477794486894243415014562775659596501840302648309615813601078200240905076464301671678264357564791487825545492125005154563158399916778472384307047774025570427119515500850043845083569416806784433720974794127733799440155379312546033451236785670015641768344045426759121074314580788072339328233175418935760151263459569043791957344628793101241465836126365790826768941084010864182013856048108214272807421492723962155717422052392349992253004762661603830133636670865974026200369994082612122983027641984627467154924303293174679552820647120298635038596422626633367131070921212257380172519157892095091006266106336238865213631462749009201939446412199279992873912379794575302535380996591374368875867370683269214009907039303435258154034127358427240703569235722463117102489618311505265338894364396016170821820757424555729645751950938013045267030484071132579919704000383695297637175849308803685050271199402133951319424587426894270817726814085078707537025481185285217124747104571388430808225434616852501972955318332785066003160125045393202099220242221786632325664086168705178937882742242277165746617028186480005318789740910675334686262814998827237874071631478811776664224908230911808824944065082991981015553822387296404044844386735156296816936867251534686678253214752937639262632738482524494801384379332337480470709169945386371509647614941509343253879599228405683359341651150369200331627869129155068673882533164331711203264432784443794776075453809372085505973211287995413910137967773765035075707572416004974965375019430059449672115197114300308341296634363994018174330297705356895856527977484502082739452667191333702984833554618443509315932958410103837594032571605948350008824847778370755659616793205222944442367310107768568426622743058753667993503486152316260847004083332330934165984957571364648033739868094656854766500386094226118684316127496335727719622159618075553247931102450101054149694376997536689230943684015239637005008436776961362604652305250764577945044856588556303130337937637584568226098090221625852840065007874359290321320280588570788290885914502093892780043884142856683543161582956314949949293426434596312557816405452813904309919340117762606091291396350276557361466960427486323083036243880609805853987508200972976388861815215602054945816834928203725847667673945028734389184344497300002237854372859747728736574566265858956786353570529323722805481645627762807379385975585544049928360987093531707819283823266536710961820867633924800590269133451145478524723280221339382378445922687713943891845750409806611868670907219748024381644678781086851605483002667174026633942147115787092007842782089215280932470301448694378940120771506628624553222556977274369136892021197129214123263594672095597217355486420574693213184565388870349400407812238002050221101397933292440154429190620445874493260329716007771129191303341536040030592428787830710953329225322053382433402794995593643743855620097211156641499198323985531338448063465927345270793522844317122045095552926565677044820428094261462968855508105089039793320121397450575464235778223558550701675483599212849144814888133652970620146615312291602056113346547334646776467996624798663764467372375580618750128640544861527721799710886350650036297025492806666030463115163910449108678407169818833956842794038931950535234731256377643639809891076870027413672509017278335449342724752031217068013036299854864486679298821254140700140508370654161486627989944339229164887984150478813186460524403077637832381364584373993133638828939106376978010829730086696447469524751600169514925248184909347552458371906402894112143342913042425119075991498804897744279855393295019487193322201900767227385856948221965134031470815752979578234072872870864061610195683636663998136823702282925492401514502031130436657684615954108211084629706091437805772721273839178639131717887443026589301934722580722282264602230721192844748786432122622694374886983998153642178727677253887329096529940391620545690681265076676045454676208253215929693285211021809327343955990867532051223585898112036475970871713426656434583507474132880978383694284993881783628246832043836734870487600118712075146229509088907333216562883425010474157959519802753737353207074615734359950917633034041867497697849394985536732586580997316744690441713867540958059446378852789930297620222604833786957027197184006698392559628539458758277975628750775171072662357262156099911422044199119776211668331641095917636420244676259499477748560348602202823573665983770426282922735568820780900244211134532936029986419370700261488011130066473681600843990864279445635536649030253558266681746134732163994916058042638442347875574571919294921314038478195707704847242887613666027599240203590166042241934340471174690849959178248913783842199708330094706059766141282204703771349261845465467303949686774733804213775764864721402325034567509568877330744461204344698138303194549623159225216894758100480008789347237834635276279450652193595454415121670770058993190908223195136491307771401008770891360107630083958316519855924342524280718239245765071497107790470268951510947850084898361951159837168287131598618856023948505123054067976955802164238423731900524591132981388533153613275526318590113074530233657968268278701964894939858312848555329420551346758763412603037648991945626571950767817366711356065267604903640125757089182806339341468885796378166403252061915963576346584214070960520321235843301919111542224330257078627857685831760336918405043623623218177322286607121028025353816376982875087437289188692242440448124529064238399893918617384521476474527290475856945769548940414733949928109239080949364363998094818608866216883201409871009567794548425101533234569090375516630089610312693060075013396845329775390573341511572845753442124574506855139857087672290632520712822836898675653699908618283594666925898009548939833508608607260599779909008815361203081003227157528415246740299200554995948799831259966967806525309956398417425352543861623538307011474134635803745731847267250875746770766982302626792659921211234941731833882053196324508227865888959093887982719859970809616249967455654558771431045850598961881187639794534438030685376039310828691341548451406951017195388733834499617507054365137344410662419697760348536748426469448604793483530932640750916469203634994632111695419146368359339833746929053805269210488100993581075171407008234382621736446155623650688385406664750263808383762293216297895345148809644306105202242490456731839143553416517872397784142627170207117616546800488510968748159534050146410010900225410460505272717611800300176174751886985947613572282512798560845822104300231710375396317277094328371470734178310033428183218610039541143092072548258959267043864464067019986182140080743256758222364998974188269708680978061703088007330850301817979954406980309944743153559891729237589541344018176990147496150015837818215855483607900022663732655686300110093239694453332639499744272024497667341832341518261996223270150217325539338388475444196708640955072180280866107249608125454281286619085805121430852989367325716034183142321846736567033177166764958622722078083381202042487964418622425320574164505509217667075489286611913040599708716195534534575866921679871342975350542397202975526974957753497844993170014618854346782804011500877397090911335389729777688425147425653707225659768549265335006445942228732041557055574363071671478315218985234976551488390132425423807503054634266265542137826213300655078857699962239752567691950051475299821394882915795308134086830649337794708684433794705369036429172880274031644626953416473124875929802116738429300846368258041108589443155064127547730578769498657997299214316929898935573100095777193327343666456136807739936208212526323179690927158138732929201188422171096903075703929226961371897912656149953213489477096201294742738385902136137967167055346799290500698397301715510874102818517964855215115172099528516768891486769291346230843087259403358807539071183504277202836323683179078265380290655140041083740719498772639494011706018523988193688596387804837137717786509367084073068391855320094340208363746054252695211873108044187555617609150757296353758504243240978194894253561488051648399185550325409817923941633018831897300169815827459443001516839520793289738300462307725198142286148951142478439440317937819911800743416221271375057013264558879247432237718340532156058990251445907985761617469374174049678441215679716738971752972094145855349507157006920996807623674653318376939138922242997007311089636286145640685321012699136080416760311519093495183273488320240136224855610240134003134626860317310814142381469445745744312988970092743783644851419704393831404193089809870336977181337096190347252542337246633577184269223080133659191757033533670445433368346875296299597712382816252387319226452809710623121348465020836521844818866184432708251643138892691346300397967516905108567723009576758783140251278160521197786504211118003803877658280629033901085979269565501357187891176745582524331542155000436234325332651773064604028627338774142790245242183923664463705762075155544467497176172763469820054986252146724511695147486423691645218403742894405229905590313564067061881281936147158516087644390217739145563590052556448005684212375509470449959832354588039994963950899048481525477275883542383419590884309029779786306296038796100137911094697557722558499278494833301800755207967534234274887248989499965603683949638931118762378569545423932834137939138021647616118285271041532031479967768967462808938358947703060275473914250749974237751018161294576026327190979017858527604259806672994861552349980466179473571652046506342195244663206688176556106240872502147025613296682721844457249268312486837310823230261360564387698331214742713878609427817727747014502988707165820279954505779956773797633115663620397397289508489929230073829872744566111631572338222471484278324491268058258977023497243998988844939067198209483010356271863466864726221166286092829190808860962867602907791265041424348316701049279913939388016706714493232090945822681407566101660625138000793051663759617024346749625055889316850459372609378181761805626424927044621708514952079284031715105093449061273621226386882727965380249642434080605888446776533493338058135061734807525410509222833360336289595102939226655200812022605140049324644218351814904241332076450281003498689306907751777566101994377544114969360082451954596671173255725992859952119981246044186943505451985484433714684204234607713930938280777325979074551646211563456576877418149487019493256147325630113073449915110046253186604961336164705987026471007687253247036526105011083795161210599213425560459092290947785338107951611009854710399684225861046708990969462210054298677268685138827493436368017381290491823802175884434858199763060018402455043639347525831184432193636078822342855272045714074737369255993115783930109736819090487924888661206532460152000335168141422972804477193676562839111651217927275006871239204489224560659499951882162445251561519251541248698539440557530254984069771032438283335078495458321119998635017531513927437392901084739392972242542692195276630589584769378343518462089531228431076626920567680291911716197358785828771504571705365988485439338455687452361582509297690532338080100239588158759601890869057946746760040728484613767290873389593701930186035809192800969562487800035954203504649282600218351160276500359007615300515757508898779709877246512623459434858447146969974708619341633908471726486305914339279858862338017846384694050699293616338270067608418255741154878091279432910863846947853495266842413245686736164003947230214150059728260677166998592152224446922722452662753747553137462434046326231320967634891045845244598715834085735563556630887023572750027903905856709684257476157704227887757124631483082575613673921608702672850353548863884440900066221903279112207312376948419523363518890952580963345764362987689019978287277952578086509868522185854654213618794096811802407819350928688707440238724062879588975043085326106396878515638060391081322698344181591025607591793497200486019243990420559792338398268709614517166098033509667819207870694670445052964510380048754656246144268720559930338804756155067939792354864468392917295248902411941414395004555151105274496092565798501994597445334832292324136115789201898749628600240683858562935279953952763525046396599512968205865885738109875833622381771863255911903200835095037665281452075692485455860174792407834667524564755230285139131803587488375127641654069323952591318391877310092234823466809945560512533544279271701158598689104477558802992722469475457343409971488630110503021626875573525751934778139174961643122972879514029762422373759765314287522934382892975362750581751132453671903657267884376036661342843964219541887566119884579693381298937901406563419516192474661306516511725267669323609419087733340690450558165213454487297074862553371635331581087738855095802330159523967268648400713750438601474834235330437085390227380449117576988953079133406811397562588492545284394178380123683157531767298914314054054266990963190681914906510208311130377896728687657942468534543011606591877413631321762198303416289445543557360297724554881458955418542210450999122832422240671256313535578227419398806196547685103176356379705213628453476087647191624882510939310918226676457010246503649076887174058871800489062109983884602249535444174934077227481562851572448302453765047321847532378940907877851143226417167207865271313548633238344810072504878677344464081608772771449481960020157980944682498260587592717763415996642278042914584234546121362414297976133124187195363825151679773423909103521409278990450682793503356406863155407032340671391506418478690860575345041992163225409754423164352434991500264140292956147699696135281539726892935453106876852742287916824480432608704463478624349069682252057662741054671106465204178936003473244014157701024500525111785668386033963806047470587868478677866005941018778147625395184562630317637358327298263546058429323574557986170934591291167804403130173996890297165284394825291332954976005579513856860519351140890707453397241952980145879886978105344437928598187338219021315887361960592742773315472002853239408397789239344686421601638980426095208234422381784439647101937884365289752765795163630751895935377213417194091471158931428412311647990508749331887496749119177625623516517274409813373547097884797343831223446489714488277146796704707528417151005177758584705360452208655868043224502154261560328310031904546602778549929217020935777114230574433742647869213136054226574013575310385064398286790589577389246677367491487536907339515858623562466719142440369524996637703770985252803613777816346232435468253332516733074960201249413720878443642861735790578481437239478915479884748129025766655262300741908124515803036992955037147164379926226167619218381593549727846720152665688420845010280046156910091842431075734179979783749230883487520580468055061820398994057860895824863813246156474145956952950257440684073664889904226040560602079193578678161126084813574082600007829756702414971176685873724094152073889241847585711465880388970146267953322313509070101452690127057210105779022277343195276782480856529188340361561348550929855796859839712262320837313667484421485838926042660191699304201533766491830909468499432157653212172381580140823486192736058717317466163847683264531184832681703369211623877310612543643962337345035839522545922383698407681015377194206583397155612108653083191645988670212720030129762880942895247190983775045851394570956574880254102538475085951906008554776417154677487089697871874700602935649391122591469261263511710087692787102960769193239654139233235563061366787913078401419567070881356320830880213526970725503189214741870398652371928414023072687812809490256436240867996383840921607586376700609603866327956945454200216914054497140193729992601076381319927344795034858657960779221356583223536408862834118876504409798505054654654340618816822304137332216455898377580961438429059850323819755090293443799336410337513679189169504960056663576720505647998532197059594358470817219206875917266453374606287085863099056469497814288864827362802618046077223206196839764684021703896226885242604920443377925672122905761457061866837202922236817090556108848373230317984179859950962146699137111763195890862038319018061032059854841643758537559118461458584528636882655994870662977243594811242593731963776359913818723798612690418725118495457562018917042825869646026822042170164938176626617811529465195189729743965577948535312848582920828318037995320941088406331146501838211945555989460999499266195976995452899102082423620367295339270261124959008335815158764211599728620891355269369880777066243495576565602414466461313951949093817390758101911627280585346834490256559339783660736784597741875456385440960717762071157152054663841375517012505847417609854817536768451158381471816080654008826680154523338651980071906453012628196539678057912794047592200584891296694888963217168962672527132555070744099176536736468323874720058609140609125633443807501075614691579295085050547070656868116338927157780046853815222838857263960105057058243307334956179789792708461912072633112251197557082335365279102007024268161463397894521512991183827518360244054304112902681963889699612182085241809012781165396831190827645273329640058674414682090257661164073139455063771453745016860874539922946234522818828837496340942470763000717491170722821267660042795470521180204638104755668948924724039745847695888633985075452182680439794593084627425060093791510138248701420978485908934470218315026316537964710422414848508953653174885833202738382864411676022315464960073515324718648310766369966940592029950073626018052003382192830878675968406343999421251846765507910757723562376860823556630936746998493392075127302143459749574953145597189522407961223123553409134909993234776071487196398726480243384457525538908352522657598897188751829310731782947814194860357498926797639375692780897942649640984709512814089650303781983675097553142351844585048052518999108785885084128715673248602784852202625103212672429865661527695246604319778947900124911930886867136656012397500815427149001629595311461521909491378190818735821252571605128316359578846573762774931071481719546509212499934584164870580273389017244188393954501649198066523773617773603148318070338133033338972591051988165809681695447229880713273435088736826826770722034381291341169095581164119393086610843233071610442261294455334123815147843960365561837877205018038913232670227465189079832876850186118464035832178304638050199921558206268148596626835738621220408323149112415323716735712682952546582245705117230412997688385500025680894367542856812391925356804836843226527830989696461401860946353979452432274274964920385141721059486526602561621700757001951723017250514112376787574823102663139662690924447844096274279748103136259643012732398383704025649960014459222375208937377135086960530601311256939481230368773686301164318462671604583327430309190082530180667483584749343753766607113653497482984301901089950970913459388149100613517153938432877737734771821280254447470438819087196192237223304078940382387097398511730500403660027910360212920875397242062759420082766066071073341577474795254519604098132952303380378722701930037663925484469314023785380625108348136087828800437117299693827825611561606438539305841566582411873588437947478804984065159864435345076088007997181939891110871504386314503554946209094365654392650941459734437752499801655609105275249481281179902173573014492328741267556064260298802557836413692016016617669748043542306072551697935735746825089695874826948731881544269818023315400606701953197215378857346583566060188867877883402696009264891214523761321850570390767193931751146569912952896078615794446670090410139420800171065178067033197994516163258550311481959276610659074044524985800229299228966543054067588746481449229311460408549457355981220577363061921476421011073334112714243475459628100874153150699878674569108206416345365903297922921012380381007569387269116011092957834426860655788441475726921085179645009860474953277920185440079838954484886707511916628030508605658217777697998220345113976466651924617025416334341044221145733295408504392807954396151307885264705378477983896727073836856837620235140207456693911087053479132411488788790158615971668352740445806936367038922357337268462210096916521348168176682743961853038638673061119918119187716359164169444571406379455424290874419543670817530677676541875022056511296774022477450002728679040664986471899711013362194181815184472591061447488424875027349454680510566851684048259975803596168445168373243003982331546478158041588277779460034850719864600409493977640398092361316514907508342421422902139051990165573319189692423186174767104600600148134265471179386165793927640354534589543137690424787165731974481919188300904505418400996882308154835099253666611841538312312998231819699109801429636853713921345260197299766841937950906406548032602340054884977654139891095815240233234467133442021495220744851782237688425688959031252711264762708767338357468592642121004081137201237521417098050822536684007206712882631152148490890523814401714196984944804679489675174776184049404631094279956737122753825775748085792754776105710867256129753274940581094794847870606374893196903901621417734653625666077403420493919792655024777067311768016577482896998471910716852097033010898010186445031926303162374116046753551168125391955617905343365937938089282722859914768508181201172867540470665654742948597222563280678451402182626324367627789943262937705557087265579856057809551086296577566990613910362180278129785662042808063521713920147250640452588776439271155252643537150490630447948841296952179190073624651786379689854808868529795126378890858504242865541942872273056884845871457476143153314718677063731935291546180195217512217731081929119956154340451468735032164383282109523299782542573539172290016513396984876017270183825894574556108791029901424155246809340828709852267349158535664375031049444588500491485483180968913365990395654771006567422899781917903880556974077808484614702490694200671838213724208851280759884631990288078363988372431080994688444143679764701359755518252438059867085825863935412502662727657199067541943193285433812175474512578521148274909532958863395251951656595291321511692041940837930800910247884453729889188341633145491480408091982281173152722432780262445509782321678235044878025855705718538907483505898554256099969620966130090965658274503055056304302205589701600825504127756601491826803917988196135982155843447379573702413895350487644347515252532802411844463140907913400762357692797913754689226884736149676856077439534956014628788995262183121832769384699326248204543358092547676462813616252866002903472891134064144250270608421664146813965398780967700813244277543465345874410359433720560138908410081960804386664051419536311000388461950017124667515147440366134559808879788950521931999172295176273037788753694443728709322519027105308073803344250662527867491541720713646960403245267328210151103865256574620291837156086589496185518608531139968035120710186676603591051690907519688103777386210264556171179825957862984636184672745364037121364433025001866944845893062929771460245708428537857217531391554082579635931071315989384210450732463188365244921677970430073450551852731279385366659239344190124417726744852219108768490083445392411318877611652510551507575859804011711680935050414745944483162589233546375855776767002031155304479918355861115050998041016086837193337357975553651024649345386759740045299465443507262891914362838579825472072300373383314140809137622653162428553463542462300076344744853432331717707644082936407500448460168077342282673654690211705120825871739934721949817495250924250726925642789857144682543911295027774569440308524614307137969039330836064040018859177956858262686679114699075516215713058458238926200549247748286076368766901533212848354177289041468683550109704090524777537298208489933703135462881564099431841848525123082824584262118062924394370484670057600731014483833794809349939449513215416659281982338744013219843698812101653169164961442714143245482547387629724500143589118257677641415351286224243126644694731445894464907012370826536309474640534463336976668148365069960714298144682556320014978368933051669087408158855984456703270505669128365644980537540195891176195932619380439852108327520574536278469874845019532470297825798400478093569804309947662567686031949573083415953921209066913357170933142936795525992559921024120101313417481679563312303503160869343508168983778370718810001468711081456752658660638884619648395491000804102621263814323434264516893555329375430827852957296723644138547682740396981624166189947325058111521969662924312118815724801397142272873868447289013964235982967010968586926180105408495917618647401412474267934889758834498858014189818668698566257552425115133889558784816299389496397417033311988726873131528027212434926334053497309720298910228004908373296479534316950778781520725900232954876062179302157414640607899306414205889014396961918180959152949138198462355194937194456512982188462378681558730644868873850415529812634340472775726538865787580204790312618484890551873888725947776814785942928251702376169625542673210477924328163129048539475711728834200324746845178811691006259463580546059295237249941449674655889780033821763324072532714591843213015032197235641764896047227129055747346130958417293148044805889632654064150538697516962493630444716415940433176064306038719972147798773892848955893028582296350937617680827682919135911466714042777926514452512292960800340786722340541320649179899342782139190630921424731548524409813721719049277450147536299714482855123942922188882872165823371928562075908049597357931836592697073626866846662967056473414696012289054649334216959657450094861720796723399048221426950965351576190183628497897472913885974861195482287233272330631073272906238657963912961558017968672419636993357507327926654753450832552123516981295456326013018790230598241273242036157017241368719980083222349838069075595238052192860532054572107246906693777913015221780039950986575108200809776528168571461898916911635158704269356305188550156111768320987228764381341870572861116475331926890642183771521971835146026562830353905646181730936806570256764236706591127446751335707108810195680022570551336875595585544273574341544072591447472845400028098970682853724683437493734410851193196097453241753890472845085958747424602856097878528545187775407997154621177303031339100172669288976201057951121885825950956918526102107090036450824200069159718001599236330078833562106398636742717199392085787672934536134885946613681541796565247637961760715070517432423497976271253568381906775894367733653120631963151801986593531388967149711435973775550871188943713859848091954630234668612328899619278198946718625627630057172226198717255668223923904890768146987080707751220177091609648770120434768279559338063610192024519833268119705454153308595651538813921780342498141963164905511260143454931265701556562158264090824648351579043435702893453635054819012476149728370681444278505199006903212896548769236882909068546671150995589760754891507625492685131792418299782542728547778448453461101792924207968158552174577602546294984095234678192840960476386210024350185606609410667690932843429705931268359659552164788030824711745176610929643714782697763464025941436376119883442043651405819785395750254618094489169401030013543819259121122854238722988776519602373221724050916405650079014770648187623734031750235491964410642041932852871687936595663020518293155034697291267571007407824355433018154958785858475434507850904892164905683726569122392614760515053956908698779269999187649883835020011034268265026969018909896424000140656288941654229991152436190033893023874485198177367035859326595056483973691102528528964240238162690169769797872053924417306882145869496570622068064152567048641672910089034466482148259576598883675676559305620962774588428084766784414116997805736320364832583212662721001886011390639353175491376666606897406774841966431435260003955902744717191497660803060479889578097868601071357264140408520715503208109783638446056461520984027952828516557607719738796731794525772221096980949945273561032910012006494033523485945355873048645021280439047580017537220142423121774893185173329466211269176408088586862489556539533649460684315877915679859150495016361992776208222457743409154600833608278358758581453060018874654806158469935209424129086588097007658952952942711111315126687583428566179129561920536410044079683799872613222554918639288601507650870472774003701806254718086876319171696486793614727732979757046379755146280328266354020758820986430077712971580486344586381703953969346321181169192104636494630154711153619666625612026906439506854218786812240993780516646058740408377608389717211889712944024277671668754396479044681943854146770948657994287785792979803623008497859770742430848349599307423855758769983547158184688235373094032850678988103388739359527893501071404914173640804862181613420873011412458842231120289553227515291208261892442680444656692441590713999797893022991343828360615540663044391445778085139945599094074239762612456772578548076328639557450793670916499825916076795474644981946658952214795605488453772955033488494865214498815920404443957690438775163101524744668822878389148182995253640866407630244850888822773889814481442580382544887918223306200047057093191744017116590681555324789182407775866665100435926469674592435181453789517497170913007733429647167891477189372321676652882834647772070310297542094397523932163345722780599675988114774549208494809224706159973495073321478676741593210626463245533420320135047805255300115734651077808653087217338440136071977085011680526600480673446362453506269853330351107802011024714941904163599640702033334178009708280027243676240239632839833190086800100058785505242035602151193311212381125806324264054598875454442839222700398014359114677186893678295446859099994129657734990682460457444371064184692311755752541422151199708105198384237430802858411911034947006709981625809080232934922144135663658449085571277501979917843893240809260006508919841301015540362593229032108072689825169873993483717822344427052288062898849905137744969579079629178617645467526962720055032628667023552336797726063643852366606175531613341317196197864392121268769055177347789594578286793751698667802479410433905992805940732000255661814631962700778143239536096104701729340494466620042894434699772502523362436113819044501776630394960920395546918993072887803159200038513497548607143872818383086380817680722559842374631006953530567999908324197175226060014824313203037348268169926095288097144322551789684890648663457922550958843785072651487101659277551662918941361681291844882428584914633290399404985318303936955530378939063462556418941415029264319234049598323408367493224900433835477731924409751183050397065819857193854143426088211957823771085106209820471610682278689620969757921676775517314616530623257688107672947682658597173652390580624930436511108825021373017722979145548745526360319873068471900353622658246145403431408136194441206504994577360905054778745696917584830341379595574153259059234508991895104113725321454131921375733178112506607565288638393093800774772362121100123864093486021508415014831723894064495994297265569568730807876269888569731031755846775128444574553397997813792654431921834421363070757915775647019542518885598183471508749639882165975381022375915486437492344074425523139962629180384112629956456129401567847766137658011123670830980985007918997025977030110831796067951569965572007575902702144061044911452833206811316731088885223390097768175624261207932093558751202518412009102502007023386813814634972054308310984171324107369665562496654937381813957760624019775704510736176400350162938954403024939727373854471651438233295189222680764895418150428010246315726137001519913632525676047478506575714031274113457537113188910649703107854178914089554130455302878654582163342569616634049525997099279447905529226719538257258587393274130154916630672048328356066972804687652587441088521105876230763044801393780365032533142790361470708396485178111545244300098858104533794718403395346580859879503012075351566479135465214976248731740221718399842254842989306171139607700220638169440749741888701799889068347341403175965274567786320642727227656038739437174585149316301185870988806202046350716742616122073255219743263265181032576138673817502982223737574646083182965575011782438275471222775799172556149461261270904660505267167223932500389201907340426107384301197825454396941178367831034191888309584133979272805382546626473199829417047335138373106220916975733273156589158399416510189572510284174693874373753133185652978668579739303451944894907199782629217544087253869509690256364913361662649103302968370399404779514747755870330411967687050772107617321483418530312001893714042946479603145311350066416700023524669310259433718669444400963997152321649187814086836681368125870117467589428150519860600640710086475174958709157959905729767405260915067140443398013208738176994367507976640722447299842158803184305897947861652814216645807199421852517436374675233515223073367877374551529844461509573192306345037036313453322168768871805379018319904446550904855025013177324986195190433459157524173696890570121205948432263283565890164054944492494351263003114712693604264490550542501889653141667181313000917724453608551190885106698104041467588804923153077182674791076853804068398921227580309702149594473809868273473312340587938036654043442190717164560665129378355602095649072482648351965488556846296156897637715040962462010579776075850857781777376501426558909658580563413806753500690392254667257452261154877591099601883907846796078591115005269420617357121701976371785105596442959618559023720438391967628002735526981355323275637931672939282477623932022778544033100210379546063147023481872886415248211452729969152894850131780271188121472084090813830635493161325791646756216819484619434213399002311094007368175499040105370285459703462333608878126345166364275991309512708416171091252888271665752450769886751300197665033144009722236940513663503005517281624212062955587593905225204836125872420287156842497966510035381857017390496082026717117234446921374861682933593570817241106919584808267765255054877674327988929228526399335672320294573301001520843029197879539804218174400897658113932684317529388849754954547596665544635912594206180442533467344212032289410055743489598571841851117728886296883795457231078767117936640524239691929950908446099602437176001623544091050434889834488714558740591334803757508108213516471546244015687292725425961643005362084352528358998024484653362422817109599601827699239352698885776941029330533541192182033534815267864184300550859195484210442525809817478579086995239359572577878359857446016518293777772864837474595440203648840299944295003769029699812826670409448793305461680584150168511183561532408798094923463652836206847759544700761192784929675948448992774264756317901512710819515240377741714381578912318556683115599448809641013883431262041387895097129237574051734778907972947159713776030845364618737701437543788226417693517009464573693269163629836955181552453496432755298484707463786288236903178335220459845956025360838502442970340189970392285865395671330968107511680246013657146012292592726485990026067413336342912103988713654170966139605163811546859346092725013904046570958813090147586439690356080526002237067236208245581181104709820327435557479421048052102582945221727461079444883918690338568109856888473513216220902224916728774326675355246632875935193968645350659198408253015704540743454421175757722114992310792258682019154490386219338234855437019047513801817401966723441526965608853765796515819930902713986177822928103138866085869256177002823453937381750059810088988044992163878606494194942003728500483586733358419306065079413977546321632519557047405447758733069812177634710857655153708861398629124189882384961710471521696214316529809386737702792483019120104057983961636647935371498532955879072997143024922657859098831534282291039354692521854358932834033079077749660374347639359192129174608455854501478303286948350836377823786093757486840385379733704303180151630575572859840539517606670680890940314761502410867637720572494875842467283500906724147538683524285131521824679772373745705655291821841553636624574535994728495285140266712799463114681763773933801244847002709448323561838029381738291966632458552074655518389534127169628384377734519284699241471083404269760700018182204794404287701819691216381554007876115119366692872982493573130991180381561849948696022256167794093781010683628532555609969925503390052027633657135364055586665400097666209196786378997827923885723733291301616727422693871941122400000852137552752735919034668718884001271277947100817035228006279688274415192053253373855168093694549786789710733924396709597311514345638326570413189498231548126537259395975675283269228288437973242922424415919423396209042686615963781323856273642608141820472118230036648391889539721693265027529331515394513993428691615334165115485101112923744798941721691321577793251660840054500252718711487093865529781654778907992517365552078125868472676816797487586252427646134096661776029377149391080559672415449995426515067850638413525415089100674005993952074787337038441672320733134525556389880446580080915750147942037139997249753619127876102451083024162313175339423890521136479018002018284869981683123004832474627600914139214330016395652367362789835704364262039618514932181766121720953319121045210670266874090641919066784531915512931161152675968995662200513952927276870774262354013616729425606192170846845084136763603683726050134796690309333172432767501077016178941879137036576410003615620374169634228827967205498547282836561829082987166479810334518370009378884652334426945447921995955901150236225598284371072480043530582240830473314363170265028896465972017758373959256362854059666662550126674583687965776797215056816760067845756991797032721491730412298066456848713671526919843460994186809763222427245889347264252765604238690439311764137594322453250858384001622021750225328190551116273623414797841749098958001' ) ; +test( macro , '-717897987691852588770249' , '5678' , '52992561458966917842048333229403244806917799627848421877881735070477262881098520765035249624964340882038688516377409835187369665592703958080735736766945912536313709777389461793817187662953548213601180992839097018162700540199444811234129652849225410276267930982552729151588039493817422762367215695837880393501083343614940195379176805915010804690716402053261575165097342342740863670719437568773682027047862479103787981449864557595411550480691451690239227939258640148661525627569354056573032574365819474479753874049318092332197860174730296445988139873008708564407683788184545625049358109338930604072043506368501486476015294370204931967091112231708457059830732539826223797283205277978138098770871113585235612923319080860928191126542635460138797782729492896291235430456696065935768220494159845006073392139110350323314505384289055017134916876163400462621881373937156047111273516233295024171469513762593244072341275620852077848874899582624269495895402815765777547424606219477655639449216632626280672365511304216574465048481409555551898153578798780997838187598030296504499299634026846370222734083675507056188173301287819190008251323703160735842279757966250463716342218905187576189745969039286653568566712245083192424309450098888181155360995569923237384829100088794333552637537227162177479701619093609870600007097257152299648831715938521942096231520452892461541884420652580871321292450318548928985510277252222535133365388202103209163165539197901552072608710284236732915850819518113234646115533291363606803403675185089565146698511010652775061073223214261491866092146057590474879116664838288380912194992229955697790523281474198511681898554287250127257584177956384808694445714111240128709963424475982531545945446204678284012510035965008794769324049843450109531060002528540713991395046933182699881232634176242677648962206607631738502280973898290005462656772264590786129579181328545465308696435762205327818322165386961509403474972525469518547542068305372202808432048462319049469153118249646785678722142597199696100956128198604501655682922926268156814400446792306656470188135722009834179368221149303323894575881803165080171867765138413350984666824885942458943042705023835971675031330773162756179573615771369921528023990741381103617964140627847781113773752668975380722356219881474606884340999916287255829002765995657643610750292167091336372823055491725335254964911991918866523018470993631691434109295300263601212125887194770564215757107756618621927605011672982388667069376436126257785256735035080395442838012293011886480858182971214107329249888540878170831338663664497081571648293369670697492303978168090750719696674347255594774732019346186950722015778265861706529434650218922964570378758677250144083322218433388621419998372158607084870550629095764769864396578302522198678754554607834625544465903300910375218946617943281021263817868702534903565965515996857490410905151194367951674404671401634726316031502775424938708095480058006939655833612970659151929020021108105677362480187576212239598103259569657352323481949129023622185672875961306339733885857708982104417776147428446169851035372923120375171782152648094932708525562623063044339202972582525453779487351603066880013958145443211731768489287736596200008852460116803737486674746320357688425959700168747470090109849460232048475582033235140686903423628462653109627172118888613705624945389644912331260448674882803772456442287538433120812454253132443354729068891796527676701606716457913622114298779919239138678095658602599035272101050540631199171079787674726148712746094500511958909309383648848324958153313684693020237870128517588375127269029825997693115614438073154312047924340357482412336581044347428383345931096734448615207346214924813291025243318597445591410601657643923497289883965796840775243249869681469920755474682727417587202159996646531840273727959008935890037688256043389201553466973472089962210203795891910446649680901883560841094031991763415446185012636385884139521383390919645656949585657311438685339885917614078799309904047978363483036838818577158746493373606130783588041171423001575976326332942068212106971788178296357879590268289870554895714998398477383074091612380803534549439364991095989289183083877933651758973534265032552397343750530201088858666516716202042806877592785968359618297523122663345711107589355569471982996246008945010788125903082708965247233856493295495884971617005159683177020951059046089360849718770603433176136962787644988761679786793574894146198596283619577589492917433648008790154607904592377489003959969338300144125428308936896784361334723137983098924994947562038207668868190447389976840741447171621269619747614678405424544476952607756858007392925674149003932269670585532289548230838340609191813200074864347826444440499651323577336653937195827618989214774650052553204749548153719625554328240930029474674929792915810450109353297164695948404332144143911830336116561122587580838323433271508758381427202886466864203006769876629040113309536126898286439306875888068434906684986109839807912211044229574073513385256008653277622489509139402265793326372569157760069106457217990235011506430988742050031863394618171218562494463476850191629255740324446363242993320648668718706796758945218459365076583628726166585648610786131608405727805072734696605117814467304269584486848714577856278821187639674139091420868276683680482402061170964129020179849417226407523345979683703744990934601753619379872634811616761518185857620947821097797023780246814812679446740501132957939033231020697754175111520932341860938863741889626558269454453009814222388294592392173794599397585978687451892813356296473121549635013676249164244665043044957101593039072361182135678926932958876432422873012810178205318591023576753916592920079031115341838800740563121977641772239560122596720253059357199257880604788460448454541912874334474110048318114397597184518307140986163690693584548192536813827180198436161154497288570678489493883807773676094581689577716104059811574599177659911227887188217401978474514757553745261264218832355099235158560242297233406180137292308698109610071281861640728221129462482399191931254988997403297870669677165754913546299432301037504530872073067858354779137558761312187986108590108671713663509463849235645441069025317032282653619885664511756487047824929057588473863132476505639554060087119089853326292527491890156165208813193528270287317866931952302862861082174087615226626147432099575255480389022327072418068332438673738233637882790315683455450464590709105784350178739780127964769969011026088597219619472341103459382289201174496483005244865985320414773065969458214373055466663167449827644842719260068316989039810368349530823214414315840300587086860582920441160086337872788129994593466901398749881456816893076117420457023093235142704769500472838381750950452685686468352355934718793080770041896266326591193598230038726258131382339638465090689033062834104050137121528398579502285618016610064410178458485780348478662846002089852720537701136965653853259363332024728436379986256649234691293765971251875100216741285408346246009343410757983483597963489740851123818712786795291798837714819930591978286010640687992692756495314962784887224591285887831740631885066445063662149099404455330521550962587381135521874864351037529468684827186997370955447481995887639571571525702373403403761671748587109161571183805369675426792116895119621582920253789699657615500011890976403807282199844302806272514657032217062946033211042074109494896045803992953473587506222506781346147810525891832442558813747914920938494195556975736956239077078403047716108873401240720217398379985768790248880164667538691286461771920136462983631359473029704858507306794650707316446091278308009089124701630706210560168792994743974642056525288870381921514176601924996181921908722977903765494032218635205563065562888264623205077967964252752702442201464476030020851153648989654374063092609825139716406169830702732441666788603492696815334157061439959989046789065423318960712201089688946540796678378497252260148940700296093007934347669870770800342086190913566676064617891161093655936605836899446861184700094847166382869925437304928565010472625277681782787551544062045311275114543518096882812611825710549053207666530027825046311534181156975603474991929909024388711945463808425263464957653237271591373069179547100808683091655216330416092310214397175383390044315163696300849781070219134615015219064302516596226701912265613020932966925428815092790344445459519486710818501491744578229686083894654498423852571127489975219254353172438337650602238280223597768220243105815348527252142824365262184240072688609964102457657199429178311502128276669149947703560777240739423309436247534508874804401314162274740915591635435183346939875420896409168143366133287003880010386186641170364265028042141513465453408101841921842528837600797310807883817569665409313593668849776576983790985321325237847569765650823790815463692017963395752927945155773792906513914253930342695948572439951274479143533256050317996678589637630517043566370062714774155238038673228364852986154012293796986173903941816772421914136811088242656279247112124439226958945034478877984596864873339798554814421219750181744221681578059062457004925780474249073437168128231790400216332672320703915847426463055894401088311795843457416623717000078714687159781995749578194250354449880164141903126715398601118555657753088212238422071158309996360998060316430904776007237664213238747361809842176066931627956726802459178808505394046664002938285314488362839317461527679372532822934704704470253690263875879702240062788026418261529389183596155698524599722228817999108140672748144745689714554812265041175714545225389990781353970530998752805250297945973556929670870774946985404265424068777800150897438843100570165412465536409965604362377295700424297999045416603027704210682281919437502308628718607989662408388051610908664802514940396058178295301888644151245892936386802507105326053427738255325180381762764389027620113283759653480743839809992357496074117200755535328327778239627950809058337055235742086687019858930046083297050726069315089882694837254737886800564117843966144822575643639731768343937069600705061564770014386059309401600994691145418984296800446891914436526504588487235668560512126375658106759961423238985938919327850368124270203404746108520903433047821070462173699752058768991623911437121303926263567247275258743101051399711951304774969904872170431870967998534905416515742768485058006433022048620528364549739197129869684349063800961670793383545725472346808561542828191153302612521938569967207547584404136442698715207952729855421979521420559878331433668100753209636435675712543276009510142074799136997641192447567079334735530723873493925022491212344710076896739154338361999719913499831623432329457641993249784570344228676317925346610689759322653659928903365020471696174639950909615303515965200146660518282411647170608800939660621685552950249611706475325198479518423077155301209371280575534360462938867984963297040183736104969929190183531952577283379234782953108926401989267488044466794228043770347285979888837421775091151607628072534183685174245345816369526145717126891495096063726823540297588186575358585981265343937095373338996442251138594460569709569806492449609367188654079820152455364920624125030761646597005088999711445807387895998396475835641806955712083403146532371590752368935420985233735695950492134965346564198873831201899225738635547303457400703163201429850285547082772143821844313238723456259228759115534200528631507109400219431734564426566942208047195491924187286616903223592310617985108600082628611087567285767001840566153820546701939593194433998024938689773662808625697973543664837705457336677737765607746286815865891347597385126417092248398027369133671804532615511954414419259304523253807140857494548560843072982788068686101289767274829556337961469578050554176149354133487258534215364379154660461310427570189912699705529950514413147328168458631103249872388038937376864265012237965847164952284836681545396080247290559401291604967701175723121502236181093388323626875423056619719092568232717945805103108385877791944344245670750247392343384296108323807858305055418400741553693700502565024106126585636797090774279356316370509236531508263353733878156923208632989404619022265962263865918260332262005803614050713268964027332085964017902372988449905870060050221522451244273428597501098201640739856281753377806262510621286335117441922221183997764738785835690806964058090618523209727153455617620262903964419882379089412045613968114570967614290250244897455062121766814873521607883867929237291112681395681208806316115052463955424369530957702703335301336133507196464013784297392355963686577412082487656646900727164897539211910515592015131790757084187802478999731058868779493827694303480414208944059771372285831516411891131036856120211199256880755033121745020506905940385581282403448035169726911436826243069847201133079363947969342361067328363441956715292529385906162072082866885762473853872136917177105248829462003088491198093528321254844293731158494353309329359943621539173472646030822664165537362617032785562181639419716789150739604369299294852110605262082459555983084488041202822751327819978152651961662242916641572040409255879415966668785223872853617095739101441693844227787889967257101619837706529517298805962370005920305999407921230127760675120172113782634335023130691310728800481538764425860624015422603351785485421993634219805565282967254634644843789616543323341653341146495092459321686531162492849751882105121323719768549112911144880654693888232614646653956763580397332567522797083319499426431434148243989859609258432804222067142397999063441042035277929314828603521084355742771233471852499158339778603981017500121847933601889420815095445410655577708991650898864592139988828909325847690688265292963327637387564935819554712076627813142907683346250203958929989323689935059457421263112380235019472983111424135581186825910973214910699149667710959563181536691099143613233601161732666745012245211307688622118221683809456064734882630698593204467656990257941572412614139802715394281994293120883156362501711873082011731962032490574884682131178885924065895059613017568119400856466320056952350332528728576467215637026738604714597593759418177681274482897193349099377791845071840865476390482509958300517175834887188010180465835340333367167368967646066303894894949259012937252758312734808329709232360933894530979086189948266744307651572635781288044544893571461370440118431167905294073527312254045244808871450613885567599305888413740007585647252065620950569327491405356998305146429471623136661921767554001049077582559141269075807726942292324962879195004849835063558899374919319497877100701211206496709025329275359077524423372451805882088092879051313263439053059246113586757853983808973560033255079821096458791208111949975520419973969738539460358523519982416915144979569986992658895580772468544281855421641228395656106360926287526507440986113241371749929933626943002948875469110027470912266294656790428857661799285796092963253692751518091473958954584426686863281912392953724819538676197544419608647219428371546066604565530829571887668487791705473466987941636508397417037367030291035726974209122929822977256282776129310660064280234827050717329256768834139633843952427070535536323343517859928713869623513480175609016408364304241592622958594443056559986989106563619631715224662514109451710877519669377700137922914878226108875076080968720985553774478319079858681651339801277697214672775772710298769965771899451131005224958432124257866462047576738776398467445567954900257927297206412032651048753538257470550748950042956467383856098326990699095531754983730997777376855850204059808381527746257418211558497066091371508074576455448794073221457106194028764995140574406949894779285509688637508122002763143590113564857465357157613251821223444359965532981305922833468097064802147367022534931051008695237039566704201353988540866088741667038552935423161581934287462404348346959712557410094417500120546248110357270320222372208679677188804508939856387875484398668973720610306440393165985553874361652311139176073072642232364301455756578533325673397255829115802632064375030488532724282480941523096056375612516691335273199076868478063949077979981834693199226789642526467313758886727034664155374708233413052241176017997770755357925454917422006910044558649830410441042783912087181440912216816911418077643846400706686847762348581058766312240711484387486718123588654129529313123730637305855816034535443508751239517641963906747738873083589048844951039924094554710311263734798500241327075231542378920749258310205825922008644493121370590192760015148501273427214461014155067372554805948839297269789248975606338557054691632614937241901458805041012227038978979812168094150773239740200926858206670986309560725257896194349092782159293694188307081347049188661030610107456715733073715420873434056971119630761658470234370438116245797515154771525887334083368102698399109278569996061959700658346646955565093203139925211068688479012109279872461395639869548120204532938913593022473786111209373901721432107297071448742770742412159279076830118439645403061943303917551223288001014702113659615663577592748103708841776873178445568235386839518530066675979433748005530615064885650866749177914061788524262808081456736332733040493983863214714692393115801670972860894965741349096171975727706157112301169070137414347667759125039407153467452265210719726714985635420293189470049637210766042254751512445609291095350283495503549502917353512206358756772848829158151755615008365723008445582823523075844725615067686956618810366284960890688672135540705475984841760373827462101875128799270857413282580082072800739904057148821354442778410810970050701431502851594089320392059591004827037030949407048303186582849254894900004175510461919883551638536839489510245449220044773071872011316439740663014720019722095387628672305811492191697738078092246616407460689410223935009608878423391167281114435298028095665936771603627090834937282850979762786426899134362341889415374040340896380252725754909908018401107333556100522040895675585460969780799009744922983914153517048037312468584877909733205649413029335540211297879068656419387807383048842494215387689331649844934805491180381285929557990551329032335758734597115389529509449814729908343459195813101027114347572133759851590325554983005153111501432758813072569701126690781490951740575825405497526335840722010023321789428374242548378889836216282253171286247053640123351326348638420215428018887341486150219038345363430704186782773219435948195386840643853198799818242098668338179745226151996534978279230096399308636037991368814207217507069935928147009785676785160027497317009001777550195024132691150567507011354412329032340603521157466518995650811670602491853174280204852628446269615787322879786482369408633164257134657023953228812362587592950746528121453810577970418765900895068401958324820738606431245080063027400254319882177028368653741793457795068935169938691425211024828792631933230877447721276360612404169065676636411366175986321744222814400246758586497722397143948714428396712767471630538898122410697568130170950184011778819880862316215372642601335542980464853249009026580690749759635033913834129498173805649521698922073038683841857811453879318495594875910979538327284780569733959417673964124812143583018523970514641401891081019284489763221082086325354879697385907787761049442665031058490028534622149846137905767487116029644971254430227080575349336243717394801443483839458265798732710051462772605466482812641037899172879970734427748668316293777647496909333662168116654868712457269032630974156741200422999141171874097340818602076458352626593605494845936264195396202806647904404677157734745652872270210704027405978135714048673747336292778720101960923698684395527092073172044177213818544969591585627238532808299570223371536372799012875224234778370905326852914976423861886454350497565400489482872955448045615907842220173649212448684979945647349079756570932865476086046458864652043811750235877344393220429343034415180297212581588145608747445493372426999318493938150343775786331056194752510426503166230913186538526760445807413799806204051029905931303093836872257279463684631738363832006044614840509662858475110814261755496445327276173263161251358809092006580985277059802629992110919876640778599238851224190806234298093499859897877945279235571464696627205637879325947667945367188005248720580469836926696939939415121732586533901411675573681854304269524168392617282088535658385037701299391440541334384518081022468387518749703363096233963804922423094068395126707285054702218861778016173542392815212283678372323848563282862826760297013819812339131493327915541965803998097384090951244169643369018641096219195430772492922432677413755019687006516340030964660067215342977430274756427296622985672207880091256161463966745535322513359262081324439248033434926360421216544044746832762555450035219016309931057323669695525075977196214861598745789848117118689974917406963326147153664733948922010644259043986576126492884735748201429479293157327397169116086340829373474447532461009810536262731597451754627874681161347317493618449699664690398390949643587566379695090443777568885944452505841199312483422475407319328641366974092114345516068535284073079980141067468263817385977308228962318323609469322490263507101669512786080642752319574742157425134152748843756299008728152305538809501024125010339213159780735824709099108882350824446352596024291069384003047531175618027373859127640704478972526885889432610483189753615050833681837753536005311543749368107499347315534545941713644730273702333948596900145557971505509367959108594407502948243020888234056853650963187076323765146652614211207546354464881645918117204811380635728429776867963381852884230518246631190131825530206787122927542913920281579736988824992521073962274953252144927376468933425658712672597384028057932228407070530265731165980966598601076506604289064934821557949717410539761505040873308406110474412692271216992858783788017692940669126619626790274625702146919817133167454141020585503777417647004018422961010432475942591656281157554753543866527442721860074055221343919493702427083052905183704806054896861313080853192781874338774353472175893928663360488609634784890485560515252214309637081204987618424027884591397424067625820413547165571090593288097729180898304860943714385424978418160835850877717027658521907629768814727424695191227358428401962885565649381238098204936255938797308193040643227676416950981533713051600283871175312807406414172316740879617172963584690587789848239482341701897688268557616992035582225306531638164023604262595670103263609695362798739463036593927714273709560324792380672245014432684528132529510597382659551239028729153767533108869546101650464606517031212471681999067256252173869702628620955732415793090541749027540473718940312552425322149119344958406002437705982398992267252296771928467559404038212669370252790729353944780711661881552113249584403769083480856475063987837244029373948596829428019040641426569984762280646821052726889241697080032561970596779105934595957656757479131467410030344286211442477923310898646446342650046369081113562118381113974544065289731235914381813526415129034466320886690781519982064571162447720218016309577515552126698701486349767343461948090842618080712299219097673966015228424172663889427342731020122066675346414052340618598182609249461329861211149036514914521730088889300616712047373574894553971526437268977130623792336839865094059220733603108966045443149552683777916379609517221061627320405151444134819286421255392382822364134687682168786843209394288411699746863444889434411414485519234492407599434325668997799101520066221602884158226756336984242409440361323534712903377984364440121709955882861088033253565408769726596294534478786779815095706073686709431442168829090896416212535563746063403950198043478906364003836786350526095004964058916984298874819382063723661497266846181942426357905013650755458667314604787157987764491101741899567408074361392569794087507924311908229702294763769391197478812554522186741135262551897352184690374471893073000220162512552332060179402611785987981834888043869118074160633762440696320006275857520907876405364367283599977809702429809327633774811777287837997929063319088643981288504577794563897734368357724456507233435413578168544122187905557510349163877892031860938380863700212457499941173051991635044055263541028899765559085615828388330183855986870987907204189354310066588413218192874980402116441641033329112521433352585269389744561428992772734752313702102338324264613628379476243754122969786509425444725576325781027140066964089023790292891876331352393285001370386695304261889280274262043056322796927733119572711356326685350484589411334123538058781520196877872573359539914258371620972518600167848136853804940166949001046871343046124149316149555200621260500187812862150026333455832936133319251080100944562462138196424435420637124060278270301200807655723626316279314677989720701526760643271100348145148124820564605091911779855169535418882307665289900355017573800822546237397396616805582194694056466899912723329771183008166619132092740342879643527581402206500436271851742975104495236263710329645094452343102310844177958838929699065716898974352408381283451421410089914102753296005962431058406067303947323833242313152680641247938380343115958860199956778403253209323348645070739497071952928327376353617380302386451510499726403590049039220125741769453186556766459550919922603305625386150812873799214104365798370292908598658060494523919882837028108696230018764525326479800889430827403509641329404504108584175416299778457550149516420306914056180810908889377149438217925739822836731498632998974190671944437651733816831832102819701452336948218481443109835371939006988086201718924066189320116586181314358289815550824203560990687366887222969587068618783822844334383574224286655847585666103020816988760101669647856537819653647348642372860462072094399934119806713804526340303858796726062832597308487962786568628209393365116177313500258916696602298504935899488231886983956122931761650910471751605728341369214793135444893690581825560582275170663803345907902656817500959962305071703161844221586272436733043463590790972533783408461905472360665984339275927320721268991984362793905235237928358401214308908599626975869024433459897721710178957512745942114341723971665941816834394308329806825884356070709685761638881841811423881417063972638317949761209293108884169157244310554120522091867059525129565074635172821024753666469843554970503238670636464476697226613787178875812109508162171406085559173637604564435642338746751084270357452547638347056148137732031656248286326291618903398185758507933313960978162364875292581607458217158798787916676003226916398811579605403809873107421485543087852003080885632791018542669430381491298441535109732809291308440227122322919323520142248717203062944396531767516101348669545805257723994808980312479264837725492136882355862941108451810186385271944727323937476421051113190387402775727960536639091788137833258176311969569961943551611853786770670960071652604792541940305956411115347733415222667549394453865233071674925052111317188727005402659672862870124353044134138940763586559553241714723475928344653659170671048092842027797901483049343811224941954463977298856433740106969036666079845988063391903825032855950193013788243789490182350376071702678007109765795706678377357340602031572982332824123773826221420577356000773691991307382149359100536109508425616929397580550980381697733400694828091467008203408893560621735626409474184799062207420684997475127497499271462600004670205579497645152495972389782480775949584706612600406180867943792941868858006175201936307008047616757589672523735789473093905193759863364945186628110590148829061593580057092925835363208545182849585868221368570360897560213869098865474255930740671657540215219483723251702391679084671148858456387364281103663462079699683913175189821329916045361853985054542513239589981629807348515391518514157410480876717317086568995965776721883816029400496479881361209069153709752129572198334892249502748191465310837081561861610032985534309285339681126580547626611304860810381677502832262489332934346926301205586228829998320869739620904253982155600321208706995102261899336727019317570934776614228279624359270351092121785581627705454815208145814747270980169200427592287264446298455337451867154675225312599671885696403119745068812877999940157697775260282173718338630223097905166067171605705202669147542203111329964484204150252769374041699642264247344682780556183768647043088086067328086717187740722470761010716276890826844033820289730485347275758989422619495961781370981845507287224106646612891699787304991489991450237892608587094959507431025121524157532996055387813931382902218941327406937104535120623519125622928074921413343511233341463048114587623180196119633871033128642353961758736942162376474650866446500486254254052378915783117942846877531394483736296707763850427149576406806692201719207270711640436539293214966734241103817572475879693972994529271225318511005262619518630808170022848370992692989178376091827819432746605823278836088860098280229785555789098175025591438486997677754831517943543494195444780421155712600231315338591816992539029327290383750279259408507030866894281949592643856951856970260492648859191372445722757560829643128598473999963495915365217562729260899176033339914368657427490270587754614627221314473523385599772728811860813438436363568535104917622395452899623639754284218650275206353695145264760567105459178562491882032831507849731082780751290549815090526014153248389638366562779197588704003763886554458980922773564631738946671358670002437792609926532640853858166371833689910006342371227521888985462256616595134913448753896321572610914451983732905554764025205460856114907835462908762361867725808829101494129427887010484807824575634192790958596192835856035642229775443466803753619433447559913956011510527564464490362903893004175699539657818550413774129471722988670400259357614877806334270973688298172787849219764510531270431348031231230366988119457069574129982095326123736732280724513806554712464556176030636815599985296475879329526942793809334154537286409720616279737748877805830625972559290659320870467177007699656878854930950374408662534796671508779289654115928497876570228294960433889385643701335793908755514074473749964759488535101951927148371376246782141759279753146527867175256859600371220723263087493647651934107824747038684956089218459994098442077055339542213286639575013424597339692639209982667429839922996745194919443742101455841754629560994904267305390310619195510596711795233359996984129886409644969307626193230100243445176341224116774838302230433293550887983785529668376917774923810049977020766265752226119147869678480128953266773825987624533026602499804124858105127910152228288680919984865137490347059505127939634012785058380116016158201512139929087364709693014634031763687342662706605079791983804043837557045973734575431521833043317763655587404678815578341748648519218701877257148921016285162472607623283323249556573753034374795565710904057626708068152251494257423269988884212986826103841847235290434753139713588793284927733100788323782464581521308771041340355123219181562733669769963813626654980259896667571531426558561083021853772568029181635433012078770849834446674149991209906653073314199262005928322117392615818629566430413616987317922057832297584265671398209566291140412705971275976266486649851786135002249020062965980087138574535447132363958635609925366757622786251073626356537120620726163351028366500669047752276806994698670175421508941444055686927449826465211114309355867990655881671257209904683585254426503206543491199687267119577128778582396178926678946290201534745035364519018795390246746811766723584255073984715970376061829082762752016704470773798620997166862372135899943680412430608608549449361762094538339329299440793971638832722944360033468293012144165093312313114839006029476318874961592758500904627465226488109581697907382066846687530136534632837946481815741937620620154295350284380932563345904144633726510177800611951790431250878298814044606538474701064227373555412349001233072133083235347487459787376279403703807888154514448002202951245397248869293062600560134295500105008538576207064629412523316530627112626565186270777090318018659291403078286535004079092813364057772695524445708298445548622123608796436695854008220295952906804796979613002284502190226292523908476214322919392774132723010892233879221455324852691358984021386299602980995708394090452538155116048679915227979809152112372669411580872195011069091512211098837265014358497390191374862378298332979828589280675262431318918898318225215446376722107524363251975033827569456312898080064881381141772242054225493451609900958323016634712370823083984626439009976816172490877077263224311036942854664827302424290250141379316709351675690520061130683735321311996496187247021962293994184343787870574057794627801215642399757391689423643087425702078241032082171429850853657783936393491748921202257137973536585938902448803265913705675751505623829853836767351048275120136814974429359820277661179090491547020218952518317240856799497902090061811729297871492235273099451994560780849999017077268810932708025581118347013333023449244901948116998051103180964193421409328454794534892399934923614215588057091032039363419930676743779898364001040849687155406279816603303339546771517073573996877517822995705129876831722490952428194724842099930819145094619254525540759400392691443317175946185255495513754986746278892496030387565394365588879946177842768690923727638413659745835806393996818031833024802300235446835796085570745553032228525815450531967652475109305456596317989530038989405999117072923810555284059845086948523349452739911967441605727895585516463617479813514316281381343200540684480647554584918667587044879862223471871709991329936110666394849738825285286263958437079344497666129723469849274424451217808101012327262154782486868475696579972204483320055712556519479118501769492253109282648803982799956007070413969057766641895108542980107519788443327966941933926975271423626274088356029953637857404994029785121788713172223066847502903458085949291823486875993171596694026412513484348659991282842807440540512919421580435830982886747148859097314781713081716943137837514388166635564093209988083853631966764152001236937201021272205337526464980001923248970935051413391014325982735295720169702781387326630373314301750994939700432204266441734849243617137063200743900861763556953331088533375662647974513214949950360582587461449318953013746171392411021921268719401083870455409243782703438717812520258803044022398736843362885510789738025682748439023460396397947226212022325837892155810227799539254487217780142395057860256227526753652355653439544898392544874518721260751136602267606533517775781758994893256983747903520154900084664232199826595227499066488170533660614570516974168882282194703476740231831764399346962406995812197194307712384356275327126581811963829857081764545583491933201665655011341750864389214260118093942175688349922926371415338795911538883608650663492494285079393689588623801351274317524162255546872032205137602055977698588526953067919577657802157230724010580762546282119676770146073279290190567417587379003247680752947289021207629278566655115192835788767007491592173561216460960732338187214850961468821550647703718319006714895171928841330718580062654702438419600965779600185378625085906358134551760230035403561105143710833508540322391028617424456041890440768192600260326521458091222064446938238524580192166531189004653013760970323476986163112729146041847368155310536930201842388100514907989986285028152232579121250243087183900990150304104081116859121286448239243348357354426439332087091013606470363706785376906184268755539296047766065167508797445567080041967876599818349026917276210630616917313061541554664359090008971749776374922888008224470479856127371383520079697079481864438879042548335953589849253380664920899400066389165030020576281747877494368823642902286149859757979430259416772186621524014692936483589683321666232231917198657382422968512537393374246432506459315712945887280161525313402564412785562279688402776014658097920177207595566191984505720566032171980817248093432499471573407422741267535537792190907867772310470192246974486242409294991646564339659296311172821487691415387361518368358002232126427175348186260983285915013630462489800994709039714768490653776139921591148425560513222581914691269099627882433950238366744049435126864696551517102338574990439051014288641107331775276925590557112123848552944123712559927798767656060604001870745831020943534367217710806627918743824819528778901432361132400874522503036881964803363227725213671319249255588338379558944373081448848288914340029381563870874199421074704225053940653263054076372331153673021564933861085136777463657122583608153245145603654759564012552343708794221112376282396672216677067893583529685387362866085958575144207549201885063634649664356022770450599025073193635589697904649689742659731140870664049705909529992131119908451169523625982480852065130458048303330783267873632661502527296193654564481985949017941867590637521370248661759842942985486580506523527905415291993129997589693562083571993824525692390012764335534053818968643292421277387911598443675823895632044862101929611888494601135784807263444029447043613253239718910969875605613576775133853633741165480175557199106843404370509722920321859723309901527892004815816154454240322704330590162893392597841258761159890728628197646144967822207646701728736399384331473403587477868423279416635027533248541770967263778198842567490190381802603584303232553124123738656775047738687142923133780711030685516297965124193566037052352262354539607323266508361484876586175823446779222126520889533051136757982925713629289751952089225590370193731715841445105382621870755409206256938181565226769507387707852521144122034388075830457994525416533663962455970297774911851804521911035459353309532169948020448427333167113803415885128164774439258952605402088109777145211067039266101515402978544740570697381766558881546774239387495303310021282368800400514079555621371851412626774730245176141487171901398964327496365698995566554278753549639947813610318041843322486236707793661756645237618569985152051174050866426218945874684052954853332216442206370490833124972712199887443585954028942543566576436008194402325554516608853398435525073932650524074286205850550540531543625550602818516054893310255606074691613285654709269754001340023163558376144694499945698271995324998769772391227717778525548481765287382012664202138451078614644891981447633443984616961062704113987629899385435093671888725031427992000013446048294556079409188916356329263861385119483041778470111323934672117382552154014552689712635622044067335585091419078549572685722517799853945139066113116557823200991839478980485148139756437276310315585052962711094520823502876017799162004452308825294752903780143322159163359216776682795639765675024359141047188281889450388835463485151185055730257857244956639772765885901407478608833348764219975332660938410968229409406088016572970425472041832771272378171279797797035736576275270098485254500981153781872753941048954786738308270916748413503252625251966120660459010356765817802826429045068657112315950170987790686087303575594630278186797170965451147353365942405760693758157024450678772714436915222715682621542648328393696771847903632197735143219253117775874065572827559278669061592703292357856712182245702829796197056320474383079124060345835424419150979181507698302000007069045583234865337926621992623375749971204642446990777626632490383499047710478578862245179305716165431024544308084192556089479503354600043311566543487429471050399741986074927517309966574629189828300270254631391989455006206141157242311958987861149970781306061082396476609746044799676946433313570016028171027821734752039087742788832856846639871795304172840764319177762201671679871703331176399614205812745806594113056822213610394374595550171039503669220580872124167464169590577829197969856928840564473147431728291951743418213909020891248139717532829309139307324676418134145138999363155157666822088563424974605011214474234561958644068385566981590500191642959522021800166068563481044756233678800379514457696678176805627254751999892080533501886765304008355851853948156310423934798610892860385518158372125742586604990037334390212148772332920836540413171820995316460503362722328438872099507648776358269375088834055987113695732969353422819649914493670628253189886707685826733188098490064699162769196462197178091601033240633742092060902726567598519786428036312494443148817711021658763571536644924743944370048324568741512735789195923635121797799038653592749525637165000255493407622344594232313502271601912269778165783446812278845417457586538145675618091493526724848167114864548061108275777820993568273138069570417876796279053044809083376787522011494624546074909061660691640637286419682093499212330107661282280374851441004473097968359669954161836104289719705649964194654369452812111646977860340985060266188051868138264924697766217093257796481229661635130361603763575209317631745373236794727193007345895568742625048392643535752017720886976385547006530147162370985119567662827452345951611661122285345274467812187128152772828198044470287829483436630828621443834283933061869973426636841662503174938088958731532564136006533111241497517080811026547277241069801619368046197038254330917315025484354794049944205979487352155731523443985515670321446995279071915493012622438463701624086676046991036641665468428667863243481438144104997475129384407937791753089800722213988580814506420181828434464111345849729424096408245260118164415180606108341818909452188841412079787980645835501934806620697807291698253154706727593807361760609508840206608172948784237440941360116633737918646533724288158512019153861656684310632599855068395383404299612799388078946939439804726113661786432879308541638420957312446608450673637732399682300434221464859925923221506390466698969039225502809581860888180763430173987356554433665298962587119505406649522644887130093859157162141940270620429317071422670076888270015287432039353142292463201458311748039953024013036300157681289307831534247803967378524151269240623018079511894898426335179627535676928729840275620799295814291986056942345428344453545269535794124327345707388409443474582974771283667398460633838739913858003572434702047552352950879994724952355013458855725485470732726133558254542140241633844025957105365419313572521406256164016462372080325523482769734126885228449084718164714605387688663314237773503394896942177771487500288657934065953470677148012467516329412866843212947650541393396631386347555804426102036080289255754843634434329602817459750576423199736486570021428392611373877893467131270574799604435726228651959220155729187266319233386485777943988660811844393451428256717646755716254300083904773522205309371240685190676214538753207966844645134821197918259003182495235479846985293701759492154378658914612708682142567444147095497018617281359110902117920725531122469148975703268958203323016883831569236133529003603833362202853118400173131984771412931859271574480640448580883928197270433178482028973090531595725903261739123015610187695736065475604480716148290769317072346477291109395091443012208320879788331725598789382708448112357055474285327626461197894056314208119696290296871946392825764203702558293596084592330063422640815063526516709219894586212199245909945107086110527318146202939164664570138496089256131319667582023030903220338472809679989900075966190134720802260549733743988009810716784814967132808315697037229066016638783617803049541403814297797063504097571959601223859618220236460435365468876273616964977582199141192717139286886479366882946601855885523540939542911001721165181303035250295757804176416487538695267810352135675174637329741832437202038317518501153696331084859275436546896784758870744418504221637131581695470043451607111498383586197039434557677809493753161844551986777183528706928317708570047213682844575429346154967850073774018951110599706445779164048664056208523721691779348621942136050587382152008824636852587867072370504325971481960878918898595254980293982721591693440821999279481942233518649498707717083882102011010920568111932250810913249902342481472764561569756057047564387676395955386968088987048250789547613391325196480282398866643140635374540815498886375692701566620478926327386180090314769809070586546850483645016414930149011180928072625396135675547919261758488905962683028189154974348858839670607559911538799594215181566419664461648293512903197378392772465968575275924040207070331647259700136865792916743805636460060225022009555911506758744722703329764833376608884035244776681807079272059851958248969103955274321981361055653095030882610383596652083951976626946931369787729556364440715932097751242497500001584071338920490837692185167860605115070019549822090122604643634410262326319800746320962802835287034390354111115865790874939042813949509988832911268012219132145696181195882383952958868481795589403551825711445660055304159790661413008365913113607195310961659663716376009165695349750905934408643499052196577976419823962941950712959992212234788580725813670158180525202141811656107580848620353789727923453309609949287741837902512599149154339176262431563817727378679677652789586189907215092360394745291315315178280769752824178866136127120364844360843686570666924377391665188451950415163418019008550860833335991205615992745172384110734413150392823334652249716284396986055940980014856009188306532585605420519999060408247632994088479770891700298117903439944095625163759805013608980060771557434355471774895250923968185127614872473437277089861855286234820208542123288985527978805250685814884921559427896393702833660533784695823628880970072319349073259978716833968468179590572694799891627034479004070759376277217793391752209577997711609243576249426419043330333248714674522314937604818018967788378992728856961524893134453753720792091904689980700491208047979392621587263636601034393317517058140153695430456108047489091988799433658727319727603208464797159018320689274278962431580710268611873345082042650017311093587316737506047072564104601699540422208265285367519250051097876841814985282642872180071842394128862870024131550427158424470800953331106953095712690997421000768047945089087663231635404628237322206056194051230418812268915485268026095537420507465353167347945777910402999486556725081524841236691353551068809229611287678981310879402131425967814033549233559647486789458759659524816156257785428046357885788728798334726449873717622126595441912361442030013584241365584775303418366701542287195829230746483209292971621640713714120962019145289378780969314257595128370406067557489678645404458053687082712789287239312499629853769537574070273969474157449684007131644293612697622540605642045541405898737405461999281923424705046372116343888909788638977762339671372562117660223660695670784812600612056762192717861277640703396725012445752647660972755926419081291679166524667260979795012933256505922882790031660146080407763031478392867425713264775858816101821915969759500481246145397674060323709892952582602767900235601067846724543572473980966420366855192885879180614548283832841466665075996354149725301338358519169323717267254062579184541615446217563552842801325876467818631048968727579042055430766829056006240108948018339677305715364169866474021158726443045415282083577876330771922441471903310208177751083536690365995902758865071635759854772834694926455251271950341529608500788151798625090215572084029028380951507817448298079939298183520695590038747651635996543349440728664825713158380373219558529466057128032322906043454271320772921500287417319365976168419625624605115776262120980985923226829065963505843252914585540909170419599634277050723038933433924966297553342377580579351310874515911272119419209407790850494402102776888845698141493104421164929231199034729805606023201679897060290278578720809957791951623105561111133441647850732477421840889254450727982538571816636875200828789909673369478549612505123453026030215697838939324904100215648041600048460039211128583146953718878628701163065895128903772760366897751078368367149449860760323482919313636639333077112532263506484449628903562140910917184883359776685061477491947729628529940226933346422619715834114167408979784271108750432262839890447106483996662801874672678069833459187503127812301867619501888954744651596042888493821496812330875953213277829557379428092928030401078060596211030759341486094758152719531736557706698181800703577011933959623488542790769609795754171725493159747905511760096118476672312212214368328427513637719899441014615290328882809796585736312071114005119700172543463579423776006423420286785176042602478265390069956838609562249314263338461011350408175605961013927967017552360420813070363697740897703263694257754856012654337464403965817533944829983303847137943128996206061949794495555772350381966455640399658960314931510072397034602157188468414498235332005390066923861865352437171408532901795023023963305004538478595986842966576827375616876814560462321033161451137536544148847560393613737181536328819284288283654494839769934062928897803037442335381073377792138665249528844845017487627988924712134129833878665284628767176241405461020337739105966169340002371434437030992017569093264600981712234552096820682678182956004241998659956895146005707847390853503811705773368682511571235504699508351848211408274201762880277944793124322084314104623005572039931534794296111644783972369615224022661119722029047041665683970708585749056976393919847203913389066146411665473936057926195115695695372679013803092665461271109469924054694941918792327473598367085225448873229547450901639248463592556312744455603370397515050475356724383915330376573631292372402745732770801947701519132781347983632063172159675682339097266427478373480515275484903594400622175573994679551026905871042323165045382475029142779227145853127831067763040180729594761438319420585431546444900131105212053283280444109163920317054623845778114784577652681377523891236283117469043861099922393013973145606449737426020400959335723260763918132824769576181564972959353534565137763089779652100094511330446364797507184259503543793453450700361208294282937345258864388186370815590043966329954654849125677177327740604000767897331162108194915690616287252972595860248117617268977717440000074061968313794506703892623292525804480259861766805425912512279877433662083855611776315705013366749522257941448775139795054547860959739810400803175328510521654357751870807142781191563107709530016678215888193691287437297082541468231278653445347712336543897189813930534546163421054102145489580924669226658179842336331091598641340097439471837720432580138626610040040257095582924562504785423881749020155620716033485839761416339278967015865325282388487004257267088252026526083144317305666263332820011765688760660248950414043569433347527093520428825842731654779513418611057685506312236998762941492403138134130278628895223957785888951153773377278219125362017598290832241727107181732628628969099360075180094934523410329138135442828417419667660450020302725791226991835309309904350519775277169896695751012666612484996123705824658061230636549341946353772353847256502559299230059708672205806258078192365971229407426411100522203370801883360978801045660422495415498395392435169201553938998447359782907217478259097827470124954127685902024144358350312650572612101443964768748398651928890056650901122614041238234484827589365452085753800901291898609505330030279920549391725529609085950104393364051410163218270357861744280293822046879547215661467548620526839159988042187655020925238897459763039384102623956395291728187832665657676191301309167658030267202643710625509623416068746532059528983901144863435882231708345398017370764455523600539902232933592756840568086521273281265548544166869155189217769253547646162274698681904982234866298619169147606728419531849753765787033118972568320216833418202898103877938830638735413399030740564216566952884545843561312568965256410100307415769201396847369236405710036800927520184308720379877462570422389272530968336374888153750668030474213183276584156135282037084306452805350387567036817741427086657772348793596448591205056211475960654991794579079509727749744145381046319701859330950696301434310162412623394533581040768155023230373375367951934091941241165048796250062129299057998101829846308428031549873308933439874652060342146147487112567741122821920746044030465493346166046949934759667809163747600240109859253313224534523318272414115305989077622667597620194386096109434183389241552231538271746064990361981994758480643400109172872094736135632452901332851948137971314553706055023957966448686966821991071157048343122334001260237583112954121317179044296283918200831396802298468845835281830105166394193289527823526663377548771320675672435904302829506965065381751997283437772160841249722003409268884062102256196782344983409233009570294135858257059097270907739258344911489341204245278111169086281184455973633769673687311268585203110806661036758146943995527693971279945008388466314779754691489727612537392064606860749506761615404385929028920080939532208104450150030102765923748624515319131703319720895752546614973524876482149732609293236236247273777247682281412717649106363575287531179493828389605764658808933368078871183171217047349880988574824325448372362610802218446169817070746575905701523040744440387553885188323723297560118413455086687428020491756241547694681510237054642664561138533959873257613324391861408301343062755145453231896143425698238618820153199341060086040582767420305271235520616347786529138839814469999702896131238637423238457679536703133536334614066610801078208632267460386521332681908693272437495162368891180048919544538231408211021882239835055241719820614932102560630354408793308986702893896750522314290296683540293827484505905300023101114992678464105412926567451101220289034894056181353733141385555104182626617264287068129416704930481819217760443171667541407462632641111979636261208100709624085412270249731273141538595684501410362538480004359104643319518414061525957275846423061937152965946901155002156142045064539496986370236697651210737114979925333838233483192299783546734471866931551536263459780264970260754449708918898646840741976940696392398098349093164620481102695289878324157316315265067700879853313949779009728011413535569426979582389581110912157244737931259265697284970217655135182755148621789122423740790275289578800695567912194172232381437001835055296422752802918477505980017007907830328996730968596231403288779932382828401789209564023214626352152557846773852252722874386407429775877571315794193926987712301114758359459503977627104506796335065315210696845619852741005843152072857586021494712277348477454941140247292113886806982524284931523693052325966127425300967746893055139725681250453767381048254515620100529385732505537575705833592952363980135107610728887764666569723973048108451266554589176904835207707227061181003264797909809603964010740136778165330131636080406736628862983444586970582772349185817537741391488455814718914037828201228379025106991928961877954472191162771803243900838963413363540922360099635689809501854005721083471139343422463302132347161478224568573755012232757654186967083217823591384926492065733104917127987001845373958949362819097899361570859947150307057739759117086549735298283819946900303841606500062502318918356952336582639401806122557399912051397857458771314546873219089182093197569434149084560114632323348457092797433851092597638983214843267901257463663134781314617308650305690845449700988250818658679957942716416638441577123155235542071894931406458086716314074927818884112642886658753625509830302008526793083053660843091515069802823880052816971852890353005110913111226709140643938928883849361969638411929899250818485685497351413304912979628343794926690672319498774771835144880126905945243021432825265901074072219675205421551379944471783809347780511228363292693403155051134265892661797569449245517472868660920599174127187787266072773703505077452795402984339284890109683702584921296131737245478223242813633895009345139605954330605487395849639794196025882962585218410041041429164367732771713486946842899444326395469338024741363056416431094423601582895344849458557569072143815600281853202226854482541926313966220609663653863085267317512426610902406967587585145668827935607177770167562516200765317627419446873064701802764040551347065283472151903752719308428159105984289801003877027690073436219093706923712506639592307178568316033439073153303229391098307418523745556949162370839618754825331714657520945252013875481051845919728709239722269244770125576684572285165138692025972298962448488064282487593614865073188125074142887636760634331369470666365999529301391916359895775328977931402715320155854718004339702657310779570651367343411980684708960460486854085813610752944735823372229719711477975083318919444329411604351499806575223073087721623022082458857799250279934773245731569510756715017313617596479814682740942606042680619141077209118785093772744481092324182153082120461148314509548822990848713228383587947163388561905319606931240687609278063872344362746752319253909833481608694446649396658474584472355022720916237042652989203977511744555535046390355716747577476430768291790028136110008828218535184055926064540415942043081374080942301716267577776825913761241698826441242707207132111082549055297779800869982368478064129006255786388275389167279944085935618049212708094398002773133828203282452806125310544290636953095062867364164973356884934487769366520655412414671998178217851002471623636416831521977100539461389358348201695611378431285352130979354332581354421771886107996693593322598686163173091956900566100319732711910014276847848482784607549460708071287982503797286563627735864685203387781411711447488662580506919074616983249559689439820043740266093359451795279470837398893812510457712164918416267341168526716387812302708234976506100956892054099586007977404466522826031043604785853756197203659574797542326864743641930696275983938639039383976918529453645314080185326049716458396631545041942484131324627562348361695524825293457752765911242135039196794110091975825747570795386505568799966389696249682246280342966618524092015699346105263218024163990791087132083482297903130763979613473913387176208922928712094682675515949616267443388284705478374658029384543881572979624256705070684391120324441805258828422852509250787864822604748651961772908816194380783959811159097025994482453404926919796944922483742026319123452985413278017571278566886309150358857124522190490885881345265863704746228263588956571919236644608937090368268874303754973376288862484085353465640115041462926017035394130089878665138771334776409467909158695157752579971217718909443837122861551887220981191484052592382920068292711250569816439601772572259768012623447983369317370268885112258821014795706180517495609583877032038048223764780202857829613900087634097949867241477820722398981112549887784310561560787017925696945478944574899189450789104776948969124427698064774021771308210774498675118083848377140246948789789200127922544042988206918987941080213229730827690255539103739275582043076502307615545309193623059515142968291118529600993950169553663464472074240224949614572614109928901068324130068211147114566598653975234575260644389185930565044366393116001108968881017090742771477265223806396303581603252017467829710954822985343413521574441176308265778385626082663160908651082450850219494390316261203030852320657614703993356424039212793921477017152023812702975090180642248767216176787186820146640075049858959179489141898945811981166766767170808958417303432764811446543595418634015844195047934691554050223561608312574096058566460662719383507164351661101386660993035073313069955716804706013822525515533056761110682353978362144060302654190404145577230935702804278403687876413224776226002198161508963623553291372473425796690649269790459891949449662734434497162619543058824618041217236890350648441493035341339677722497236966734545138008331189365802094164092973437751412787668677178386372246386901815475375282245813809318446288294605920682942075072774629822880638169371477662359989082379276962773285629649665570212988295554230364047191993415244940920604530986966933515031262488004170410349415695604383630856473825495652469190529276541843602095979249080866386859816410557433030131120597006919307418842721380676606492045017393675143982663469887726869561867405220787200566946232894314890798822098147226028444874947376198263353641501588628128443875786381112926797179439990922916825839092357124168749174656866448968685552166470253991097450460836745665776472567072345311249003579071254220431847829346190277916865241513339550320580978949242251407171309508801142462524615167545251923953553812812796260665256935971137006909979688518557390466617284338472954227671934777936276788589891063819758889652011751278052432598139972244722591673113941914651135780718062103411861458368484552768493818792461621795938862063507451763056325760717280557051015665570040719485293645791748867210332743309567807945264041911552088112683723606891810553846521465344581837340337575816983786603970147034983592476490445618714709223745252830335030049582105783537791929412139077666889615999658819848049169039429437562782426105040077835870008683383707489836861848947846519033195580928067520781916779357919581684434751406228043820330757395441949923732785636347709074020264905031104602407841853676929169108066940640934182483936811287487300187931038293402458787582994845693268663457343886526115370317989144981530950100566693608492368194385097064324657539024043053941959974602378726196174219543946708813954653192301733919067704673869912462150060977427632515602398636678171393136327767037299342951693778873671329147637095788215580934326288840911910852018852545035243020530629293621139561443932574144697089598068829122935731776730489045717358325562473156966942186455302127002114022039974608747779644709489115244797796589906384418770997189567851284837589695124739467392960938675720763779185299900011086163519213780957046726615385324925492817408567133339731588076377367093080077926628622522134161015406886491016458182682593162761762379998002418582226999896385410590275161171583552341286538648885208081413890952551752752797152221884999513693097781447598139937479799584372915499176297136232836731630374010313502043942856037083079284572855603421118286922603912225520993199838422159918448395641159089305976756705607255697017154184132277599592427392938983213868915348765539995943077594858133294717775720439621772454892132175003496794944803486399576292334316087142198570183000261767196592083498937714834808242405965785655310308867240264750725084240104837398367051824521123066238391904852929941093000718163245431136851931524669736901982562996216814232339219187517362249544143838108073634560101557169614027499080920897378574498357297870125151949273252611161270439044500436215339165600634590130638837538406159637912104127317075279667888957046588281010056971189276119613442952242095845370940420408785438221448450917300404499485015618821325815982156305406684467854915034867591295681736123801644123903472484880982695945490420745637844789016272486813545684665580677166106400066529378041174791179705123454191196373928042558220338091435619540304355802434014630796745807381153118372758265098581751614693253118459658201085261240929239816470742412216818546733542986999607169421929800394326943465975730067446356260970304813476771890576978631310520918610986809549213489461855270160970352221518582845449240776827108303819094494349973652345765519749649310958102444092065522056161957615174661219101969136249516408701120946402626071662270491861796002047372616649580878748688354792295293871534443385552049753198229230272437336753678022532393043874055184367911111756841551329365459321352608483315813334374337310568596237612671310603149703958105283852010022577250217733701047198419667300512304972779175103484703105288038490648270726239725182927861156936432252693896147533649924016941277794467332256579075124762539427709667169335313670086668318029176967310803557640237231328476703794053310311820101309395685542141383864830782211759227453232247222599993480652705495692598122075926249149059025080339063266945367639035599443590872363729278907201041022180650203892026357573097811468229412919246771523165703253446140387755383761517408100583680263192942088900969832791145099411098175243011028495152388183916902688052544899401372205613020195513891997531637831222041877674524454439472945945212254095374591974227370351556447699278732972179879420749801974327671114047748851166038416940672866245738532130035162815316105688928284265191769628703870398388478524535797061411200689742531616776934946758693566097915215363781852121921266589221146009676114370113880990427548952197197793587964394675135785553969275488255012991794910026117762758243938305646893882803367448467823194897238658298949353783762585384450212168523959099319015548041035269244644024724153384295951342588169331291340066513552922950611042664665784552557527329526991222642332215088273248516866665361603520835955238201517248244853520194287825971728930306223831381541107286874995748916814798772743186221871346550267849457341258409383121259355173215564802573398512742704407407353903309711766205739603005850572880227927179705863585546462587859618635376158672896533233699549913407067756479576671402085350179079209249233543131557488175982125732060048551988337610948620176856392229720122234214910003609592928397806655297646929652255915926843451405045566792524234905885047768125291074726237865711707059430190638416289880363751650390879052030444196453432195347346546471973595196025067314493203517091225798046431962802290239671550536465115332623149980169153056475053547607860207391885581969225821190724446164347656307844194594110576792306538361726391459536687379047485098306982872205684718711398869858317294785706246042607703321866399929168556274085551900157149582074858798858927963962886642316870029583741380775822184803732565395060022164330511870278833384757665789177983496628191962352707765946493535189857347970687549875458419045145213049730996897937959794156202605143810611598713734230136901890281412728525398320287477523443561838173293818292316049345833632539136167226924039140406480460644135895289197019166310421168967015930147894946958187321911099505281897711988711986440711206781762152755466176871831112451052660929435148527879081317378330218707839157868046840119670787750254465819236549430724723180882781380800498009997681913741209779008348640190124094824911594977145019009747796649127544460467428600868260071783252436776499503307448874271267037441639349631669659614339079901183854967640661714971402324716688608371364540073251883464247008581361272298946073942177695211713468753824764056219306029960615714963478676063271289460377364780779908789119694374694948721756119137458611220931626554435268407506342063623259853423754193831196822960510641939047408041517463239276398036147791768823711124554469403650924174273895189888261773301296597176093238168673898602284494223265973033503023529023169812999040854518427316573312766087472511745078594697118939720977713302594750217872938788577622688281692810911636801747417784941249725383961109844305428477014392159551331431076168788988569290084440324079103589355431543999281199292075106877733449820167248665228704540250235452159420892950731047234328569696921783329007157636061574786939467398213664407458777725098055171191943136064714165161316072512894042066104560945492786017799288070461971906640229475346422951137664902689538880023720233208657917884402752519306741337770701896574672161185533453422328642339907867753444909885936388031154743698567644292878171602323173273194876934667058056987393758751001171478861250884636993226549158207023070147724477550431365239144561160487466568984511452077444385275342682659058686754277070638882719331385445448903571853607535211471856374412735709013764283377436284460290231937342006032339701827707922817442089847588744750494996349517641320120671806850677834301397403339936324196914179019238540804491813927635863888947846261154343056708076375323933598767814935726758167789515936496642310804474947475865687661340840217148070121244073595708069268852618981241845239625501954372889470019480473741407998604411900951037029193441263418405020994094303361480076149295100962624745446550467217847414473500041749715164653532302920687277804823616802221784964851015064347929101622179630648327637687380603612754752974970029149053744377497534328571746960809258496336943458129317117108749110943530231269560651773367664239430832362186295189004611440592803547913033137146900023343642270506956296218655251529600728827340284662917217550133975294701804836435603468062751800831292702336291596085862177615293016738724534504884272841122349359660602202190360922370551132725799910004522848934386417702739100885687810909977641047143363695788010064393522909865656672138344979003352840989665576735791189768139643655400593235417439345892545613635058062893557581403178518529678550854034011830876857075004332710375269005275398156726238886594609684164522894656666643117415552255406921470418708233253877054918082927050214470427530282060399553781104384375329931827341236247969602131021426032878342743245861195045306133939322074780233254643933422730663181976488755094378227681335718503138551807719931614750344541719384731755237076027863556146460738410843506758494102586700860138868618715321908492007126865589707875689858105219292094170543344099565493690834388075882098724877634249396705111127634773665575252350634275462563176731500256038365869233021602990256900032352927488655490124416903452271837447299576242220639010907061858064097277856086727174377391537703531304601984931766854839949112775796533738980020917645130808081778526229854568799545636474153830960355056110667221970651174118436424704955422926114611808924206118633986104009778463930878802091271348693806759042132848977432544907839407229894124083874975784340941411789865437199229987857679079972812278866111383228117434403231935742412951943355777337320738797039792870381403337389249836994358066884293071110536418096095489031736481868834142904129262251299674149240088681775282677536767206682131494660086697105301879195912692669752737013459414707875332326832316805520209926198362044238796117915453474668621065495507685425295760656476351263333253557053579391889347869918730826586903927618911562012746134707451077209085361192437234954620077993720817707292652708920276099798204463859903235184577063288658339775658030543696920328358660586443711471963490741241704808567130613058265648429056733041283618448067490882859963365870952030401758438815166830096400653200589361857914073145024511257892789282012220366162507932778645783796644097201418760841458244803535271505188446325364600228373038329001148344983727415780410763608177474534085659766722855438779553141472201463883660140533273604776967204250729068893701780448002308249402131898895961276065230462135625138814289282424482034365894100618732231319262029630825600077324878984657127034891232398030151880850241090275223242683618285738275138652335488836850092016887233957720005123868359875312327017035129899936666445612378536864845904651190457646440643419208135324042038936473647725455300569901618785250323245030220455885019543920298770089651967385349965131986410066329735724022730291043988913669457208725464761438891007894401376051232101305572947867492280324821625860898937283773095038586551924151489767910591860630091629894310383726671100588154173294223723532094395594361641772465744163614789556332071501898580910681585287558325199372423177803751934338469445772702432876660006353837836703326676911276499512012962582693758329854966142867564873486417870035100330795449024284598485149429540972856737011140039980827119239141453802229603530372324417112527376064694011108981738030056876113314966941924915704431558708610086023561762708054622649049338521931180300209671257547211129794234628485633664404045197995878735616750046586846414924027073838323950629857186400659775611342196592070598169552997720795851864641489120086666175562439645778515180160384529046359837419156435243229978218877327828099325455308008277836672418275750435346665325739671985506750834857577562045612641496395264482426347660689847274946791804353362366051874308617906390474552359039812115785633662445482431920223051425348154020780114779718873485466160750066983756633375027947280911825376031437610838390417455312417927418478813239767795436873710212137850412494991847465160047196051375938686881233218288388039855640742456557676359641088365920800229589580739998212276979988060059286433886029676374980065493978457898258899695626513870863967195189417628051186051143850527902484536697960050092080018734068164574345216950905142467408231172362206509108459790789900935688249765506819076585037292263329658400840334443703911651918318863206224084506177979352979979285550048957452854769917110802987647100565140080883702332581718307479417361622995966993017794884062651434505397196069395116054966387078372208286495937249742717634708016775907594277259435004301089035868485896786714358190271668478971333623690298798338050336370164705382206735887598487705212548608557462124012177788808319104211003460062057906595584891542518494477419946177808481450736030647936524026490478748604770354459201268694152330901493672916895616887540284078399037382994770715721275703971619812251168155469894038647837135488907360139008313193339134501666772312541329083212102053108202297680534247758836007215220486139071741091128638505452260822036101738481918768120578834529930885032843468332338214627474749848240644896029175385104045688659856645221426062024389308831897432888911414414944316010763331281262581235973890151347909426838718615554968270002332886411059869219763135610736692850809498283104418349888858763568626218359772693675365334335478813100341812132988089348275392076257605274171608160729989915222663996382159687340262377596184844167241877430499467266696525961873922792118255327000888738216608308731076862754700201872012123299536865580913664556003609198864693989255054400782510467971752863106194886628216151529602069027034319849447481284632401402237915640524566126561377818427940870089696647162768112040175042203777960661383494935285891145967925288239477168587336692115864894200011358348022914538241180031723440081229178541616281104862485893862931314781580929099849929790025723663385256738050541378141257540675818027576504555692856993175194886865046922723986839223166952291510690890165099157192201938772180073744361395520795773414273656501934718321083650656676350516063046085473676585281605009155309372032971540546011226179858420919660100034986158006779424245268971529623483525659750103449182862259059710785618881444488273733830185781054259823531070834521256848926296318580901514461365294130225580731088689780519225535627633596308381077143519930759854675257282942009805297410267669201305522661882855813495497652520497056053749341782487262654372295554021810241157615877726221411357389852569916914983039078011639115242061369651371401013692164044884974391754028877524959096257867901994221198623002816636508756310729679857551117387731256752689642880393660681171598157168842922124970023435776343451437495070027872413143136382052730545706647770154682968890759108065134153342367104434332811695524280188861318426064822703530749854578337218868094306156272452304474994533083367209766079100311153501642596737484121665343039295709715162425462481765140610641555838017962917754230969231794114357430700387322717740738700586105183786602763547733814371035174551077017360266838442258888747614643313397379662416429156052575407391376193894937027042516265648175002807819642603937857799995239621182362330573252823250875082493043588960464387981115975753794299806069252212548430384332671093753746804835254281830285779599456875555812405004701236669125054076108557987921717995111107562970578244152387726255085686848362480641995183322918564509299994938762357299373267298403967538867641015301737963037778935533677014535475081011324338102251375453801006253492365919689556561806644926238039334003165876996374577216681658198479696434174576239983489285798119562279428430558802982138691171545290362097942755344284308392470149696692385008832170298237602126371562027732535865155136205379622116039954181782634415852155025443272581908624586124718784401841161075490255822610513885381104394407242095324645046737970945278053048720938057263899032107869608840684733339344162087061315569141541690358031957803785560435492216633041206749563324626493755605530361499281079517131761927349415342519441964635054465887408014195734522524559152447637762736882907199165483902875080669207754106332336256502832340626975864600210262400101441051902364927900090207197793645715907214990645793468082625989637516323092550321713708619296231930612607825968554907168407524424310608239531294860686660184589407429093110615079805651419178750377809588496473618838710537934025083717492051238501689615871861837795819859955137418083137190691464237122867857076941113699916940827867146546635155598183891552561999272509207582038186215300842416270615518293669136213077130202556885240270140233207568925519285405771849714349471020896876819018560735591774498811447805373682376709486718830434425059480764671062008087684322053388648762910271810955868607713741226069257158205406990492338283398598719259050095358273501618694951416638366242854951116180369522536621635584125214368967250494375705502954384661673054380970138541985618333307703413139071875739741609451613880135268595475819406443893674820007777916208203877574152238813569011666641007250697809462612754152291481878329339085734557254848138124936556185175334404245302932807118460919917012991472799316658902876636875604608849255271382448180701117467463509579827179311312155647669973918331820253398718845511467390114875450661531306595628856340586820203397692389477774363747053287232618196637648971073255115453659333031131019093837523754490397623506257940717326344758993739373009238759217149207727342988082941988655737337424383671105894614626266075399694177676862204501649525445460526198676572751698707949663525811638304723613463002135975787275725219470228977700513200757408099214966882862640139754551084791362693587493746696253240644150216789661628399342329702628214903408580361406044014865241815646434858794634740793744505042692975348467389001436204130244618877930798247365606706702153056279968717165902109591520761795948311965675398848465582109509788726131456674473360619242298493294306142893529140284629321460464139719168132403285421872814168793663610126392388471464309607701426225262223971884231211723241178528251170093721871534270061933311595498730543615131823936392577568967539517223475649003844997070368418613474674308765914208900631304862392751757847981277864004326705435717501130544568703269262181355349929067903403360424878045142937824589905520457189140714116930371407937881364516096680848055029622052790141508054303412531022029881056493817180956519513504013831135447586861323098418168321323757426239151245839501767790833857439105288430536520736402976318014980944312078301338747341912237683935233667387056271874000661136024717667617300205568593418411197402206628045098944517305843697594277739425160369909705027815638484482958311632383602361876126761221791635737974614019349604656322329612011064354929806407903660084039298666417004372296693731604322471838653582941761393122932124245459427083911147218652760745724866541400780804430839314587578113265531861843024870552342479925640847791089732550690026132077594543080636376137051201361452908792574156595525593276359496205983398608460565235736958415647552120820624337542814051703358253495253346020518449244995570377607785573434495947148424224572744751333165970865223005975038198457701646057586609251267367198979242242018515250637248688088871295146174992472816153707592002816226506493229697005533132193458466936497983217095620954670749188705355212240606036419133669480054626067267215568269605394789349499180845560667795288877079118365476136004044472585959458435736732884420822122890055697499620834968636670013561346785109748994354356515605620136568323207434115673380351968083658867696759771496500802578150156205511916453484276295580223652617612841420795331185687514955890841972539396331337316916351046072476706623699657385491293952910671198152781372078025150413035333790575059925316323076926234904691078439693919503812227253037319722474445107099146554139139585293136217432533683023927670384608882517657875687679367688826802695940687804841146418106685395001137486599604050942632173426026287127546531963762849816204839507096419762831052044956594159855004016940136789708720248178961350768270834378321868474677540495878377199733504049533538772454398417964054190556459785157395626879579992047816425017023482764979268964008018829532737403651620554211646915489164186182798316074919088977587575253262157720481892314821402725214316039005468056289053399124229893419377122172234826209868816665230233616502919564441257594581002453851979454393138900571698717665775892740867944879706667133985387529742552504368290666490233018000734096980479808073945050477005629620854568828395501105762860460748314986895073828914679474789748527513182033344638134277887902612963472901444517018438143417821376462657187420280605697389887995845254366288678659909456591066483923766921200942698991230878027491810036505479997723983042656597143100832318711397560932673606500607519587893898968006511950931308681524097327560388960449834255195599188432513217605952122193310060569405443670914525358791994638454429432326366615887989248283154920673603470580706613831867548250046983629614530832844894203115195024594470646988053908339618926329288307421635764352491973317395839783857928097959775462224577413155778815280270140280183489248197763398347358664975682943231645235787590879860390876066246240379451402426464566223188847688056924183288654691332901016380627219840395868061686735569710546245018166634138876378118656412460912988305033297231269719605327649849145386179128799275341959272146560632299549028810907091312356730423946815705261442498829696311632781749438332180642260451002539535926743011856879965684711808678271008917936930854554716587677417568858142399652272251496972961508077595477789735977166069206523904688265871486630416729839097194434388762595270762952480989071480850435073905871744681266533585665209763017293860317850306798448933509154741534217851834293717229819114541440577969862986380475729358654211570390196288226634588777383624005694618664604870482825275085166715081846966912011861668904757769629316542538464272966966702546856591634179170709790375852721660931710156886246555638054452364617443736259004578487317781662207444596091645029647595952532876958226373385749776121833977179892556808444531368422986141522654432213299872447682929801506860334099132784318954437215905328766159443181948841547946909751109178351160298054745607824597883460815700319418238597794230052904049854114762246201612608843569776717411765428764240033085327597705212634848400300748421128101784787599628399531772422652689523483453978463030948044199270373213609678688893993034604283598130447131074079839261197575844478543836718669148410596408518698649459932637590029734297837119733638416379734691214400231064602461058933789261762335312910074998462409709331485382264652492013791865251784211461623485811942971957458982269248373677379612275941200724619920657380899508626812125097502369559452314833258864413444720065537952020975396495991850901486731351518109598195687443139747651552324013557805886418933529947085566865372077889287252337948184687538937257038729540045045833436319085659052025791360048431816233635756387365413718971976625464688697596872128350645949087909756974073666125132452461233459265630928358888029908714397813123863792474307470691350937641561754523107565386801177756340991837065258690416650489911759226201293310124738536232750688214749827030955510983784128325372475161469965488404257495219056316372602483751466340010554492025083921368942015863898425791246738845851872718854832637858632363569243155707638645306391476136889149752807275946394403861412170215765362418180470323040380570108221370431503601899546230178315197685525715751551466151447719649094281690954346804349549315803597832004615651346211887077409928332658606628047657899854892509258886520396187956748336897332390926965463883841175378026821488605835558124650258632093049329910306812195104846742621837268128757419047426852922265868309214297082105469372575975176929180118434696948478735635004350260201072124473173510817529991708783527540203507444126568487182014012707333059916456897528833512138866463890054511850816447254550449860466339675370632744853836099597683423899729790361675693473167044458084656898049689383627760480335392379511841670954300312096099484678253036901110456621552286014981635335946702031364827302207937992625799382112541273652331824416795506012521275422939402357983947734074160692210440586935413034290060455485616966151091517939235565251322529005706626616399840747556161292409265342001828229214224771889207206563499360255538814431913796473292313626240757295374922151541505481486161439447708184391503375595637129668920933750343455058857906266102795051632484347517785978295775323313411556403338574996054791232512815178829995016073083615911762912807140943265709421880676954040922156791249216105364614646174270237019981464259861076961147343871418287024208577454102744157251374605807559652989668103983522331773005856798736211784358073721485893715199859942143076831892246250938439460795076346481880361828367706783175298020954885880573255887648742217293879553030687797055720059330561244848166263936991471959611810810988600032990009574880224663426077308171049142086505869148868192698897864934503622373256781630869980093411805561454357990857799965478299502781275790717707902607222618674689348285072030524157074910082856597144675664428920309135370902987523038654736312562578641361947882296467413488060279839437488088867599828236051930534701304652672217445735590772535403370902678093448222682680053593274050927198651958864999928587927875397210715075391153809797413174486913411766000980892551332294603430136868166360279931872592391424354929275993507786607438760277234827033453019219188269528949249774088459798992834262074116509659699273948423691240298934697772845831203728284342734080440582279279449385500813880860469186297615049748852512933782219769723482671459702540254235044536179822421216874614525001775749713947605392725371515410220051017826506129249370210074713215702646718970176529713529170846693381051341914295151409449535274191100251786675606588089286740192896220173361061377707404659207467549180382211210880569761422139184898779660299310669338557566288780097323071845964934545679097449303139272190049957007922314583636747895359566529361116457007403202909831940409008408006455189265916040115644007700978224902795314347419690556022233793451243422812163267353732124081552859052790805333444858580117846540174528080705596298960709801527940509275683218397940646245808634695942020582766084267011458198139134217769109493631186188584034555691133503811542411654924031597346116788156563936844605336064630810599891078683964173599911243401859150132908382095509344410768769312197988782293593537198007096111765417917288730733276028826279830984888069336133917241494472894000984748321005289428136407417143383750862604881892027565094938513244107402464312659770144751611495298642336640575468116437589335038757968609333810029938311287642384822983177956957457919821467535466615144194479940271281199097752277123252119610598482866706058077704801683207381237291016268712673697468663510162172182951210923396488561245335863030883344219370043264835426428832682045085253755391670342298510101240791652815282178053877948977154259387833692525521791097260735254755618317567726589263934090236977898070488889533001768033080964352020515624465895005372854060191248104423340744299475277063476859885100620036971367756235206040881659896008808970295379153880140188652519053561359286184993498714652572977374716481459400154748588295102164232072066728177279872344476533302549821537503226858890572258422159433131778568064332111856079614287771157174759861565675947119039965526059445784239886587228092494363643338630209966115619657624250037371779165687655095648387588685585792363772629008898474154430690326056968717544653041367105232246651558722455468732326955756053401047309862796011602372894278565100868637091089758266599361238734206663049144555150539070595637588187554293181813486405153628836709662862512993035807782770529389089919949664542622271445208193476990560947875444134292560734053337063940557698527728823901527391674988890430190248277740962123437623771908281171405783186441817996291976810993186075556557998226961899670505172503176970478318494381174105275028007164338657876084119897513726133620867213265307058021024183986849152145662738263711400764695322920097385398830140165112304853506792641405855223258965232350377597738969524234776253945915473091909670635824951733894422842441690890589660074437808252302182164094347365335981091810165325498936236852670961537328994524144662622431693237259802425553316465647703219931940096947383304113797575355299426165435216249264901202435937549720565760272838440903152626779553219325273970382404419424587985859846781540788635587515948941100411778748944502650203511973915518963080129984974652062938675447263343703802103216183312660101358702610588424035217529640766864782156402917035720017055514736724330170550520652178702579779484955594393385996288966604084534992808757887299465721086827531800822034503669206341119390769408551044063234359031185562305536043937417842317487170226200062346072656604035728764188813684832337862573503838491030861586594880626236663590941386623327835927321717242261635468987759100931389908205337030770125738718912435770089268772646148830404363784732440617363888102030072243083955413007193831439679970456749005959094031979836487634126392952125001974832070209779717836871185108707618032380023315277752035894893300486819522695218370814949896932469516548422492744407152604262917839754341539982172145176473319158732484361020100096843159572114232745239469462523284332950336060642864278383011730314933243463477469646126012777763143946081809278161847363459726085802082993954311369716895213259145683275933972210865623028510820734195492283984272237171447600320627621860145163832082725642648053305440108558000290856661858612943374585011721473586332779871910908665438633411015793112979556722608816324261617218240188630575982778748753216923065833352233711992412960663285551058869264633439446795915954686294614812267851897476985265416264653881588951986235110499785126886178087546621762307192867904079329799033213058893242834314134564638404027209296264546084794193282406062348821824423155096768904504497061310235195168378920891210746365273129740636575425724775096719685973840576077625549226389290134994901861591563708501023107317433094683524423566926509537438379112112112658879915751136317409207119917901667329649860100149711346557414843299024723560695387656137649394843018433478356786091791751305745282035536083934703526256356798287317181098199795831694546370237474853953650490965856766206827600821037559521394063663183057061934454436641882284337706578013703943005306609352594266289781854950351898955694436213541830663431623291621695983012038496943108637122750855537092780036012131708176091919272216046545333582484727067579416840034091823452982412452608419924000653635798647992947937057854184661089608239599508185063613570334829533970740227350035397393155717000491010204512679354461400115671394772335434139709506541341677872172226232919488944890308313364141651038254765895622435753193383680251800772959113895329441321721859304347096223992276458699860095587401063244938903631524427854527566729843925507208921156170380241316676078047203333145097818042063695366164952250125868882199360300793348864318938743538350779520736015874513241645425213979256676823982493109630427250526950543131849623812953265194125672661660564722217583709880675198616844293991683931488262348199697465820163923974650871923890267949940031368580963834738838382045223106716399600585770193305784153142999204994212344264185603545510277282390117483700082920984635953011329815361699580130063349632704773033869225243280908569596520924798977694322277132318091865693169389910910818137796930753149498399877281880235453475339256418983891401212406155809988252657479354535872175784013808059440368582374626977844863590704640726364297744401319292782694774852043441693789987538844035071829495800277347848392945872711029439190143738835446051406882570211233732353055205031785601381001751490539891533463476060914684491865795302793124812634292938729258908548785949974381609026349427257680016784008319822904823431224402746515750618877298990789566549591167421981146525982486041286695660346918649040893890529952835320375384828169153724378204160041109679640628149360050340719362200395015558988046003444392907438562636648996672619995607099011884690679787327881837494215470994195935009191107945020127290308719121239731563844162352311262518412437733499009201665458264015815084041372907673911545500186625364412514055512709567948836632239882862499529369150873406945635957430892689287223897788917209404656390186123754643704792312526659721911710831620882926714044399797932937935874846204682834735444913029508832604600747171792330300686670068879045983191414914556440968290589354551936445290932282717284780345437528663826658911009721234328805723634742252808426175723315214034767241558579691071299808539939227912672632135448482769304015962884348742552654461754813556572068845625918388293019201590573776635466348340225490519233570427113140964091080026750991318428149521130592552801650429338683804247951667750614813969302526367422406457815563011843737461106370447413823835929427571149495806735636579636505246039196761251582998379113194960798374548881126167046083541577264690350164040695374390403760483232487426907969264701730604605917641115872186492751601401540768096893232247106816237370071431262516928009116525918031071732149607695717330287664400388449004944403498864333360834519927216481199359488483600349580811081108803258488028117205380233106944766633970369772033836667500635856303866070883281834303457907185374443436889871019188538271949884260374458219127304807439449908032641760467442676895825187712284759765538892708197843487425672698947785306797456136861074026466056025262726253521599259674374717153826626922252778432014097817849155420887280472049764295288679353452257281475683610989060632309587905680120375957627610190163630854609626389444794718618646337790455190841902049220437390756944540835564472841204458038075119485233019599800644385006444878260393031248453798817756948921281426853927876203467130843966604509890604936184239397768012564657747251009692110704436962950828733238200269704213001973708578284212609185512288364053406427420303718076236718966075921928082423103412412810073729438174264930535115279310370809436535349704372122092772808311205709694838483480566612422178866540874830727924909126015149114122361383532493824266615853045739591845281785115924981801565811135432910818553666710891431263810106402449405293846623437189678807007567580086177116082086508543729472080209244417461996105698618463632958636895512937468286886682404553092230351494222523983785368113123054100219201694508508160335783567635083767105664768942661296097468283896289743762752819459804356761526930363403745840765716926799790752853383204561001290717065254048726204539116643589665766760207503852419405772018558805297914315650481025104791231536384841908392109956913137298910477627531090150672724521128080344094934375618956437285199128164017185489864055505480273524163381538021863534274161007995170494627712376739573174171577949643459882973059466169081648635125606820015220192986268562363724238995378028616673102128718868859658319934729971451370770952241624919178579880792404688510246051074486244400907290665535504891210734791442862664527925011154938086489761748830213420041441410795441427287670967734944140175009830148176010626330199995334445025129924805020099189346881861627509479431811633412006466439570334316748863076684188151895455803823629487713358007691599760014770387051723147876917505701098914898156122133031445729257132348607973498863402998273351611396186096977683334633642642475919666944082526369731541662808000659382179410786966504805500337258129350693101053207255202279770041500327998007405564901936828562060547815868627270776451890278957005689876700179680660140928575716108494803686725737227355919718772745097589449324636885629611882714228876922922654727015549270728493342955748787958683652293011241684802436474270400250339991796631824618261137921681148269031570836386231758265876473874785409074213192879447679603339755275165096464233516262846292240987012113005142402910732427670326800972269997556931810321969623075167947349664420039190015168031606911955116810359733062178050525928264724932867089085518874155222323826592938411100883237239419184717929853250063224262081910303242946266965212686054995542914328193708056213167768755029525425228121730715134066039136166913974313475237170559641391942930559556154768506208515234225281915601010429907045194668938269933118586223266628686524560667715561982855423538455341489501453565071388554543413749648778431986954572055748058525780086179666897015651026699461670974852804355186180055286280122388273709964778105732046855525585709331418308186257861378324726572970321067236186259757164365173062037174367307490246762922896153572456886183623969935172618995367851903065774032456161997373528485650562680301728277393976085706730015645692751763089210426842212469752577387265542210891229336053451882108895436093074719896835353915251316716889023128918198142247183496249375669742767821529802640336650566896509306560107164502860459284808453346020497140593686897163253179398741826121969231913899808762316510754425254214527198383609803492073431918205384313892349547927187330484542497846422247526867514548760491877160241712023567624788494434928841060712611775246913294873725213093415321346717577035639780758614167683275903632702235317671179998350358779664152708154826805626435810369727777705898847828223156530818093922760967429057841723216560880367472838031056702612438620596147962493894376430630634116658168081135637041043896498551610069029594620049986471482218095442076018635583292167262827239525881900914642855602062909618153167647301300257865177260440887047235966117406219906959148898946796785265630682107773324332816340438606462744761386084650946327756033944718602019303703826129060200685372385470410133550988380528141702110978409620807711997699979439215477794486894243415014562775659596501840302648309615813601078200240905076464301671678264357564791487825545492125005154563158399916778472384307047774025570427119515500850043845083569416806784433720974794127733799440155379312546033451236785670015641768344045426759121074314580788072339328233175418935760151263459569043791957344628793101241465836126365790826768941084010864182013856048108214272807421492723962155717422052392349992253004762661603830133636670865974026200369994082612122983027641984627467154924303293174679552820647120298635038596422626633367131070921212257380172519157892095091006266106336238865213631462749009201939446412199279992873912379794575302535380996591374368875867370683269214009907039303435258154034127358427240703569235722463117102489618311505265338894364396016170821820757424555729645751950938013045267030484071132579919704000383695297637175849308803685050271199402133951319424587426894270817726814085078707537025481185285217124747104571388430808225434616852501972955318332785066003160125045393202099220242221786632325664086168705178937882742242277165746617028186480005318789740910675334686262814998827237874071631478811776664224908230911808824944065082991981015553822387296404044844386735156296816936867251534686678253214752937639262632738482524494801384379332337480470709169945386371509647614941509343253879599228405683359341651150369200331627869129155068673882533164331711203264432784443794776075453809372085505973211287995413910137967773765035075707572416004974965375019430059449672115197114300308341296634363994018174330297705356895856527977484502082739452667191333702984833554618443509315932958410103837594032571605948350008824847778370755659616793205222944442367310107768568426622743058753667993503486152316260847004083332330934165984957571364648033739868094656854766500386094226118684316127496335727719622159618075553247931102450101054149694376997536689230943684015239637005008436776961362604652305250764577945044856588556303130337937637584568226098090221625852840065007874359290321320280588570788290885914502093892780043884142856683543161582956314949949293426434596312557816405452813904309919340117762606091291396350276557361466960427486323083036243880609805853987508200972976388861815215602054945816834928203725847667673945028734389184344497300002237854372859747728736574566265858956786353570529323722805481645627762807379385975585544049928360987093531707819283823266536710961820867633924800590269133451145478524723280221339382378445922687713943891845750409806611868670907219748024381644678781086851605483002667174026633942147115787092007842782089215280932470301448694378940120771506628624553222556977274369136892021197129214123263594672095597217355486420574693213184565388870349400407812238002050221101397933292440154429190620445874493260329716007771129191303341536040030592428787830710953329225322053382433402794995593643743855620097211156641499198323985531338448063465927345270793522844317122045095552926565677044820428094261462968855508105089039793320121397450575464235778223558550701675483599212849144814888133652970620146615312291602056113346547334646776467996624798663764467372375580618750128640544861527721799710886350650036297025492806666030463115163910449108678407169818833956842794038931950535234731256377643639809891076870027413672509017278335449342724752031217068013036299854864486679298821254140700140508370654161486627989944339229164887984150478813186460524403077637832381364584373993133638828939106376978010829730086696447469524751600169514925248184909347552458371906402894112143342913042425119075991498804897744279855393295019487193322201900767227385856948221965134031470815752979578234072872870864061610195683636663998136823702282925492401514502031130436657684615954108211084629706091437805772721273839178639131717887443026589301934722580722282264602230721192844748786432122622694374886983998153642178727677253887329096529940391620545690681265076676045454676208253215929693285211021809327343955990867532051223585898112036475970871713426656434583507474132880978383694284993881783628246832043836734870487600118712075146229509088907333216562883425010474157959519802753737353207074615734359950917633034041867497697849394985536732586580997316744690441713867540958059446378852789930297620222604833786957027197184006698392559628539458758277975628750775171072662357262156099911422044199119776211668331641095917636420244676259499477748560348602202823573665983770426282922735568820780900244211134532936029986419370700261488011130066473681600843990864279445635536649030253558266681746134732163994916058042638442347875574571919294921314038478195707704847242887613666027599240203590166042241934340471174690849959178248913783842199708330094706059766141282204703771349261845465467303949686774733804213775764864721402325034567509568877330744461204344698138303194549623159225216894758100480008789347237834635276279450652193595454415121670770058993190908223195136491307771401008770891360107630083958316519855924342524280718239245765071497107790470268951510947850084898361951159837168287131598618856023948505123054067976955802164238423731900524591132981388533153613275526318590113074530233657968268278701964894939858312848555329420551346758763412603037648991945626571950767817366711356065267604903640125757089182806339341468885796378166403252061915963576346584214070960520321235843301919111542224330257078627857685831760336918405043623623218177322286607121028025353816376982875087437289188692242440448124529064238399893918617384521476474527290475856945769548940414733949928109239080949364363998094818608866216883201409871009567794548425101533234569090375516630089610312693060075013396845329775390573341511572845753442124574506855139857087672290632520712822836898675653699908618283594666925898009548939833508608607260599779909008815361203081003227157528415246740299200554995948799831259966967806525309956398417425352543861623538307011474134635803745731847267250875746770766982302626792659921211234941731833882053196324508227865888959093887982719859970809616249967455654558771431045850598961881187639794534438030685376039310828691341548451406951017195388733834499617507054365137344410662419697760348536748426469448604793483530932640750916469203634994632111695419146368359339833746929053805269210488100993581075171407008234382621736446155623650688385406664750263808383762293216297895345148809644306105202242490456731839143553416517872397784142627170207117616546800488510968748159534050146410010900225410460505272717611800300176174751886985947613572282512798560845822104300231710375396317277094328371470734178310033428183218610039541143092072548258959267043864464067019986182140080743256758222364998974188269708680978061703088007330850301817979954406980309944743153559891729237589541344018176990147496150015837818215855483607900022663732655686300110093239694453332639499744272024497667341832341518261996223270150217325539338388475444196708640955072180280866107249608125454281286619085805121430852989367325716034183142321846736567033177166764958622722078083381202042487964418622425320574164505509217667075489286611913040599708716195534534575866921679871342975350542397202975526974957753497844993170014618854346782804011500877397090911335389729777688425147425653707225659768549265335006445942228732041557055574363071671478315218985234976551488390132425423807503054634266265542137826213300655078857699962239752567691950051475299821394882915795308134086830649337794708684433794705369036429172880274031644626953416473124875929802116738429300846368258041108589443155064127547730578769498657997299214316929898935573100095777193327343666456136807739936208212526323179690927158138732929201188422171096903075703929226961371897912656149953213489477096201294742738385902136137967167055346799290500698397301715510874102818517964855215115172099528516768891486769291346230843087259403358807539071183504277202836323683179078265380290655140041083740719498772639494011706018523988193688596387804837137717786509367084073068391855320094340208363746054252695211873108044187555617609150757296353758504243240978194894253561488051648399185550325409817923941633018831897300169815827459443001516839520793289738300462307725198142286148951142478439440317937819911800743416221271375057013264558879247432237718340532156058990251445907985761617469374174049678441215679716738971752972094145855349507157006920996807623674653318376939138922242997007311089636286145640685321012699136080416760311519093495183273488320240136224855610240134003134626860317310814142381469445745744312988970092743783644851419704393831404193089809870336977181337096190347252542337246633577184269223080133659191757033533670445433368346875296299597712382816252387319226452809710623121348465020836521844818866184432708251643138892691346300397967516905108567723009576758783140251278160521197786504211118003803877658280629033901085979269565501357187891176745582524331542155000436234325332651773064604028627338774142790245242183923664463705762075155544467497176172763469820054986252146724511695147486423691645218403742894405229905590313564067061881281936147158516087644390217739145563590052556448005684212375509470449959832354588039994963950899048481525477275883542383419590884309029779786306296038796100137911094697557722558499278494833301800755207967534234274887248989499965603683949638931118762378569545423932834137939138021647616118285271041532031479967768967462808938358947703060275473914250749974237751018161294576026327190979017858527604259806672994861552349980466179473571652046506342195244663206688176556106240872502147025613296682721844457249268312486837310823230261360564387698331214742713878609427817727747014502988707165820279954505779956773797633115663620397397289508489929230073829872744566111631572338222471484278324491268058258977023497243998988844939067198209483010356271863466864726221166286092829190808860962867602907791265041424348316701049279913939388016706714493232090945822681407566101660625138000793051663759617024346749625055889316850459372609378181761805626424927044621708514952079284031715105093449061273621226386882727965380249642434080605888446776533493338058135061734807525410509222833360336289595102939226655200812022605140049324644218351814904241332076450281003498689306907751777566101994377544114969360082451954596671173255725992859952119981246044186943505451985484433714684204234607713930938280777325979074551646211563456576877418149487019493256147325630113073449915110046253186604961336164705987026471007687253247036526105011083795161210599213425560459092290947785338107951611009854710399684225861046708990969462210054298677268685138827493436368017381290491823802175884434858199763060018402455043639347525831184432193636078822342855272045714074737369255993115783930109736819090487924888661206532460152000335168141422972804477193676562839111651217927275006871239204489224560659499951882162445251561519251541248698539440557530254984069771032438283335078495458321119998635017531513927437392901084739392972242542692195276630589584769378343518462089531228431076626920567680291911716197358785828771504571705365988485439338455687452361582509297690532338080100239588158759601890869057946746760040728484613767290873389593701930186035809192800969562487800035954203504649282600218351160276500359007615300515757508898779709877246512623459434858447146969974708619341633908471726486305914339279858862338017846384694050699293616338270067608418255741154878091279432910863846947853495266842413245686736164003947230214150059728260677166998592152224446922722452662753747553137462434046326231320967634891045845244598715834085735563556630887023572750027903905856709684257476157704227887757124631483082575613673921608702672850353548863884440900066221903279112207312376948419523363518890952580963345764362987689019978287277952578086509868522185854654213618794096811802407819350928688707440238724062879588975043085326106396878515638060391081322698344181591025607591793497200486019243990420559792338398268709614517166098033509667819207870694670445052964510380048754656246144268720559930338804756155067939792354864468392917295248902411941414395004555151105274496092565798501994597445334832292324136115789201898749628600240683858562935279953952763525046396599512968205865885738109875833622381771863255911903200835095037665281452075692485455860174792407834667524564755230285139131803587488375127641654069323952591318391877310092234823466809945560512533544279271701158598689104477558802992722469475457343409971488630110503021626875573525751934778139174961643122972879514029762422373759765314287522934382892975362750581751132453671903657267884376036661342843964219541887566119884579693381298937901406563419516192474661306516511725267669323609419087733340690450558165213454487297074862553371635331581087738855095802330159523967268648400713750438601474834235330437085390227380449117576988953079133406811397562588492545284394178380123683157531767298914314054054266990963190681914906510208311130377896728687657942468534543011606591877413631321762198303416289445543557360297724554881458955418542210450999122832422240671256313535578227419398806196547685103176356379705213628453476087647191624882510939310918226676457010246503649076887174058871800489062109983884602249535444174934077227481562851572448302453765047321847532378940907877851143226417167207865271313548633238344810072504878677344464081608772771449481960020157980944682498260587592717763415996642278042914584234546121362414297976133124187195363825151679773423909103521409278990450682793503356406863155407032340671391506418478690860575345041992163225409754423164352434991500264140292956147699696135281539726892935453106876852742287916824480432608704463478624349069682252057662741054671106465204178936003473244014157701024500525111785668386033963806047470587868478677866005941018778147625395184562630317637358327298263546058429323574557986170934591291167804403130173996890297165284394825291332954976005579513856860519351140890707453397241952980145879886978105344437928598187338219021315887361960592742773315472002853239408397789239344686421601638980426095208234422381784439647101937884365289752765795163630751895935377213417194091471158931428412311647990508749331887496749119177625623516517274409813373547097884797343831223446489714488277146796704707528417151005177758584705360452208655868043224502154261560328310031904546602778549929217020935777114230574433742647869213136054226574013575310385064398286790589577389246677367491487536907339515858623562466719142440369524996637703770985252803613777816346232435468253332516733074960201249413720878443642861735790578481437239478915479884748129025766655262300741908124515803036992955037147164379926226167619218381593549727846720152665688420845010280046156910091842431075734179979783749230883487520580468055061820398994057860895824863813246156474145956952950257440684073664889904226040560602079193578678161126084813574082600007829756702414971176685873724094152073889241847585711465880388970146267953322313509070101452690127057210105779022277343195276782480856529188340361561348550929855796859839712262320837313667484421485838926042660191699304201533766491830909468499432157653212172381580140823486192736058717317466163847683264531184832681703369211623877310612543643962337345035839522545922383698407681015377194206583397155612108653083191645988670212720030129762880942895247190983775045851394570956574880254102538475085951906008554776417154677487089697871874700602935649391122591469261263511710087692787102960769193239654139233235563061366787913078401419567070881356320830880213526970725503189214741870398652371928414023072687812809490256436240867996383840921607586376700609603866327956945454200216914054497140193729992601076381319927344795034858657960779221356583223536408862834118876504409798505054654654340618816822304137332216455898377580961438429059850323819755090293443799336410337513679189169504960056663576720505647998532197059594358470817219206875917266453374606287085863099056469497814288864827362802618046077223206196839764684021703896226885242604920443377925672122905761457061866837202922236817090556108848373230317984179859950962146699137111763195890862038319018061032059854841643758537559118461458584528636882655994870662977243594811242593731963776359913818723798612690418725118495457562018917042825869646026822042170164938176626617811529465195189729743965577948535312848582920828318037995320941088406331146501838211945555989460999499266195976995452899102082423620367295339270261124959008335815158764211599728620891355269369880777066243495576565602414466461313951949093817390758101911627280585346834490256559339783660736784597741875456385440960717762071157152054663841375517012505847417609854817536768451158381471816080654008826680154523338651980071906453012628196539678057912794047592200584891296694888963217168962672527132555070744099176536736468323874720058609140609125633443807501075614691579295085050547070656868116338927157780046853815222838857263960105057058243307334956179789792708461912072633112251197557082335365279102007024268161463397894521512991183827518360244054304112902681963889699612182085241809012781165396831190827645273329640058674414682090257661164073139455063771453745016860874539922946234522818828837496340942470763000717491170722821267660042795470521180204638104755668948924724039745847695888633985075452182680439794593084627425060093791510138248701420978485908934470218315026316537964710422414848508953653174885833202738382864411676022315464960073515324718648310766369966940592029950073626018052003382192830878675968406343999421251846765507910757723562376860823556630936746998493392075127302143459749574953145597189522407961223123553409134909993234776071487196398726480243384457525538908352522657598897188751829310731782947814194860357498926797639375692780897942649640984709512814089650303781983675097553142351844585048052518999108785885084128715673248602784852202625103212672429865661527695246604319778947900124911930886867136656012397500815427149001629595311461521909491378190818735821252571605128316359578846573762774931071481719546509212499934584164870580273389017244188393954501649198066523773617773603148318070338133033338972591051988165809681695447229880713273435088736826826770722034381291341169095581164119393086610843233071610442261294455334123815147843960365561837877205018038913232670227465189079832876850186118464035832178304638050199921558206268148596626835738621220408323149112415323716735712682952546582245705117230412997688385500025680894367542856812391925356804836843226527830989696461401860946353979452432274274964920385141721059486526602561621700757001951723017250514112376787574823102663139662690924447844096274279748103136259643012732398383704025649960014459222375208937377135086960530601311256939481230368773686301164318462671604583327430309190082530180667483584749343753766607113653497482984301901089950970913459388149100613517153938432877737734771821280254447470438819087196192237223304078940382387097398511730500403660027910360212920875397242062759420082766066071073341577474795254519604098132952303380378722701930037663925484469314023785380625108348136087828800437117299693827825611561606438539305841566582411873588437947478804984065159864435345076088007997181939891110871504386314503554946209094365654392650941459734437752499801655609105275249481281179902173573014492328741267556064260298802557836413692016016617669748043542306072551697935735746825089695874826948731881544269818023315400606701953197215378857346583566060188867877883402696009264891214523761321850570390767193931751146569912952896078615794446670090410139420800171065178067033197994516163258550311481959276610659074044524985800229299228966543054067588746481449229311460408549457355981220577363061921476421011073334112714243475459628100874153150699878674569108206416345365903297922921012380381007569387269116011092957834426860655788441475726921085179645009860474953277920185440079838954484886707511916628030508605658217777697998220345113976466651924617025416334341044221145733295408504392807954396151307885264705378477983896727073836856837620235140207456693911087053479132411488788790158615971668352740445806936367038922357337268462210096916521348168176682743961853038638673061119918119187716359164169444571406379455424290874419543670817530677676541875022056511296774022477450002728679040664986471899711013362194181815184472591061447488424875027349454680510566851684048259975803596168445168373243003982331546478158041588277779460034850719864600409493977640398092361316514907508342421422902139051990165573319189692423186174767104600600148134265471179386165793927640354534589543137690424787165731974481919188300904505418400996882308154835099253666611841538312312998231819699109801429636853713921345260197299766841937950906406548032602340054884977654139891095815240233234467133442021495220744851782237688425688959031252711264762708767338357468592642121004081137201237521417098050822536684007206712882631152148490890523814401714196984944804679489675174776184049404631094279956737122753825775748085792754776105710867256129753274940581094794847870606374893196903901621417734653625666077403420493919792655024777067311768016577482896998471910716852097033010898010186445031926303162374116046753551168125391955617905343365937938089282722859914768508181201172867540470665654742948597222563280678451402182626324367627789943262937705557087265579856057809551086296577566990613910362180278129785662042808063521713920147250640452588776439271155252643537150490630447948841296952179190073624651786379689854808868529795126378890858504242865541942872273056884845871457476143153314718677063731935291546180195217512217731081929119956154340451468735032164383282109523299782542573539172290016513396984876017270183825894574556108791029901424155246809340828709852267349158535664375031049444588500491485483180968913365990395654771006567422899781917903880556974077808484614702490694200671838213724208851280759884631990288078363988372431080994688444143679764701359755518252438059867085825863935412502662727657199067541943193285433812175474512578521148274909532958863395251951656595291321511692041940837930800910247884453729889188341633145491480408091982281173152722432780262445509782321678235044878025855705718538907483505898554256099969620966130090965658274503055056304302205589701600825504127756601491826803917988196135982155843447379573702413895350487644347515252532802411844463140907913400762357692797913754689226884736149676856077439534956014628788995262183121832769384699326248204543358092547676462813616252866002903472891134064144250270608421664146813965398780967700813244277543465345874410359433720560138908410081960804386664051419536311000388461950017124667515147440366134559808879788950521931999172295176273037788753694443728709322519027105308073803344250662527867491541720713646960403245267328210151103865256574620291837156086589496185518608531139968035120710186676603591051690907519688103777386210264556171179825957862984636184672745364037121364433025001866944845893062929771460245708428537857217531391554082579635931071315989384210450732463188365244921677970430073450551852731279385366659239344190124417726744852219108768490083445392411318877611652510551507575859804011711680935050414745944483162589233546375855776767002031155304479918355861115050998041016086837193337357975553651024649345386759740045299465443507262891914362838579825472072300373383314140809137622653162428553463542462300076344744853432331717707644082936407500448460168077342282673654690211705120825871739934721949817495250924250726925642789857144682543911295027774569440308524614307137969039330836064040018859177956858262686679114699075516215713058458238926200549247748286076368766901533212848354177289041468683550109704090524777537298208489933703135462881564099431841848525123082824584262118062924394370484670057600731014483833794809349939449513215416659281982338744013219843698812101653169164961442714143245482547387629724500143589118257677641415351286224243126644694731445894464907012370826536309474640534463336976668148365069960714298144682556320014978368933051669087408158855984456703270505669128365644980537540195891176195932619380439852108327520574536278469874845019532470297825798400478093569804309947662567686031949573083415953921209066913357170933142936795525992559921024120101313417481679563312303503160869343508168983778370718810001468711081456752658660638884619648395491000804102621263814323434264516893555329375430827852957296723644138547682740396981624166189947325058111521969662924312118815724801397142272873868447289013964235982967010968586926180105408495917618647401412474267934889758834498858014189818668698566257552425115133889558784816299389496397417033311988726873131528027212434926334053497309720298910228004908373296479534316950778781520725900232954876062179302157414640607899306414205889014396961918180959152949138198462355194937194456512982188462378681558730644868873850415529812634340472775726538865787580204790312618484890551873888725947776814785942928251702376169625542673210477924328163129048539475711728834200324746845178811691006259463580546059295237249941449674655889780033821763324072532714591843213015032197235641764896047227129055747346130958417293148044805889632654064150538697516962493630444716415940433176064306038719972147798773892848955893028582296350937617680827682919135911466714042777926514452512292960800340786722340541320649179899342782139190630921424731548524409813721719049277450147536299714482855123942922188882872165823371928562075908049597357931836592697073626866846662967056473414696012289054649334216959657450094861720796723399048221426950965351576190183628497897472913885974861195482287233272330631073272906238657963912961558017968672419636993357507327926654753450832552123516981295456326013018790230598241273242036157017241368719980083222349838069075595238052192860532054572107246906693777913015221780039950986575108200809776528168571461898916911635158704269356305188550156111768320987228764381341870572861116475331926890642183771521971835146026562830353905646181730936806570256764236706591127446751335707108810195680022570551336875595585544273574341544072591447472845400028098970682853724683437493734410851193196097453241753890472845085958747424602856097878528545187775407997154621177303031339100172669288976201057951121885825950956918526102107090036450824200069159718001599236330078833562106398636742717199392085787672934536134885946613681541796565247637961760715070517432423497976271253568381906775894367733653120631963151801986593531388967149711435973775550871188943713859848091954630234668612328899619278198946718625627630057172226198717255668223923904890768146987080707751220177091609648770120434768279559338063610192024519833268119705454153308595651538813921780342498141963164905511260143454931265701556562158264090824648351579043435702893453635054819012476149728370681444278505199006903212896548769236882909068546671150995589760754891507625492685131792418299782542728547778448453461101792924207968158552174577602546294984095234678192840960476386210024350185606609410667690932843429705931268359659552164788030824711745176610929643714782697763464025941436376119883442043651405819785395750254618094489169401030013543819259121122854238722988776519602373221724050916405650079014770648187623734031750235491964410642041932852871687936595663020518293155034697291267571007407824355433018154958785858475434507850904892164905683726569122392614760515053956908698779269999187649883835020011034268265026969018909896424000140656288941654229991152436190033893023874485198177367035859326595056483973691102528528964240238162690169769797872053924417306882145869496570622068064152567048641672910089034466482148259576598883675676559305620962774588428084766784414116997805736320364832583212662721001886011390639353175491376666606897406774841966431435260003955902744717191497660803060479889578097868601071357264140408520715503208109783638446056461520984027952828516557607719738796731794525772221096980949945273561032910012006494033523485945355873048645021280439047580017537220142423121774893185173329466211269176408088586862489556539533649460684315877915679859150495016361992776208222457743409154600833608278358758581453060018874654806158469935209424129086588097007658952952942711111315126687583428566179129561920536410044079683799872613222554918639288601507650870472774003701806254718086876319171696486793614727732979757046379755146280328266354020758820986430077712971580486344586381703953969346321181169192104636494630154711153619666625612026906439506854218786812240993780516646058740408377608389717211889712944024277671668754396479044681943854146770948657994287785792979803623008497859770742430848349599307423855758769983547158184688235373094032850678988103388739359527893501071404914173640804862181613420873011412458842231120289553227515291208261892442680444656692441590713999797893022991343828360615540663044391445778085139945599094074239762612456772578548076328639557450793670916499825916076795474644981946658952214795605488453772955033488494865214498815920404443957690438775163101524744668822878389148182995253640866407630244850888822773889814481442580382544887918223306200047057093191744017116590681555324789182407775866665100435926469674592435181453789517497170913007733429647167891477189372321676652882834647772070310297542094397523932163345722780599675988114774549208494809224706159973495073321478676741593210626463245533420320135047805255300115734651077808653087217338440136071977085011680526600480673446362453506269853330351107802011024714941904163599640702033334178009708280027243676240239632839833190086800100058785505242035602151193311212381125806324264054598875454442839222700398014359114677186893678295446859099994129657734990682460457444371064184692311755752541422151199708105198384237430802858411911034947006709981625809080232934922144135663658449085571277501979917843893240809260006508919841301015540362593229032108072689825169873993483717822344427052288062898849905137744969579079629178617645467526962720055032628667023552336797726063643852366606175531613341317196197864392121268769055177347789594578286793751698667802479410433905992805940732000255661814631962700778143239536096104701729340494466620042894434699772502523362436113819044501776630394960920395546918993072887803159200038513497548607143872818383086380817680722559842374631006953530567999908324197175226060014824313203037348268169926095288097144322551789684890648663457922550958843785072651487101659277551662918941361681291844882428584914633290399404985318303936955530378939063462556418941415029264319234049598323408367493224900433835477731924409751183050397065819857193854143426088211957823771085106209820471610682278689620969757921676775517314616530623257688107672947682658597173652390580624930436511108825021373017722979145548745526360319873068471900353622658246145403431408136194441206504994577360905054778745696917584830341379595574153259059234508991895104113725321454131921375733178112506607565288638393093800774772362121100123864093486021508415014831723894064495994297265569568730807876269888569731031755846775128444574553397997813792654431921834421363070757915775647019542518885598183471508749639882165975381022375915486437492344074425523139962629180384112629956456129401567847766137658011123670830980985007918997025977030110831796067951569965572007575902702144061044911452833206811316731088885223390097768175624261207932093558751202518412009102502007023386813814634972054308310984171324107369665562496654937381813957760624019775704510736176400350162938954403024939727373854471651438233295189222680764895418150428010246315726137001519913632525676047478506575714031274113457537113188910649703107854178914089554130455302878654582163342569616634049525997099279447905529226719538257258587393274130154916630672048328356066972804687652587441088521105876230763044801393780365032533142790361470708396485178111545244300098858104533794718403395346580859879503012075351566479135465214976248731740221718399842254842989306171139607700220638169440749741888701799889068347341403175965274567786320642727227656038739437174585149316301185870988806202046350716742616122073255219743263265181032576138673817502982223737574646083182965575011782438275471222775799172556149461261270904660505267167223932500389201907340426107384301197825454396941178367831034191888309584133979272805382546626473199829417047335138373106220916975733273156589158399416510189572510284174693874373753133185652978668579739303451944894907199782629217544087253869509690256364913361662649103302968370399404779514747755870330411967687050772107617321483418530312001893714042946479603145311350066416700023524669310259433718669444400963997152321649187814086836681368125870117467589428150519860600640710086475174958709157959905729767405260915067140443398013208738176994367507976640722447299842158803184305897947861652814216645807199421852517436374675233515223073367877374551529844461509573192306345037036313453322168768871805379018319904446550904855025013177324986195190433459157524173696890570121205948432263283565890164054944492494351263003114712693604264490550542501889653141667181313000917724453608551190885106698104041467588804923153077182674791076853804068398921227580309702149594473809868273473312340587938036654043442190717164560665129378355602095649072482648351965488556846296156897637715040962462010579776075850857781777376501426558909658580563413806753500690392254667257452261154877591099601883907846796078591115005269420617357121701976371785105596442959618559023720438391967628002735526981355323275637931672939282477623932022778544033100210379546063147023481872886415248211452729969152894850131780271188121472084090813830635493161325791646756216819484619434213399002311094007368175499040105370285459703462333608878126345166364275991309512708416171091252888271665752450769886751300197665033144009722236940513663503005517281624212062955587593905225204836125872420287156842497966510035381857017390496082026717117234446921374861682933593570817241106919584808267765255054877674327988929228526399335672320294573301001520843029197879539804218174400897658113932684317529388849754954547596665544635912594206180442533467344212032289410055743489598571841851117728886296883795457231078767117936640524239691929950908446099602437176001623544091050434889834488714558740591334803757508108213516471546244015687292725425961643005362084352528358998024484653362422817109599601827699239352698885776941029330533541192182033534815267864184300550859195484210442525809817478579086995239359572577878359857446016518293777772864837474595440203648840299944295003769029699812826670409448793305461680584150168511183561532408798094923463652836206847759544700761192784929675948448992774264756317901512710819515240377741714381578912318556683115599448809641013883431262041387895097129237574051734778907972947159713776030845364618737701437543788226417693517009464573693269163629836955181552453496432755298484707463786288236903178335220459845956025360838502442970340189970392285865395671330968107511680246013657146012292592726485990026067413336342912103988713654170966139605163811546859346092725013904046570958813090147586439690356080526002237067236208245581181104709820327435557479421048052102582945221727461079444883918690338568109856888473513216220902224916728774326675355246632875935193968645350659198408253015704540743454421175757722114992310792258682019154490386219338234855437019047513801817401966723441526965608853765796515819930902713986177822928103138866085869256177002823453937381750059810088988044992163878606494194942003728500483586733358419306065079413977546321632519557047405447758733069812177634710857655153708861398629124189882384961710471521696214316529809386737702792483019120104057983961636647935371498532955879072997143024922657859098831534282291039354692521854358932834033079077749660374347639359192129174608455854501478303286948350836377823786093757486840385379733704303180151630575572859840539517606670680890940314761502410867637720572494875842467283500906724147538683524285131521824679772373745705655291821841553636624574535994728495285140266712799463114681763773933801244847002709448323561838029381738291966632458552074655518389534127169628384377734519284699241471083404269760700018182204794404287701819691216381554007876115119366692872982493573130991180381561849948696022256167794093781010683628532555609969925503390052027633657135364055586665400097666209196786378997827923885723733291301616727422693871941122400000852137552752735919034668718884001271277947100817035228006279688274415192053253373855168093694549786789710733924396709597311514345638326570413189498231548126537259395975675283269228288437973242922424415919423396209042686615963781323856273642608141820472118230036648391889539721693265027529331515394513993428691615334165115485101112923744798941721691321577793251660840054500252718711487093865529781654778907992517365552078125868472676816797487586252427646134096661776029377149391080559672415449995426515067850638413525415089100674005993952074787337038441672320733134525556389880446580080915750147942037139997249753619127876102451083024162313175339423890521136479018002018284869981683123004832474627600914139214330016395652367362789835704364262039618514932181766121720953319121045210670266874090641919066784531915512931161152675968995662200513952927276870774262354013616729425606192170846845084136763603683726050134796690309333172432767501077016178941879137036576410003615620374169634228827967205498547282836561829082987166479810334518370009378884652334426945447921995955901150236225598284371072480043530582240830473314363170265028896465972017758373959256362854059666662550126674583687965776797215056816760067845756991797032721491730412298066456848713671526919843460994186809763222427245889347264252765604238690439311764137594322453250858384001622021750225328190551116273623414797841749098958001' ) ; diff --git a/test/src/integer/arithmetic/pown.js b/test/src/integer/arithmetic/pown.js index 442ed7f..e122f14 100644 --- a/test/src/integer/arithmetic/pown.js +++ b/test/src/integer/arithmetic/pown.js @@ -10,6 +10,21 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `pown(${A},${B}) = ${C}` ; +test( macro , '0' , 0 , '1' ) ; +test( macro , '0' , 1 , '0' ) ; +test( macro , '0' , 3 , '0' ) ; +test( macro , '0' , 7 , '0' ) ; +test( macro , '0' , 9 , '0' ) ; +test( macro , '0' , 11 , '0' ) ; +test( macro , '0' , 17 , '0' ) ; +test( macro , '0' , 22 , '0' ) ; +test( macro , '0' , 24 , '0' ) ; +test( macro , '0' , 27 , '0' ) ; +test( macro , '0' , 29 , '0' ) ; +test( macro , '0' , 1234 , '0' ) ; +test( macro , '0' , 5678 , '0' ) ; +test( macro , '1' , 0 , '1' ) ; +test( macro , '-1' , 0 , '1' ) ; test( macro , '1' , 1 , '1' ) ; test( macro , '-1' , 1 , '-1' ) ; test( macro , '1' , 3 , '1' ) ; @@ -34,6 +49,8 @@ test( macro , '1' , 1234 , '1' ) ; test( macro , '-1' , 1234 , '1' ) ; test( macro , '1' , 5678 , '1' ) ; test( macro , '-1' , 5678 , '1' ) ; +test( macro , '3' , 0 , '1' ) ; +test( macro , '-3' , 0 , '1' ) ; test( macro , '3' , 1 , '3' ) ; test( macro , '-3' , 1 , '-3' ) ; test( macro , '3' , 3 , '27' ) ; @@ -58,6 +75,8 @@ test( macro , '3' , 1234 , '5856367529932071269049608726415028439757143623443063 test( macro , '-3' , 1234 , '5856367529932071269049608726415028439757143623443063785468784843536946634255003858796842453459905186846046851774292445753149532138648409140561593823222428559200283816367593571556942770711203894947318922509986128995034233177140247221695941679146171215675158154358685224309073135481486540427499644363484815218991488230440687359021965115067678545212365725678242878485920885436927030372580147256775788882374301866845441065076726499613479868210410548366056401445912760529623658838510267592199677099676046090140514526228797525926977514932394954796457727416398081482661262807288229389463819882569' ) ; test( macro , '3' , 5678 , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; test( macro , '-3' , 5678 , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; +test( macro , '7' , 0 , '1' ) ; +test( macro , '-7' , 0 , '1' ) ; test( macro , '7' , 1 , '7' ) ; test( macro , '-7' , 1 , '-7' ) ; test( macro , '7' , 3 , '343' ) ; @@ -82,6 +101,8 @@ test( macro , '7' , 1234 , '7095473421502801124010459514149892907042028920036525 test( macro , '-7' , 1234 , '70954734215028011240104595141498929070420289200365254864883100224459061531095964535961424752183918983389834714345883085722594630104327570484382813454950959834721299254363358098967399048133489131401375954827777487240689332659684949614116231197346793510695402301156840458057925504143947679213040737846060014251249690928324441226158708348216074516368113070768675494487327714367821662938661080440834970823376650216081882744143161592962823478851621834726159007802788609981541818975600270503709811145869971874252832721423453899821462438727851069669041332053765106227148570291872998008674128627485981069824533343176007316751497280494057995201432198045575691194828311578763776024467116028227768366827683004790939265568398432923069244698164607404132404210543306184313774389935234011995625090611727226388755028092996618090667295922698497975515840710550500258575437750076719351206138149202280453034232757583405474400100672191700332560347912741669538744924043142095605796598736664375513698661239721232174697654768024941266796370339939780641017369634940849' ) ; test( macro , '7' , 5678 , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; test( macro , '-7' , 5678 , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; +test( macro , '9' , 0 , '1' ) ; +test( macro , '-9' , 0 , '1' ) ; test( macro , '9' , 1 , '9' ) ; test( macro , '-9' , 1 , '-9' ) ; test( macro , '9' , 3 , '729' ) ; @@ -106,6 +127,8 @@ test( macro , '9' , 1234 , '3429704064564266967142065932165178236257925690701030 test( macro , '-9' , 1234 , '34297040645642669671420659321651782362579256907010306825298584320017224909034295065159266732166824736588968016033381896847023243099736344433210097854593507161679850671932155017203599500044609298345843661231598352934672574000630755280719247078658076071069504371210453795997193380141459822909472292250049962822082559318856309665763195373936160408297178132724501864611562349337209033935902601202229170588203644970751513231529370646017342084334943445632338625406001819417100075123659123153934372275946883429572960429182400235833979860757127508599030945874737763438221696224240363286973695769026948553357192210469914347532288838793872337455361841599848707950096810738215169875752378946944496071085184269469689190048414428631904103213703000348839546159132360494448224371361413782868923322232033859714664315449006669237525993661192066307764695656412997620762143868465614936957887460078238297229855499508020184426374192732713213787351302551235717525464575349122336444905826195262672337776865803043472081042136085365758586709594709588874980188963624351301943558778230597943000313246648597648327615323559497393534626812152826795197456515853598831232826676446660986298958124148320950039761' ) ; test( macro , '9' , 5678 , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; test( macro , '-9' , 5678 , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; +test( macro , '11' , 0 , '1' ) ; +test( macro , '-11' , 0 , '1' ) ; test( macro , '11' , 1 , '11' ) ; test( macro , '-11' , 1 , '-11' ) ; test( macro , '11' , 3 , '1331' ) ; @@ -130,6 +153,8 @@ test( macro , '11' , 1234 , '119832186933538662676926843591940005024338938454807 test( macro , '-11' , 1234 , '11983218693353866267692684359194000502433893845480769112172251205188147262289354049461429172488569661122876033605557421170789272790102054304092511689341645557874249802952871767405284987003806187594928847518777345850099915863264078051816617440620669835924344622459557434141694081118718006962588499405658476477809584051185924057025464163718833076869861008662963948775457304791091957146272768229564713967630639094659383688489828857998385412406001934065445969895732784144880158564496904866299896753946773061123748947095350178138399329492711931118102507186743010708942286629969813642204878306198565914755078983880064808436574100979762259478493960140042607880569732036310833444310215790281432505720437714904537904767412626253808859682743392379188494787465177304942343204339576610614978528053711125948630650946573610344095512008508992625585490923211491629695497720992580178320146672152256706875056491678710723022609578354722578101061602454247010516142562468962308895384683137775859149496917496435957009023897662611266558969297452444733968450168403551460556237438931715240285963118359275426150086656493777954817140258639584026557409436805416478575578840073580647683266895284248911727092735184253994397858925804638577468716770187699083797737507027525458211673613162334364880959262660197607632441' ) ; test( macro , '11' , 5678 , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; test( macro , '-11' , 5678 , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; +test( macro , '17' , 0 , '1' ) ; +test( macro , '-17' , 0 , '1' ) ; test( macro , '17' , 1 , '17' ) ; test( macro , '-17' , 1 , '-17' ) ; test( macro , '17' , 3 , '4913' ) ; @@ -154,6 +179,8 @@ test( macro , '17' , 1234 , '236575071919541870095993617343922148833184955443344 test( macro , '-17' , 1234 , '2365750719195418700959936173439221488331849554433443272309037789270912117133978206777246165583614280813095899236078594286552848472860457643580615017539717857048793304325119681053421007826013802905479250885212839793760101742612296877478711932287387420109262614158330630362237192202151123468592153560375572873151822947436950242912080157786888545384847518810574795754691976973525697429044294851654461713242307440541746159573098284837473930094049306091573440131975480886198509578012017892791103610676499734889373927818577887242310104551008535893775377108954649457429588226369074071331951078940909959401201709240381177136083510255280740550175339832084572676328794889199725393235934601424964165016988318210336776289444267654575587266337284861333685818972410304844379843215873568783484299285855710739185984313729162892241201484427793478780366719828354369198742105822244711994746358620164097425507697349511284930229811697252220792819650825560346717292110648932265899796733644188721108873119505172872099646531092906043987147572277125354950545394615532850018465975565730363029206743959014462690377536775695776234592924640448812639061038539121473894456471681658974744379159553490945761899997224178778022075766625329855978704429033291722506766694214979844269409520158332260044608648267713490710210601126307243035021020433002092628988274703326841291915973218749244960354639698612598420531573152776417281665548298330678827921029701549454503621900176615327265802134551424622450618795022965384601079468969005231566796416059429914871329' ) ; test( macro , '17' , 5678 , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; test( macro , '-17' , 5678 , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; +test( macro , '22' , 0 , '1' ) ; +test( macro , '-22' , 0 , '1' ) ; test( macro , '22' , 1 , '22' ) ; test( macro , '-22' , 1 , '-22' ) ; test( macro , '22' , 3 , '10648' ) ; @@ -178,6 +205,8 @@ test( macro , '22' , 1234 , '354477059642766670493367082551405865684028916703343 test( macro , '-22' , 1234 , '3544770596427666704933670825514058656840289167033434034813245091750883162270446675859397841986880345238161021960809170374322988214534191585053363506454126462213757244784862172250548800355120891239982462620296434675754206726427100313150523472266151826654642293138772262710079764335312817589977974888511704681598808553789636057965795110640986410281597921902662990963638641278281253781683699119666661945433104346601274970659774893661365968347766707077408549681767565454620843792569318870542401828729517938364411892509820193464655128629664809734022850771731500407885408815335930002147542787627415049845408189806745107445132307539157002401311183617949986742914159513317593667951549591942294545010053084686720365553135398975223690151357594502438362943103211174888290826883518964968656962099365383745446040058868947352605005471883468803102923319135160194367582819156826127917537651473185148386098880353425069599001396856273342875688276177114278359156141134393159654758637663041409089129911594364800818125391217718986756939362789014002086984204053324062930069928284955781180175025313587891151051182531528712430068603601480445127763661852050046817311966022046189931948955290807404661752447837636846919052423707195121151844536365697282035619507227238494415828142354268295050195101293247644044457267714935452707723243836958166570458923766194943739329318567831418083291367602614610628703776858094904109993034272453854415127335371407800891291417423473199819581953311554881626790599515656538382928587235599730899217327975918421664202906795230685640597210322674275525454392606193005351353121325240801341129111396762030413616120113277356128432334929643219670987389108486144' ) ; test( macro , '22' , 5678 , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; test( macro , '-22' , 5678 , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; +test( macro , '24' , 0 , '1' ) ; +test( macro , '-24' , 0 , '1' ) ; test( macro , '24' , 1 , '24' ) ; test( macro , '-24' , 1 , '-24' ) ; test( macro , '24' , 3 , '13824' ) ; @@ -202,6 +231,8 @@ test( macro , '24' , 1234 , '151590600073425387047449072838201737923790545622778 test( macro , '-24' , 1234 , '151590600073425387047449072838201737923790545622778515405542489295365280374802003092345748753681766769342781749881287249346464958055559009581857595198530089819230481306713155507019243375785757736393010981297487306518434496622971579086045332205893329146303230768285811255525374621247345141815714309058936253285898983419720608226966436915189967268919455309262250618242751360361248909034678867178267283386443504378478143195886936482599662011569578168577981039494263767900563281750273077550310292671674973097829744745890473331477918697103083690536733167341918362953786259364594330084180149751256516756030378850936663791973239733978417672189517102102223884258181339830461602957890003315317105400603981501400219540598427784828262715802695138377182060865841593833485720205274139142676664443049548450410277812263367703519777502927932788452627831274636998616672291216489574557549335055172197580577132711118453026428882649878235139444805201982069512799047951007377619920034219848761549071361411729427628794049204602980944425540332659900016630759739316868023749785700349807321646264995322781924302276013058208345925931493883895500465669887594678839788578637461303074752727476500990640364376722701859400316730559885693050235239674548455869510362677791910042980988146640583541719495331021584874341075294784062883967560447377347188388603280434006674600263225696860648015867438392697049466565415507219522458255386701717251429282388492292922044650917640291089769306296653188826596134691225361787940784064160312363042310597352769798472903809450672123731170381463659456013676278088123310449702495131987916252551416683646406232220563855513976356100126013273624446723135664155744771247145879322648352616000381514511103819776' ) ; test( macro , '24' , 5678 , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; test( macro , '-24' , 5678 , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; +test( macro , '27' , 0 , '1' ) ; +test( macro , '-27' , 0 , '1' ) ; test( macro , '27' , 1 , '27' ) ; test( macro , '-27' , 1 , '-27' ) ; test( macro , '27' , 3 , '19683' ) ; @@ -226,6 +257,8 @@ test( macro , '27' , 1234 , '200856075209902212199811223498516329401019153294330 test( macro , '-27' , 1234 , '200856075209902212199811223498516329401019153294330654484899457135661710831649025094793443576863417869675999053574959337346792532217485737202817800641723197630343724422691567676966750017719674361721564299756255063995170624987815873886816573528036690980712399472082918987467608319915320632750007215671073941033733822406638067457070592416925055525002249965214978226439419675794443664397992725836030753072150525500182271105668883387299438014566998450801673929744863349108063057027323538841038850392906331064754828529624866950550712400849201192591205142296901842010465055290151680972126095024443830456846851602321575873316021498267598562024770678289890230706320997870461736064158216930272006483331205888383426585499224333788304253250735446206878459830691428518801804316734865056012563110060177249063533223360212951908142458456167777780005320459640618276526423350311574957115723697862633038912990076590485058168720523332363832907739630745212612829631298739740918292687323963984732777515115303964140679392026532299969353302111690876222512591852054954749110470134966527453125805201071472068728012702260328777663337721407575454838256471452852284288283640249611394712320213997254539391537655386427263371372214172403860536953046790124191276197581019979325589039334200287751090718265018203205058843589368322867283544158866611521312017186795565242663733214746314148048347376472660469372081324221562030477828367398702782252799482995882978202357840004609118497407774448098166472475681019210778338607385302368427582889110199771043940039384173696648402793417875142304690934448344767850874922126620454594771669567183452729544713864889437820573063999170931037181075406666631149358312284169719891882097692840499902508546688352472767932029187479332141883194288344509584921993462900826009' ) ; test( macro , '27' , 5678 , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; test( macro , '-27' , 5678 , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; +test( macro , '29' , 0 , '1' ) ; +test( macro , '-29' , 0 , '1' ) ; test( macro , '29' , 1 , '29' ) ; test( macro , '-29' , 1 , '-29' ) ; test( macro , '29' , 3 , '24389' ) ; @@ -250,6 +283,8 @@ test( macro , '29' , 1234 , '397309918804952724322064713918779718075426736279577 test( macro , '-29' , 1234 , '39730991880495272432206471391877971807542673627957704904437675569298014672895070646102535214916047201597057604326381566232240717146352905189648219707403914660579022999012335291748319902460223265040313524900417222861808879210656981706108411235266301032093577572784389639719581120084786412413811442838338528471340965314240553665532845900842671741344271394471188943084404951380820901385463995110598814337441546368977234557474886215832235597884716646333931698424620615636355660537976497375196427830792301269566792792820200233670131878651690073642956396203530193828971438659013332283684624052196883142348635262157010483447752926525087705971032741588045925402251432696384942322183761498083408303101185212952621515583790502916056759732756688326445700770330618736098784570958650303610518453345373695638406312777059006873348441083653408306117070042611172352888144271588938812215283718988243964723451182501170569555882799635882695185231569905013697274942621016347442475467611094595589653640159813052986283489436916917813443702411392363491760078918071760360736064794346216924583036877713278321020682861527277057026346194702327617123158348328127954077761730411509703210527413729724018291740451232173623681566068132712321584183435235162559116277847790802991789615957113420980884848226115467550693444248836097094675037594634337127844160706154634179432597281415179294940602829040686835658254209377758530578171235783275715264069690583402743872874027236142735859680441203304209066670057316622505879861269271750030338720992453155828397426773289742123912597304182933866285890213055204261259697174309425441282464103760493735120470209861686631467978789655753554085703565573238818516254588594497513866508088253727621898347478665593386957598553232780662697618992458924510409036459946339696264729231292522628108751878543189439881' ) ; test( macro , '29' , 5678 , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; test( macro , '-29' , 5678 , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; +test( macro , '1234' , 0 , '1' ) ; +test( macro , '-1234' , 0 , '1' ) ; test( macro , '1234' , 1 , '1234' ) ; test( macro , '-1234' , 1 , '-1234' ) ; test( macro , '1234' , 3 , '1879080904' ) ; @@ -274,6 +309,8 @@ test( macro , '1234' , 1234 , '4818446778138254370166718603946840666105977023759 test( macro , '-1234' , 1234 , '48184467781382543701667186039468406661059770237590274727670474872867568934066212120125133953550629961484891523453397766904292741725027019645437267985042784717562212455213265145073576158446772320656790521515384533153285495122560467130551068937365382642309092956110550380937116582823950116105467284919886128590021120491211422848352480419801389040432671756358444906225483817656922238136306002774235317628882806945193646888148396110892049431698226720231373322565553173892155104287328274243305595665720786784052656812367125148945799485499060066329553808509237311004983159894774937428752149540862686417306258598574741354798734543908917749037010338607293558391168741173229347205324015819180886782731783732875096308025479318621477536729557178851277749719374746640105570680704597488214460168162719035143192317718562628271959732323123847141889566569180545843169342410738692059982444746465750802950208574020617939255322870389259522352007286309084437654560750826135123276437360339867137662914521505757477954199067061537563338324827971696801982963501680500285473348151566773437596060788388816834765832275133438433921225741018069257650081651893412763515411183995641907421720698187041665296617342826301233824768831086783439617690340317902242011073693697825044232174730876417203502412742085342749470261962000902738749779130464597185957223365845266728739264096596554562810900489160285087089151363421121896616575007056439552166409310603897415780357105218172824045265515881762471530724320743935876223471758489130857861949736325801719247163392163145092104862730777665632878101469684676983177748845758819134783307275384116307332565581471205450219638137864387568253396048525319846029722597087368081615296780675739066314774724547006391416740049175425483980982557830287877118477623151223431159832554386188341940675670910313367805899112248803570997473057794418174867654496284922646065073429519234590181376956226715629044946363751414558194273837719521633486883608951520130473135848525228767697904589545099613408858934772678955107374792767376297292404355699412788887158297703071562694349633862471115563026643188726923335031942038276485070702440112289573556176109970627523424440589934713944485023114357294128614721641112627517540349238220184422744440362721622786094864017694819354467741507712876404983391152695521440373975295468154208059821687654408426427370963930322531227395895396783921477437273314199002421808939747302217153865116186806351980760710239964563379901328372415061933640351961853616394184876278706277214297206989695471340253866298118966493903627998818702216683968716037963198654625001668768390791943686432733286824675468274040171973201059002888713965690564527215419345100503188258777506372065686193271207542007415422109631813074486204833751677472525228744950194297089998305021078379670692156515896561318156670094486647187285361909788624195866103332184213842805429511053631902833667630273693526699848894312061513323511126288640008264849029913769883352116160378319937025276742846457501369721989078408607355941517261584972558483819760496804231338012065441081939772196754109683768808242484290927174759258520839532703010720373548957783991479615682174614219692539567777715560109326389875468292301222743028820913581258063284673412787274389056140124677069653486630962880192937633527058165237839406307326482619493415666561288774929091975803346338652727476500670928651812154306332363280019281880148780695662032811060669099701522746512853264775139655489705043573689252437465482977809592752059272522878781208311791893662451561020284928906469358115442883064671084339186725298116883304622860824362268174217031187839248915211550033719913619980315078125050194505282396757349145204835262063407488072671571413182055277457862261818131387963934879102237121895980689553963436483304289698371277085427432858554859126640569432899045006806292448711540736' ) ; test( macro , '1234' , 5678 , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; test( macro , '-1234' , 5678 , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; +test( macro , '5678' , 0 , '1' ) ; +test( macro , '-5678' , 0 , '1' ) ; test( macro , '5678' , 1 , '5678' ) ; test( macro , '-5678' , 1 , '-5678' ) ; test( macro , '5678' , 3 , '183056925752' ) ; @@ -298,3 +335,133 @@ test( macro , '5678' , 1234 , '4754545701433992331733575256099410533228458670475 test( macro , '-5678' , 1234 , '4754545701433992331733575256099410533228458670475892396381228147140277468895263961376711046431196278059194371543633511738104729515132046647921588948673317858795453334016910038267103044330714716949310557017200499682459199588937173529096934288020024176158267550101701080481254770583881162470132740630857097654899879616282728381172344973405997803534651364288959497452319805334849653833958710102843349430647090705281620494871877782238874887814289734228053896202806354761750369269951229593313010945689761891211258688068066696055485242378613245933537337160634515912577045202472450817451849184207035648874665441200090642213657945355196460821766460825032224534602658525599188179237649065062512691280473121441573617950552334838912754947407978233727886935344811884839323223019614920728343603125258018137019905454492748785128237691020015003872956540230098415206613398448533046207656300960598259213003433022409251838940742693047445967307981951797528065313733200257272599665561813580891071207079215211460876715623293069910550166302272098118272527916433819800298828239405657658438060618142659814207004518209034153803725735869682967280748736992669014651682583009724296577174387664968207473327117061022862388179179805519732871243762549484990925427400006876201981312808033770504367669331073626566876134508721159965417268468228608040850320762590581251984432320891961775899262667965048729940448530756142869126858563901357526390190162408750825956708618281237598759925725241049426257439561800035105159165326290183277107179838103459135561724394264803171431808241820795445711863608586766345039254614846933931024903619561176580056139441625967323631797367126958482941668050957659192162167276197457147030284596116968435975482030070191450200681573163807130339270972064786812978664842441338738386157257657806440916739246453417871760401803525801345778950479694386503103948471086023573572269171237514322085437996393254976781298685048789580780175371793986673922336623057771141110132765327451487041405878107213683772036140143582620048289665134817805568670112167960808287343393646995734701543886022122701209620784296421140764622633595229564449908877625079263109689514631383456799358203288875405982309838110130925886572530681702118654886611249141922200019882428708452245424153239056842500484262106739374720265689912446227419480220842375352629558959175152376134258348738676918576054510702773097564166661175972907344227049028399511499148144890097723715043579731339916022734957419253364608790001408119360562088903660541256901511777417919298919881207626846049705641631114520861910821360106286185700362951871430037373045323853881352479438655780016733428623128344067196426832063335414492412985195862227411532910672295727557475523062269393814283457830004423808768415796967148960731363753261748078031957490406872476713147808646830842062710450030612153443209478241811514340917541321810139916689385477670593954065087892241850261558516392240563145569557862995904133784803099322335109965684092492599160998743520079066871458347318820041040608736708265400811003296782209446700589963177364290058854636845629046307738816633516835431430230362482024920978970474394893679522412954011767859444487351352199067658529260874277691008237384360434306282016514094096768013798147480740509779810560544648455485790268334288880803641971210749525943040368705400269755514646235977621926612279423197054873015209023113609804623745158430744774035859946298137588499302254901538876084525827492824031763727264344218393017853529749735850655796213422695465000659399958563228524294668421953057407346976847682240743601105444694630169017375480155130799595124045461115669497563631224904361329523188370665305938674437690787549882389569867694166936751165216920602732743849889023149711513126398908342104741198863408830097845137505662663458382001009103659839197477448289276824608807661040318889081157573844237090631229284090854577084517143322570965548490565414070261786860900921959546383612702905328456128108405235351119788158687215861758441073018835708344133679077552976919500888460205455433542878586438605353256917018782886441646030034030257088489389720348078103255876838236261154196475758170227577027093408115125958792540599677335099871170489525421378579051844293126380522395565389230525206095904182031294100225265853213565367785174160416143450757600749410617414444540260518189203196008117912073471241250825794798475803391996546423777135418649913067759391180278825562475480988246874450672101428462254341590331425352560400400946802179861512954182324631693500044001899557332925974569520166679673993884049720918350709799494693984974735913494505510527664100089926593875304828031765284659403018738108240944539887468544' ) ; test( macro , '5678' , 5678 , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; test( macro , '-5678' , 5678 , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; +test( macro , '94906265' , 0 , '1' ) ; +test( macro , '-94906265' , 0 , '1' ) ; +test( macro , '94906265' , 1 , '94906265' ) ; +test( macro , '-94906265' , 1 , '-94906265' ) ; +test( macro , '94906265' , 3 , '854839628132734960159625' ) ; +test( macro , '-94906265' , 3 , '-854839628132734960159625' ) ; +test( macro , '94906265' , 7 , '69352828108196345571302714548224840368303639678393515625' ) ; +test( macro , '-94906265' , 7 , '-69352828108196345571302714548224840368303639678393515625' ) ; +test( macro , '94906265' , 9 , '624674733432656449761568667443804634246952025778040170044028517447265625' ) ; +test( macro , '-94906265' , 9 , '-624674733432656449761568667443804634246952025778040170044028517447265625' ) ; +test( macro , '94906265' , 11 , '5626569719411962723650415167546096949953068311825856718044176845859638898840742041015625' ) ; +test( macro , '-94906265' , 11 , '-5626569719411962723650415167546096949953068311825856718044176845859638898840742041015625' ) ; +test( macro , '94906265' , 17 , '4111620266471980471028580099675545097434173613002314680540141671482471036233068045322249236629608058990135835756014486176615142822265625' ) ; +test( macro , '-94906265' , 17 , '-4111620266471980471028580099675545097434173613002314680540141671482471036233068045322249236629608058990135835756014486176615142822265625' ) ; +test( macro , '94906265' , 22 , '31658286807403612933666095532663829606917007814138968876951811776281483501242674522295256018683450991389450689602591230724763634593416216499485344394982531093618869781494140625' ) ; +test( macro , '-94906265' , 22 , '31658286807403612933666095532663829606917007814138968876951811776281483501242674522295256018683450991389450689602591230724763634593416216499485344394982531093618869781494140625' ) ; +test( macro , '94906265' , 24 , '285152493586807715635778250040629704568534899170608577332704172832192470586911307092645490980725710064416470215223489215551076054022142237008690911252732817102771522852071313917636871337890625' ) ; +test( macro , '-94906265' , 24 , '285152493586807715635778250040629704568534899170608577332704172832192470586911307092645490980725710064416470215223489215551076054022142237008690911252732817102771522852071313917636871337890625' ) ; +test( macro , '94906265' , 27 , '243759651578868798217281108206623463735490359085472358472465213305940907210363261308064405033766654095672155830024986524275053959211648897667524575409210697695532573441399310923762601838833141075350344181060791015625' ) ; +test( macro , '-94906265' , 27 , '-243759651578868798217281108206623463735490359085472358472465213305940907210363261308064405033766654095672155830024986524275053959211648897667524575409210697695532573441399310923762601838833141075350344181060791015625' ) ; +test( macro , '94906265' , 29 , '2195591723153842833976375183141740537336638451104209452487233269978099251091719201006853085913307473345723364352547986672429911300801268569150014616303465779606927933392093058172884011727748376587183753730532924272119998931884765625' ) ; +test( macro , '-94906265' , 29 , '-2195591723153842833976375183141740537336638451104209452487233269978099251091719201006853085913307473345723364352547986672429911300801268569150014616303465779606927933392093058172884011727748376587183753730532924272119998931884765625' ) ; +test( macro , '94906265' , 1234 , '9591459179410241572856537719704118795351000902900562305249195472196195265555833412754864166507031793587379195925582803572210371959180740848015702606653712794907807842820287303844298057315437721729780551771436713566743567210455419724786856660298500086372804403816338340320302120440930931829619194880300084268951845577897562834735753784665609019198203233048867661024100257335806608791247129540791927592412584156372409767363191327851323280497596039938628887351085641878361348960836551885434816719856675096140100735098153982014533453294086408481103402371073765234498437942986299185804946033932203517281211025355740639164406513819178508651837986562373156333090579411143890235647767492144926855911961561170349672014614629827840596629153866370535524382716502377298033129875940828099612289849768956366119182226196623644421289199029543705885301848203842046242909504136594099983847607871992398930583777526005880060061677287301121641838813359760623338793918913138129119762743481238358717117820874141719166872107856435512751028932079558518104984922747527693664219154086216948208341876460165162264778277923815846538502672245752434229656583577521062954818225701253649577703058999328419908839977797748333637247291496547242568819156256380939652968563081087936133413669763802314091980457139588435626848957026334101428382680905361934063504702859864753961075493938097121116859339830550708349481985667854659071598612299339127950437953067708898374986402646559951120320721708316727933224792697639478435468027888366917714894730680032991635257046230944591272236530617356025218569172482915774764506872033088367335012521246964352262715392596661114331434581419942425209861303052103159737141838118887593079659533118979010073029109419153504531772178157803880524448253232397504700393645418278010150165092760716226444484244727105637368962191673677518823763517102430372508776552119355215943188635023271972752127662635880598372673204814450697064559754199549908021939030958872733672399702043041508144639801430320943357267841707000400404222832758589098605032942287405982133506381460750004675066342262085479385836480909763864598878090750329455982787911478900279885781537417672577623574196534254896533751763619748632866305445903742663767222380368598056346743790273546285474116657619344057407744566063285106302957424998222958334563469530826042006900334894940507739429822757677948670771646446401475234418995859933358243130008180759536136782698587200342015804405083654362794667043715432498830242795494530307701824122299526072682392416883591382466507093702351999216857924284228844163937090047387165802061654658731296376218866164135568360515357769852411309461140876077518669664598359667926801346716090206666283623307095613238020208838579994957805916629319170228853022067994759954669755848747912031498150020489023940497893018969218903299457329957933615236619153547835202992956280530580346188048475327939781542919126773872016959398231243998998083738131590171425213432398708470769525054179511894591276471224027298513771970571872065972609539084087063890507232242147976054307202299424358550001984668194552970122408292816135793651096260341402739670890290539634652749733051936121647220510837557946150318744548419221954103573224004509428899118772854490532692636349984796523606799588426404592878065079890048662999499258496147403823670334749053718615662500854192465254630734735470592657444348319716921656900540143255754066981370219643196580126846207577613002079274870394367728741824995134268682147619610980271981665849912854000586266885293690909808590352073959622797877167704956570701109840686451917212334062294475098780452199147749227206592489248155417621634742859122288908494376684326737988496746942171234696512068034353612026733019551888985186714851252843134718646972681183302261929938130968961934184204726044095752598480264969769942628031493505879722845317398404404766136527772383991566308125162547193990579656303403990650778044081542434937085597660623254423002156634083383451136994840415138061841621305110130354721521708626026722411562666098237182221903896143296122843453808861853136066713710878415727201422848026825971083548440323207872629926360833682353471434194454802487028406023157541739114399209811757523364508775327465775193793901522174053677751397308082689295814009742424096663245256371127275554813138918104588578788434671001200499772731239526998926007344889536787546023840884563161206866436260069860416345332711835403868298476116559997395850081711369707151087016769352210205207119306587204232943367376612943973885522556573557976798795448483847878609300730594170921845018856616294672752170650749875613401771999207041914676357273072487369912122604321957851850328366064475250473555501861497817846228892630981428024352453509525341771499168825703052936994035249193004718133969293658358477955548441418729299358481051187146133695328375103255617003032549133648324739613350912817202951672035960629467437857895034783268578652695648468049772851048371268571371710174944747089771007951326599571977185536818992501092538130016192595691688560212821744518752775149044137729808714578718821728891394252836114476272385593027217713947689935751224213096850232388887355044336182239209673510124360918794427492709842501901193642964413018899346419597569212619882459708253025895167986898921776318809624757908047351541616537635979411987192357052180741057545474523286703219489442558181392097429272725321723344296968214353129336168551540947872360172324488054726452312277329954745258701008482980205872562874886601633986054729698061958995727041136491083854134975456698587824863774357915870320563386104439619169757774004947293513137570115484537992524054976775958147916672384240363706932507971190885901149565024226836664882553925400415432577255921802822503960734813348624446723667186940497582623354541377084135798028997689173921671637556307023496802420683015459505952557023291016881953450025241190194039097347605093809834451182579729476067653116147891893076896501563815659745545701931892765370873530751133774088803218658236918753605920897832799802629346000755537711655733935247075071309299891485974004737759699085619503402054651496887954393777157718744353085477058515846914858988677376890749563402243352948882704897037289535812374920703566055234002365908807572825594074935358170453507404950430786601077339828001741772715701388696819944246064281597875135795560927360428844682508435674499423211270261087659836015113712490214244874535278179921239117786846524745214093518055485811573243729006472733809020482957747407185981860374708684286717665404920163892211997886941891508113407401561122378383848947830545283520019375170240362580261476918548352375204827546060332812320537368384369528982640547689242779683051606032122941971305898624339279930653319150270488626943146630086882906036938913305489203172190549402764186077691788746463406547058650845093618234570304408010293714213219535645841856212002220491279122623456707919822267373205778074418458267976061672627895374645491069976169809979589349440103658324875263502040561446885715685084316663246874940845565163621245764201813071916375863674116631380809138742411055687043053580097915072331808364438230302858541704366985190788328281686095477247372106110289131615169926634773044198632401845844609052201843461377057755829111540009963815904567488874475681740338761441160651590356825801263089126426348110434911655130477948801617551850940401735494663309897855071592787594192797472071274201046444611408640440198255469724942753747645197415207441629405487586039283351014842032997658344919969847875361248802719615209204137908572720005625473028253292534507900617109339302886404737678812367649587493463409620386788766525441243443799986362150864341695101086395523314350910622578929210926494667836577247786854052224561095458041243543570729768588208531982249642560145100850197699673538324491374450242541091046027877347664044916635890341954130056571906109165828535910311660771647040322593424704180434383930722874810909784652987805377576186746140110566133453382033674431223623092747739626762801126711107898439074620801128156500389898936996902615531151609058915444466355837620116136849729671236565382836790985391828355289305589043017696181139493265426855262772003107393380496127707409944678929356424852897833059161296871451390447310222755068231356889186366469835372570926617460311594138251684705497261398939078673207680734548345027894574941971300910638001809666450203958374908000409224916792685389473093574017125721717855356592625547252288452987636361999067948204782699004847095167966877114318996122727724865218771091724949902821421297230591814912641664070615519836632113388811666884300494853790570587470323050363662041264565613231275086236122271260746561199518073931788593225451290704917920481617412178007269106795348325460845539920221204370405830516943074642362921654055465455434800928688359132339475448945798039732615360945805966700833166246956944923319302325595161448667877444353826406797662051236873687719391027503115161380602709771074129428752412878936468150571495391787113477904397126993393779245665340705023574594518096866873547398021846631398029079316126818030712951745225590953502758227266035049083842517044023925565469150691931514472336278473983933149135274596021969827799475964078993259558154187436736832028197629659375815060480641327952346293832946391116546119290464690718192565154980905423079687235355361273794723342189390564486895833368653165830116560978445940636491307093493704382996066787778813694371282496364727933852217652979786611217060627813202623645589310972893162822106395194215667804608020963575035872246400412133950584855358933001394534546590988260881555615516326633872233229193801821674081770373019020873454877625370262143702522777839078500945310035409751056192714470577586167708182037483154162989501269631312341365910403419220972928202706029721636727127333412883747829822332644925037811467375511290618736599996846385043905631496985453310344382771290838718414306640625' ) ; +test( macro , '-94906265' , 1234 , '9591459179410241572856537719704118795351000902900562305249195472196195265555833412754864166507031793587379195925582803572210371959180740848015702606653712794907807842820287303844298057315437721729780551771436713566743567210455419724786856660298500086372804403816338340320302120440930931829619194880300084268951845577897562834735753784665609019198203233048867661024100257335806608791247129540791927592412584156372409767363191327851323280497596039938628887351085641878361348960836551885434816719856675096140100735098153982014533453294086408481103402371073765234498437942986299185804946033932203517281211025355740639164406513819178508651837986562373156333090579411143890235647767492144926855911961561170349672014614629827840596629153866370535524382716502377298033129875940828099612289849768956366119182226196623644421289199029543705885301848203842046242909504136594099983847607871992398930583777526005880060061677287301121641838813359760623338793918913138129119762743481238358717117820874141719166872107856435512751028932079558518104984922747527693664219154086216948208341876460165162264778277923815846538502672245752434229656583577521062954818225701253649577703058999328419908839977797748333637247291496547242568819156256380939652968563081087936133413669763802314091980457139588435626848957026334101428382680905361934063504702859864753961075493938097121116859339830550708349481985667854659071598612299339127950437953067708898374986402646559951120320721708316727933224792697639478435468027888366917714894730680032991635257046230944591272236530617356025218569172482915774764506872033088367335012521246964352262715392596661114331434581419942425209861303052103159737141838118887593079659533118979010073029109419153504531772178157803880524448253232397504700393645418278010150165092760716226444484244727105637368962191673677518823763517102430372508776552119355215943188635023271972752127662635880598372673204814450697064559754199549908021939030958872733672399702043041508144639801430320943357267841707000400404222832758589098605032942287405982133506381460750004675066342262085479385836480909763864598878090750329455982787911478900279885781537417672577623574196534254896533751763619748632866305445903742663767222380368598056346743790273546285474116657619344057407744566063285106302957424998222958334563469530826042006900334894940507739429822757677948670771646446401475234418995859933358243130008180759536136782698587200342015804405083654362794667043715432498830242795494530307701824122299526072682392416883591382466507093702351999216857924284228844163937090047387165802061654658731296376218866164135568360515357769852411309461140876077518669664598359667926801346716090206666283623307095613238020208838579994957805916629319170228853022067994759954669755848747912031498150020489023940497893018969218903299457329957933615236619153547835202992956280530580346188048475327939781542919126773872016959398231243998998083738131590171425213432398708470769525054179511894591276471224027298513771970571872065972609539084087063890507232242147976054307202299424358550001984668194552970122408292816135793651096260341402739670890290539634652749733051936121647220510837557946150318744548419221954103573224004509428899118772854490532692636349984796523606799588426404592878065079890048662999499258496147403823670334749053718615662500854192465254630734735470592657444348319716921656900540143255754066981370219643196580126846207577613002079274870394367728741824995134268682147619610980271981665849912854000586266885293690909808590352073959622797877167704956570701109840686451917212334062294475098780452199147749227206592489248155417621634742859122288908494376684326737988496746942171234696512068034353612026733019551888985186714851252843134718646972681183302261929938130968961934184204726044095752598480264969769942628031493505879722845317398404404766136527772383991566308125162547193990579656303403990650778044081542434937085597660623254423002156634083383451136994840415138061841621305110130354721521708626026722411562666098237182221903896143296122843453808861853136066713710878415727201422848026825971083548440323207872629926360833682353471434194454802487028406023157541739114399209811757523364508775327465775193793901522174053677751397308082689295814009742424096663245256371127275554813138918104588578788434671001200499772731239526998926007344889536787546023840884563161206866436260069860416345332711835403868298476116559997395850081711369707151087016769352210205207119306587204232943367376612943973885522556573557976798795448483847878609300730594170921845018856616294672752170650749875613401771999207041914676357273072487369912122604321957851850328366064475250473555501861497817846228892630981428024352453509525341771499168825703052936994035249193004718133969293658358477955548441418729299358481051187146133695328375103255617003032549133648324739613350912817202951672035960629467437857895034783268578652695648468049772851048371268571371710174944747089771007951326599571977185536818992501092538130016192595691688560212821744518752775149044137729808714578718821728891394252836114476272385593027217713947689935751224213096850232388887355044336182239209673510124360918794427492709842501901193642964413018899346419597569212619882459708253025895167986898921776318809624757908047351541616537635979411987192357052180741057545474523286703219489442558181392097429272725321723344296968214353129336168551540947872360172324488054726452312277329954745258701008482980205872562874886601633986054729698061958995727041136491083854134975456698587824863774357915870320563386104439619169757774004947293513137570115484537992524054976775958147916672384240363706932507971190885901149565024226836664882553925400415432577255921802822503960734813348624446723667186940497582623354541377084135798028997689173921671637556307023496802420683015459505952557023291016881953450025241190194039097347605093809834451182579729476067653116147891893076896501563815659745545701931892765370873530751133774088803218658236918753605920897832799802629346000755537711655733935247075071309299891485974004737759699085619503402054651496887954393777157718744353085477058515846914858988677376890749563402243352948882704897037289535812374920703566055234002365908807572825594074935358170453507404950430786601077339828001741772715701388696819944246064281597875135795560927360428844682508435674499423211270261087659836015113712490214244874535278179921239117786846524745214093518055485811573243729006472733809020482957747407185981860374708684286717665404920163892211997886941891508113407401561122378383848947830545283520019375170240362580261476918548352375204827546060332812320537368384369528982640547689242779683051606032122941971305898624339279930653319150270488626943146630086882906036938913305489203172190549402764186077691788746463406547058650845093618234570304408010293714213219535645841856212002220491279122623456707919822267373205778074418458267976061672627895374645491069976169809979589349440103658324875263502040561446885715685084316663246874940845565163621245764201813071916375863674116631380809138742411055687043053580097915072331808364438230302858541704366985190788328281686095477247372106110289131615169926634773044198632401845844609052201843461377057755829111540009963815904567488874475681740338761441160651590356825801263089126426348110434911655130477948801617551850940401735494663309897855071592787594192797472071274201046444611408640440198255469724942753747645197415207441629405487586039283351014842032997658344919969847875361248802719615209204137908572720005625473028253292534507900617109339302886404737678812367649587493463409620386788766525441243443799986362150864341695101086395523314350910622578929210926494667836577247786854052224561095458041243543570729768588208531982249642560145100850197699673538324491374450242541091046027877347664044916635890341954130056571906109165828535910311660771647040322593424704180434383930722874810909784652987805377576186746140110566133453382033674431223623092747739626762801126711107898439074620801128156500389898936996902615531151609058915444466355837620116136849729671236565382836790985391828355289305589043017696181139493265426855262772003107393380496127707409944678929356424852897833059161296871451390447310222755068231356889186366469835372570926617460311594138251684705497261398939078673207680734548345027894574941971300910638001809666450203958374908000409224916792685389473093574017125721717855356592625547252288452987636361999067948204782699004847095167966877114318996122727724865218771091724949902821421297230591814912641664070615519836632113388811666884300494853790570587470323050363662041264565613231275086236122271260746561199518073931788593225451290704917920481617412178007269106795348325460845539920221204370405830516943074642362921654055465455434800928688359132339475448945798039732615360945805966700833166246956944923319302325595161448667877444353826406797662051236873687719391027503115161380602709771074129428752412878936468150571495391787113477904397126993393779245665340705023574594518096866873547398021846631398029079316126818030712951745225590953502758227266035049083842517044023925565469150691931514472336278473983933149135274596021969827799475964078993259558154187436736832028197629659375815060480641327952346293832946391116546119290464690718192565154980905423079687235355361273794723342189390564486895833368653165830116560978445940636491307093493704382996066787778813694371282496364727933852217652979786611217060627813202623645589310972893162822106395194215667804608020963575035872246400412133950584855358933001394534546590988260881555615516326633872233229193801821674081770373019020873454877625370262143702522777839078500945310035409751056192714470577586167708182037483154162989501269631312341365910403419220972928202706029721636727127333412883747829822332644925037811467375511290618736599996846385043905631496985453310344382771290838718414306640625' ) ; +test( macro , '94906265' , 5678 , '12032097777224921443610910803648284170512319198440026582654592944907996997711020183354851559738136209876116410482775406152550319519617501575389742141362538671375575270130368782344375460094542930957208982333657039900983512378934606414708547255120509688221248878365002162079958544994081468523927315675060726868126226367119441190130650764598697841259026377226201673036205220245238076301842775410518683141308488299366012792925609747073886802877596666532246689317196865573110094049146280756613633385237048709371024252858686340623252312452593430321228085552943679754605680459379364986804128577790131289118408139954294866373981926459619424848669839958145224015329056251464187884540803724925854941893314508739139448540059027532063346594260009340289063635135268446417517177773306225826478834782126901952841733199463653563757819068049198556549112038207670677005457584687670138285992773936407404706326519609992105860062869525897101616064153489988499260854115519937665672793315389915719723184695407552227493961904033933034506875702096849362495327673029771455889030501830242732676146364350412302869011748293967864940422889128153590781271839942018607109535085227963257602139998078826097049418704998656236212402366601095688523413673512998518901468183798514551196413118699461621524416262734189234150826938615238369409717915433788697444341087319545108423271713647606132458422133503476646278312763913773672381574955638642484777319177742615693192492030931928334799325795983171516582124249978689831869160939605527534908432774284025724078112334305143452973560047389979442428241832752514170684582991619064835042076127845136974614077376818874608487426791468373615242293672741372298898215088365221162041567250511944704729950839359617629579145185451647138688599424451528822613292149181525578785717464355469269950910358964367355548167095991226459148148416836033320461350750016925333661337306860380813570244138594176200254338594713997700943753269483275676699592254818599648860765855658967021173586910470760937291362350281087625944947663940083612371308499706464739236243824369828191050651890831355140821021009799707142643546563126154302728058269983835130462112445179485724829519948644797857100978445782729948146775639685486727347085571030457542493031359599157910012477405633462126888771916787753215333242607039830155744016882502462503818969602202111471162936075917294595421685134910453228619713406894527040532782467138493248067630974131210865224589283318665338359787682806475430520542164582197378961886474218909120025123091615456874986351962126541772414045818060094363742441442667036502961807091952360039303360580900852680604055434020409419268918051690557813552959236488040160958755768871367230392867382735702108578451240872919059355437258914588914059658578625910689412928981898994374868014765744048731178533977420205065542882559318334473630109661521143300821787590642741661630560532599207482636782848372575108230527673435955097474563225203600719908173095140979638933646119901238452049016502626977563080111918315881318986264803301054759949431314581482431408037019249299434256675011740150791380650719740873599060034519923061234283942527829654746500679243122868491752528092330799766780299772695603288900967560796775174207884494845966890228277702276659444815563795433225980503597587408498869891219703208161074827864088098815419234882655313426926283791847398673264577617151571464296912550417563804886979853576821080050211194779490844153380677685847777313137638651644748358202947322079765399238487437874318841114773978903668929164955398911903679705111008999142589544437065672589266355348348971511169575378316208327903577552525930641088538955350354489078111990562226354820551745938135022897672457837517586016736813649699772486263689086502957138019177196070312090344215367177632397930739405411088757771866673597796220471619637645139435250941374184393351858539017096692099099345257001920271362387534252371917508119267325168864330673891152067448719178429752412191066355929358566249659077077560550302293786857736765866388524626228805050725063109877803065961191644600499168820792325163292525536974162404755526606943846795314338495539699560103980570000575730832399241743616051296198894674663823826249501962992317559847798100096759179383956869860153118427566631515292600888345422893802197242997389457528273662177569851158066854725418877583679801690209473560655905719642363040982739123254770408905429249758124187443434793269173022194566001870880813212255626734666407333284872705324976206677741658696075649608364892807470963909485110281558432545948579534204538696827102504407100425376019173981304010256984425288381928914573699655169020850451341503052441205769215186509836760430481696523650279090720163816251521349287308560407457609483984181328774565719714613388489095110023571061353122279353104129328013968956403235071785261847838169630745374996406189906650415573552174116649660276541371408913476854939747876731425608814138059458169543823165972801614100937621904382981944188903180205906327482865751979701901540575440519486923023420935041930682172192953852334672415568738221940582193314983240970450000477463045431237229063460109818726294597730994303217381825651493935869034862652936559019431947352777726119926158367810617503147922958376143964979603245915631333786351234314954623412494887023938633377421208202061177648550247361016141144451615061150414512561947705053352442969412639758719469809823355676287459924284669684459858991524522914802929760964195910108664304507593383032621305399692953057899447189106733091012594841503936991785388985322660311685783354745007380474195833316048135155967714601451196311606046191001166178941116722830537202351353675803239601270737264305300314769429948779160815303098446558150519469320909471850141905795161388126098051093418801571231958217059570635407936987518675272606139316846781769414872368547904423404977322742616034539497477291204678516696339549373290014129953927115273383862176648175885100832898131993707682449845814289537783195056908822732162500604957529260337740262458814285530991622691309191620743536827546586516016261289544348330822509040619411107336690611176859744962777081961711988981244490119102057017123472693131597991997040909096393811129374410032160780720267920557429521283544362429347063129854641992658572996108093014481102752542992814642875292835964120599399273647779564854999067324549593959628020136971251523507807754590744694873740047390084491259174712701241947149566007259569113369875274948363558659130833317516389511341744440804095510223434955552652210614743910169826529392899468656662706962138458679700014949089569408033941330187462290588839847072683578505493439388126630655399425769894783841874574481277512426591408213810373551314332889400820073202400253692361444659207630759168415095760789533492551330583140574981012731074049549919118053417150217808638350432013305694321389747006470410615077305764765120127628910927114025496289209479659319746699938956841225054827585736797719039052465086433182830701745898467197621237268086386733129150280583409523728139312677689819712362202660229834226632997964115903142152545104059172086002463963414350578947905947216633376664142189791562053019113774134585010114509991806040543148515641482014416718677876276580431730562587541020555292496453826361453188845475398099905277525052773545411713921648813979140016300112385588170999474985918656553076765214200080620922916851475745553785133089372514034029601819219527045772849932738904614873836099307092123571006738447715320002736785859704861742282537734067792187177608073549859135742645615364728840961736910729008697313304738536298720611573424123582407824500642154138363464791319257510414579292323013964798548950290960997144513319241370751263381191179501838180558724038708020579905145157293231789686223459443044018289699299028761818401590134930047434655260646434988879638156693278024323812521554624956388982330136290167049424094118582772096018451809597401164846924711716262902829627380939680535156293471439360777268668365604921618839689307971611636791474486517596411076810461187507596434260046979222951771970881882637300844957670414379573068900594030059669462435172746064402491699639256585470646371028345111692685583568972301562562922256758180181085480072911408202795425250027969499463641174613001079713276428421215191667447359883645715478755796737199406110184987838747951054762875131236948669154666701738693610353768722184367702584486223362096024384484603104446694719810676365358898796150078397378880308527506601302713337537470154717940902510142689198467640659012705019749229659196945434251394512811731664749976526521575163913656404283679160697284832403491752877439284481271499113105959231314317691378767826586965558827309006336474296703042302766970494721137069514776117071812137188441976088074396467632977148030639633204112209971813503021630520258087179296520213138286076436343573116739144719310772751735156402034501606390456169140121695688607125183103173251813914671347610021351582630598950972263101156473693547645926791369585126525848123770842541512577658666859445930626122772214914414428878443618845511938720224570647898061530301191130932770667765716795587750061205748309356694807519519675049350933068580375053894078242210199468520630330003161545121375796842051755736417199147757963284334866394276249640731433231049313954526161951624809572619652276996303120934045809848958441871638077879356764855185283339151315501229746330405881302263457753882789573262935098772141915955008754732738429440981828735729272802882701434622480077709131642461504208927055033641377102447767720176633847373823944955329314383832782143590012811927685177026789234911929577093962457115800486427160323294733691288587100842884523422947373759687195747031917611825381748929965338560830322621555697476051991779833983757024224308964473525520615691348057039080995096707558993173247103410555911126189269896588730810492029064501420933855518163570985872578414596537490581577386809453787410688705142748561393081836124251051324584698861388478139283569598076892767321443716553246412277259380509438802329441648705346383613734547877712888220362688053129344779935227318331396329401655637306388721745349393876059195313192731747216875912473534083064724394534423226971274516443125664390773514132844684527673669092932331255685956744208760893026251638308006285281531125557486527757107669977234989257848144696133615593927212707645061711788280447683309281341206400131653863420785992756287508115967050826182726890127091142835164557166691300678394990747493429085386293564966123136506231068567056989317384966475475729360339009395818317246772969137113875763412531168727939516546447462848160915288609593976373135718583011204195966912413852164206268427095555948610761307815791560355585910426147327321102341134387395444132445427019438961472388259276810758042673037214059651545259592406090068506838010231567454628094637254355973489738412673187077409391969169545123360596500128359039361514821593508030148522205228449973734972174002553108195263247639174438853119252163722614381071194775578403064409455019374052283926424489955638366392986417357495741112108742236903909428659619606212619900649574073585165166583918297998340673134762427650800452972036533098907970092878703482852833490281729498858731156264911226877099786698157523214591321994816532369903053664184550576973511700913443461257437675437472098084407017674888009625137498476466436818879720524380130001916537522732804698998210196055682123318139008022653778279715652658727340997456249218032227963658719808122825441145385176983894549215846317551213773007016356738334267963377888011544300061222386574258747191915588698617637837212717814756142051324008302080298650994166585880612515919258375738246207644772437177730335392539644865639849308897774064728887770437363216880581815066468852825832858170229658070845319130874032026316629150366399827042959910139581792401984719737440786491444999030986092724355755641888514009652129027999591099530921894279904701093752999885648973445224343373762636465568559928662660225367743242647517117639887521310379396989258168883666755250191993348321142152864927369234668649063028652063843003316973499048911633219208658516326528768740257621395512872408369502229664467552427061041482906643131699241509502631730714053932028098939427452444970068248194791910834306048571684029297039763506306003677920029786132935369270257069918171451215129218456327859444234926254208150987962386182798994154872735035689186439260489113584084457851762452138367055101379588122088844841306204874692945577566193189114109700874804492781437652540985226374341144719703543609354328682925954034266359991157018716516446223344660092640717378693207071014181491854379467954573981289282127187230877577110472130570576015105977305257910229508244095738723967730842098391729083715169089672956523592451123266861612656114937473953741130882127624277059388150081629717639957137442000516378123556553332349275408205751508548209994904127879234614825403357223962515911129518982040378620086754855361296612014949915205044289352069213501405997863521354165348782511867122622716426639791821261702368775506733831743186020155130943146663966007407244597917005719991265853620211871215693990090865326620251912533146988791177682866417571901522812420520954626741756852429297080414669100168753560040054760117697607946028484195290870973497362267381612404260749108299672450420697873731172732775674054385367218094949835013674973757423265370251319346466334678075474375906897432558238767579231146265140826352088422254545690686302743333477665277149035167938674924154842983621768748297426546172809743534122395481353193555875026625899972752500022321576082052828487883396792123138094495203111492864041134795761256726095663499686254762052539889279642048007404275482585612511343844033096850528226343612783861307535354140366802884442274775822100977205037665851810599890007341178775130240696632601594694061697231625625860004620538862779963203630814410243245714819549757828073441407122131050844039240224163642095196215306864657309686247074858678000635402415836405930550459058799511632845758556493533762990549187485016639012256731683580040073341731704082434264243561194791703596206015014846543656970640029940075455836423615054869940691591288967540111562931377745992026685841553681405592390900507543705586848434089001303884903488059141717942395691356277350339460187131843419289217935265295704356916529054605633813938893737767409366779159372882254232836716324580262988115146013874569597106960026911351914668502679283163961953086528727793944040518851106607715147835491925402383222147418855338357535739845538867786357060338435261036202368258020761466669889670691822601560184917436779215254347489960930087319530836518444337988344598187203191595434829132950413104197804486083026745302512606864460474736420264409880729091060010368627194325379608471121667642965001108323387523924855835054547593985702842329940726838791815501738849577938132081507924442944174718597397264098866829822238109143654804816673202408821440775080110551433710513005759571403757096182158076893681914376156120366821040079723970732533775297717113208811739667056486197044324270922989003211680035846379754027311741122863788335461268176688251174205660568758427931660106752538935307255339039355388757057375250425837093302168454705863145996845095042151313295262463259661279787231685169235050323016586688299833499115629856113737828434665438782484735547300584910063985708776012855041724554864958256185127598519785482694466456563490174364083687348114832431925384869094951858531131186801480404938023454443571034693096579794784282688250620550447004592047288521549204059159028509660096017875307950532319742036173203952041761503785819360687983493313089577551873561446412395575710594370027055187478904534143877344909963663735297933632031693194441131986356078620539658905801102236737444661108267332204176723242428802368200731035237320543765666828751910067807455585241166705139054718355894926417783921107593070742530185305927934025258466866218767376534792597033669822057078961298957496217109258353525748391156704355202862658731864850654926248935721796777991022299873209352867958121188810265931762818554937603100731645526362256769968645627563740131303913187747664074382451124596816950157537126085105444310397381169417181279755364952019062060800318321532221104576465370046063753472086774044100444414676557036622159972786835290325849755928597463426695781953163866965969052547199558811862459755929880206105062693162596966564969090523328485578382332426358809045831759393541573654498007053609291367872036111445231279494806931031841205524707641695256162632063010224942774570614275679640385413454072868377460757627086865145342680411059337436108163325287906190993195903620201661214403352143421814822960031390185721117950110818389291340253326486009897862116192130278391424657241044004963932456332370837203044676250871218583290978562214724386902489542748628396358186325956900204476723680860137151218998668021260767109942583224787827906233417831491624545860788315526165511635197037561922517899904690761031753872124042336536173826882605457634858121101471892751287742889625763093890478605491801544520792057578574375773201143929421480324074646141024278246772158921139478563054405229834847395540267665801516476465649906633858677249697918200443907759577085140538201853478765762117960994914145101764724959407470640463811314680073362866017160216055901670762363844476940433763519832222385027792750981080965530232813715566803117769888159323419674153708883977329384943689553768541789213946129813719122880362388613061590039120847635432704222352763497996891937276538781966653887199495265671013361386797466770701748928272976698049303363099194915667274909798041151694131302731875286034428026186929184304362229619692102502128326871687296959400302085212456821262169947535776150082836000223031048009020371350036539197512764290221947644788009144903781547616778821484803103102745494206849074992779830389209747508799417151536020207175883478394172905960788120783232579015657004053498129914455441618389610549539868266323811924818208880604509127630703993255747870363319837810567597787888248562918900718803552796004261069194657586185596777323973185892714770276436504734272537002948160990428552665125608477771575963058090305035115286941440877623389294911460277602637191173693793231079024899815378902648788493885795214168271309254640593363869703425269994239287771226535309826739493886296423210090644214129966601915093662511467744154185692679773644695709701672608468044373005103438648018171096398607426443413194281519283533259981445906676653664312034448007510997631193422830884833006737772887744686368777653538919592111949951373489944710830951650076413715452663964540719349734000663229824949598114271366375624217568372270930581796391817021771734034804435202600593398262992169912934443430494160632096045871344133239156139910775140126053555363620216919941247411877562901224722321989970134286623258958498605964077449818088184783496838986907729353462388738014823594316384752835667377359432034427008829688816033072344951707746090028382556104976370057205866084666487901937011251702362871920843956238611037186048336332441746362113871081603050950760137657339038936536596933851722041992305843336304901453452571715630307405640050171237176240125222557358332930710738041186084749584740450846611590610786726669986270473854160586469256252168384869883596851589288004569216909578136486049118663430702671507574735910444281915534186018197115110593685299825714958042538520471370923783862810373944427764167480823665142849781516572576659578160735209456505359366276175015044857079506949581097412535399513752605101582122333384186945231604776461746644687207899376798357792653596666581824693709787573041587757626825069517113369429081460885782112243077774167939979145984687560083045973141222583991194116736510260934423567193666909628226271067954142670416399861275578343838128155755377702692215310376282921807545085658277051619371602033888713006177339575658405744622442355225853961935039933219714558173292667708157166916833886949301548495619142336871670282820976529735014754467417983365683174117809170080328865238203402509223643245295215135732316886815093541440338066497831425192534469707791058531207292816542931530093442001376701232809955022738734490848042941077563991314157582176472360317911138496886256725677367798535879492979280051355429572780533908274951671490815885229571886451377910940010012673321183872398403321907312091527491690998932778856646700965310668633894463320063118790564548548680468929222591042338228420943806756554406415931090291538143528789629740994863591079711320495984207677768776056308656173482219428268311986921414524482951641166995052008686213317172019535225407298322183791610925122947801778616107589077345869377990653281139028741071735597803862826823503904687705298499157856081719712796392689492483355489380957823523151647371561894369978535447318492691386953116508279327857453984504066238005909847859372464174431153967057270158951933229971026010966691002647873844722520078261307977064543610448466409873414879293871473093770897730342188974916791516079659719631290440856802730239894028254762897599982086201797037774350455318445666421091272654386376102853322186923651805632319156209526417184248540024807358600433160247811092932618503532768368430167126161193398063991915395134237015963224689432846551459273641605647876407353197376326052974132020864262566344092487103313843164740701039613572905063871725731123431656363638983017301386812075627738970033704925617216698715754404765227506689591570815979652750336513064156973513088297698696477005797931273090405805324066030602361512119840369813400472419573729403873434074573160162870936318068249575178675647763166913751293933551646401329625534493843177325624465230372869642679078724392280172358972274796335813356986697385312329187363931167837979111403879151351225430729247112426650129104919284568825235232455725351552224363906641354967564821570365975247995194169878249598512813403591842113734352236034910030599591245451967209058347539059536190947433656585914973072966125316763518711707788780035041883398613275851057398845335005672095171230325334135754312046899114278318582949758025840627034073495122556098906615537245941205241050630832317495323472933706045476448135324622130249061967088040634256046633681463998139104615271598326353633335243659421316638748257095222430616324419633409773550120132726761874278343852462953247386966597193056825342009690607297567265709899931944826256174731047305094081727770841080440016328196894856028563604702780682709363667848710891858610272205043503944199299286748350079640312927864906304355154798671043210363438224540663084637003896566824195029371811104076856777325671062014465716574261539700730333018675634121018453203461781631294981764229198232448947654253783388204297001920517253136683270888989223979423417588630101697507592396076446071605672776440131159545850932553540460963555258875042206253533925856199633623872569538946264824099914287390183680108014685374620969458668067114850551017647802720372476318759518097294889667098388787511578895623400536394696909686982089754739465395458755824025627145860540874654096413723593095786861445483207390022439985873830588574664429664328016256793764664176593210650680088966473569586028063185778696846067901539484777171526008932126642124726149000234264622535507932061596730778639639322994194566230181315095849815600439054976860942354245780811250583700351160679186551987899007553450837968473873566770319473147476749953987063615776202643846558316122703715582310812032981020745887175302830579849877162396208954934582206235358053066687144876586531305671914153856979556448429896161954702428046020131267519937687942784998876608574424998618033186526320893410380410615897192637383212667814571224040666584728535219469735065470507466917541842491727590582415179332124764074275007615003561577219703985592626963898540408123901920954693863945334300894449076898006775718907497203849104045111950488579240549422430862215686448461635287540273933678378844195074450255145986318612166430395304017670650737974685138684856887920372725287537626880802277074988514877737086561392592097851272353742818024979368746610359299993821608029744496422263548547379227059308330732006560207940874965636535953389748254985558222428424330864460444917636632197361629108476540664208138353154832367022269303011778867713003519669926347227092605460218997631456886988546452742315709205780440409392361149984816382171251958377059474144369328217951856030362908523108523320063836177218545129144151675726728971709295080995491115727738994384523099426017049570788092605348295244510790430809310252002021162900702972004743370313805442485273713185126694838015211112954180162169003605131100343992572258878781008043930175009769360708537294998309182845117912092938413455780854377238800073118887421690605050678371370274063825715320860910620948562818451293617405229491236178678754278932510338478945063584831864172120232848867941761893175916936978589066485863729545344061035238414543782144041420795359232419130120814019590644487393845413057769719569362935783498618412118335138847775489214231071866809710199171908881608454495198717226829803613782208248938966092151102736556383497239013516522084118430594971074187519260946766667423607181318562263393260060663288717977893874080349690289502370587468658530985736835159292642558195601284611160860487456916132188445668274130918453531643472494048279511660213922482152284451162576937159479526872950903047337162660821805029600708501290793495192214286757581386114297917781127145691164585515718567911708522043336429297534300930577150477197470794166974719236537212770910044441149771285775283181049923538686195299106209763353070616873255072368061193988813137514561690385137083968163734396360347928328336563595006220960934830733065521338335841965986235454589498682179372157178621143188814181528148836823240009313917239615618819685916460559824760451892578522401207920356914008125649666362232615846019270768411703026907820785686893329687936007326486259085396965025670221843906365927274024874373060432645146595290306316201392153119798490572148328091329727540219633346941261473165756079426541378711351627269272757052944951094355168530350261245111562524094741072397641389854917843735109228705666266863564318304340300463039112532153772402056001825404569674075795960482695655750098767071905821033260887679978762025881061325337213163524622779581816972175555663637210876981896507755878807206231301747997616278339215979267473884231317543544712452852114555647618822488813490625396727766305946129050714786088423305048954173700588940427019522843104010086905515156909811517470970474323555351456229248573825599238197370105299573364893745750391351067788061060527046812509973058875643642096985994846004078611902478115985749938866763374390207356150215198771166488048581440471218124332859752158358015616660187047654002371295814353685889164385419937001586245963586686123227189249339843703303467679680488282425879611225214199203660669304537817806007418484543257294498646404096533225791315505537497715207372656046521498454410484618808462877318221533855177115026118801994635309492636704866960405453702180044263190730170186585393782170839546858732775601817761449580514710578003629573446698223526303276734226490467503004836350690787693180419256606367206975754427565647193757103622172723445912571921412299915576801160624014585320520435926902108223783097157413714400856842549485204781754909051139596113033072378955171738006815746107126582544226522618574999884662865437801703547910979352686377121384449362061338382596983291230994834971550479538621580428614474707245992895951108596353356806792208588625391355419712148342585326639448556448414437163323753111363340625419447936908942309059384977968558654468049438582343818038934475031358918368904553362235318960285027300982643072000467590624020979094167872273398935195854660177797067882015023199367866518380157778613872943331744050423399154264127572590316747837829937185838805929919930426357165171535205844319577554107598132285773629025750828527147869294916738495703358765482635112741426231530287972819515170191843245039795145568805407271280931405842189126545621691903281208244330021380936941534090926737001841378878232358824105952882091391122376983197385863111377095821200758977598655636124137542127167825095347247242493240787156813316762909697688864136617808861689815132468231141188094757116163402600963896457848764885057333264284354504937279338775019887183472529765242120841857211466394385600886129299536196104160966949461244421470876475635289658360673044133988472412908346503168644044604661248748712465204802503052422913247662994388842262879693084905772957000634196203224713014001316324485989167462563998596759472917793384738934828062167583801086989253946454905163667273365009826486005589759567623881215672865627059042146648672881327891063995694457750315379828488812880269962995872715826927673202525599988948924553574496455072613992039779209442466653855719582532255207207153068979266405561447716075597208003386115629512060258961979286373743813337931101772517953360698302031325001844985453129783938956301615754527286888929780663765211591009120443813269934515079913668898214910192754399304618341831453870034267125170721505066917586198732535221716916597559836503614379370118425547846931569036557590812044714028782560536961879256523449737057538949699208081652250218260123107062251099566298529927581162698576168546631586946049600127140987141317674460410902993224596022062324828491276267223741714140055313279819368014780323282408383224067009467800172584303162404423355760504326823431706740776861818994506012773534445613456631600402675225760377368762722021968052635826828120651984513278838416227839164392949867613026178865022522692004106553797610247860158988661216559547229327484286711157186964559739720520556436315158359781162799170405180320792416230576841207330921642427914971360147358390054635718803605053812837473635557695381145693736966197784412835427730682455377495472116907945998421668486206685639652442308850167256008495070585127947385980542764963491704371533238862062927529061728993687103715584617381449133650067934551429741997596233806357685350458313224546984096007149813473419575258362349731564468684291660239721484472043256211659727453894937763642732739820546069887466309796309447539968295322423746786761899588378272444571292371367413474447197434276820309108466176334054973272331173340111659361442337130792855312977415847609894557657244236135360575415882254468739766648258409923847596862145560111671406474246039147740994441351609557249626167418534932138685355488646277447161488690787234126802880936621565723899904615884548341472638437772090419017559362342062609301959534466652230774497315103874040974426330140216732414915907495369817982025864413682320190304402284550455106186758899229547597245258424329265319033989076324859178607488037746916527718266949417024120162124868059437809624404252426704159384001199136240834740094617360560669898139739645400311944527017550131601104533280441817207649685008412565052535179862086175827433761623348775986952355976268937519226183084278136545349291670649785347842730455081487877293986813649230888836033911523597766312541091611558308804656825040751880201229000742627616764846092999606733478252567564690692669504889322114105282631889525319858323705525911497612288157996632667685670674150846432327565528609123127086077539690737908771138085892200113245294049889922704737554162844306763132343665963132039823822365456559043777707552305193196770793605848172893387453594424454474013959098664586068848120392276052089591591308873830873345317112789906683626082510250289631190568481346881428473945619394593511266715086704096809000035241384030443602237087033327542922826698398494829325813183260408718893212433059617843940587229933901382943262992336198408409788514398330434599960440396485182583066248982823883042200111255085981898391448344844015751684471609252769042652840411485899734910885714254073490007645062005967803838338350515620582705664016191350475064132715818275524670604480386741711701135361668073237815153729800159901327889495086187129604447582390156419305608703427826439346018905984357281977986898496611416847526529975227719636005017771483921982957544197799709954130121091633016282666472057665994141283170246327843904936295814914169455433298130711317392343344536477614717883848576748172715876667106217813834587606343570080150703180822107697621328830605698506305609033356175547929890746964404950767451267747106159270327510593755358827880906472517244109777980040119286343261893970180775124057054774158177970221802579963540456256569061867723885060688202164035260408533918104432069412762092767961756595762676589021880178838196631141734156532209197898820016385683655803586282227835323540770476387548613240989563105953577728703740467085125879358539676422989918253524305042736487362952197862376130430552678640237349729018968430033265542780883750558736743752261945449029876696946612108224851115124942879425375009248761228804637428658896795153370852897642290653016040206069997053451309942591115365763315347798585143808043185383293137605133990375187081546565293976821820681678976667143825155588879797300722377840466564345393925544396615896674799718417150813477090500003898193451616746130407776930778672242012416461426697352259907686766455115834355953750908750468801886412209297018951915865714966322975970231743912119114106738120788423635459798468818392838721078133776550259766032933645790131678864392198922153478445210797007411829472852520896641724546528677899228076406095090087054355112053831012039363483887827931984497205305580640089884147850679614566821898948479674022244113913369887487652583123461801329225543373875617324208320681859309093341218594477765154347005165214923914454731564386152568222327274320958552990828960284112884233856381741112323189817039205176818285148223632011326114683897977754234839539859773555387479931478369465852786548627650813853724070487089026934104735632316188699054916850121902617757361251685208213541489423125264663780298582285404482769756412105522055863664088568917771323306300523891885066913901475208601262155693104850152972747067125562727745608865730314711297367302397805250438620696620826528991710532990343302838492054402628712678922427512444061374297112648006020563822297430010181285771385041656979587178970340526369080649857004814587864116807509544571472638333034374444934753562266027341209926917981677891921750897515727238195821470408569780330165534206129720507627843830335242167825939925171230104851587860224644439220292020253252521515829520218725721656441148152957244204914499245531265109309283531415930597420172103218491273772895034798650668137487351895169131869380823743909292549280691725771478618398588851733810124489829934377473370053370068252656647212635214606968547927504809038433155753162266329616429449015410862283066225309223030055256064379392216273751092054318524673355685810347451754467300668773538268859656515445954574923648729683873935557286856820970937068655945793715092808131171747403868732588043215625794798713241960194139927877235454587568468762746272019100094498768878435303678674043109734750924359994293734355746752800574597686230559451123952878914382180299790800323290843096781932073569058248305026863533285657386011004060766594502913168774569065159241049643726694858160418911013311490706738036543681700409684130695301318926665944626256463817919659855204483526903636334206401621354856147973558569067520506511253677092000344997303422716188357301982404683865947269583956684546963367459758762687671678204149310431797725100520798570137927948407559741374061481883367972415208467850517662863773339874292705113236025748070303373436449698506471836270575534367072477137900735911028494106738086952233620846769094804738713039865343227698048631407498839757989365214479653306186066720098433994778082034252601056288009952122283076954922176813820889628483465616421754123937579558193754200095019239139515555511223697405926455097278440331386885178334434554052038015454864241788988257555470096002158416471742411410132996885100140752406174456919083750028326577637466209951318990330737079201943113542966688636484421817970036239203330453206764934536684736355707322326827785876446310370573555594566522654459815454790470955048621062330510444683333038786245129101219361371510125280334401845995354716355081414363331143924307309675133524204853828824109943599655989890178320729881597902725812942771540675060969003063075143063594335159290803487756279512698080233303983448523903763359578020680403822826869215712204567152735947916516836123801571638451477512947633273928861312235512576987086278058220742708761872709578297417052880180662367826500231390634119435668470543727684869857682890608140863953707420877680764412659167163724061796739633033065005264111522515204885857558654834258914573545195512032180353594911695051378068719810556006895666360047309899697571949998411847437091347874733077520204574436565617262186793285390157914385444947163193179238783098002974102908514885479387830864484899289781518304707739376905740671105223300022583960963928395194012317124630264096534995267171526593770055565730102494501137676561913334587750246583294305250495353130891578871532092316372373133107902309220102841925745042896381868642367418745319420730865142002648204585089869986704818966935411839771621427485830775501646076259582071540977268704166605867826554568530493151242347823449624187048865683437944276656029782106486814685177512298790716326796679143241180948696299889708040355541198052387600659238816546438629657921933326303838039366429868607257229153586409564863587715116286506248407497620036497639682708720641591753907274496783732165772299744820271810956549362372807148941506408038206953482379076431012118157117732910126914164048218394564547100247423760878689918169039921521753045153136140852307023421248049548015885572583792382485175500534204824970481492908940320310430809050323007986533558215703588782544545718278427626486375885747827314014521764649075125614840753558736191501676141412501389041086207604364613946110943290698832808350946105405659106878177534966935163165977743784854970520032448041881269436554799191892238890741452952579974686319705933896006655839221952956620159751151666300129475309250350785976428156893784305478622359782685533113861735520731866174351824115841845075091997649633694047866430158123243404433057388021248152371142388316099631832447205081549938790835458611253943435564824171299287489119366707640567857774181325253233507979780771975461697394241257405396956542526065849971304547348847901021479486605612704247767646084737041513530671846138948561060030258907065141688239455904675293200356117950112887673328192319125625450112001441334554826262046043961154178777018566846299911001936816697919963389400196333444219082726126561961439286151423991499109774369393437975616583894807974648514443152564762608988320176773626728380768044611965217042661464062080139705149376171806476488738827250154569276638342192678366431133871111025133072862691969096467500425521305379670524615424717077214067299329167718710591789934002289122069747920433953864968281665817890773234078288875249889546074590578021210045020175846649075388442769801561868206680361142266963414252212701874669272948450859264833052568909056061160609027359184255550131690394077096720368166451553160609833896170781715866268750533758548369182807948608780968625107433984390434235219689740367237885674707704507030700597244015754049856015155058928190915694812731538478889554953381956036083413176999479211030070256296238738351346477023693051810382793957412886791553484931648794808844286324406999962815018551120571300130535112365975815392599766465092145349546061127412046819415225926986188716476056849908748119793304841105307635909081982031362197358414422316767268043098239315181137479061734502360873745508395271506258881998152137286301123636845012754834291165393438286951173209240049799587871290266306404165115829161019204881466233120224197635902895287152465704419993236013589982120474846271345840260611228369146254161192044127219280174741005492699430065610779347520954299270720650387651378861176589218001361087617775409717699262796015976536682841105021059664122075404910323076215802321801490368864524554178452977152697573396110449811096336643650973261681886798344414251669250224998533937199407689970648423521941761037033886551068960149333137371722361296472034150664556620292222683537040127141078291436736093570890846188142373958232245787503986561211010450137490946828402032613144801907279288018920751978234534610262408946310152037618441950323372778709960576820747366052518528388812006417666180087401861373515895458278191176440767682077611697073274163810947190349871592916000621071323440142391532644306688082924938683364588261228996162358510568247905595841766424855277606907075534470052532713604689867684196360667936729004058748210752703690582852587524292351670119901397237694282959815729865739583855822949365306356393915948828577313698981442774794707665584106781286664956274007171084307394120846271084144220384654297665542790977252203936545409559594221915876466565983276517927312109637452041938454476903708734290815286507123649654266467749616718795331528641404301235882753816634993816753568289004479992478192683752604759132474627756612961000581745982917363087175573302426078515416609069164426643196313914584560126544290921166479054390986891864459370224685320335100411031886752698293827320896578394742343752392404174187327761664303245103880308371741165000643275630023932633142124856864613839455387524460883835247056445230671943050578332861499695214574918673021229404253734683027773313743176432192583951191913236970762565695716840327124880325930914779807518816007401993774234221794461913879164577142778140583620285187482254501254780617476909707221619667136778860802714594724530597985286751745300483760149830490374318122069442090705009423973432872916069092401278307983254836657225071642951238528724138838574504391218505180992122754344306417613772561319645961095192874830637228486233492444491904268558980004614112652158744705099772253265288419466337449702012118823493884966713120693120582224051534971354793790579910847464242156789336422637453846505595136532644728156836277997378127893681071581923934505832928373516022575817127739736575756865378797460471263725175192803271851926819917519383686188517784400435220379006466153404705216541111363986878921739723739896607992639335605097808466640645060973299641467192720137922397898565627219164711374815726090587366358047829903172491757500331384309027495081387152401636448384580814486186637697087649689231216276249532384975371921757162088038760829349873080877249706384919119527981958190516873110807572517264983816623232205603988358157912992461349984204628724405823867426023186896007333398519510459422904668181847357590156918607616331138009353807527538592211061653529680787460840337585919547522274221559932006125164812648451392909851693330515235916955355721591013597659403166816081731576169618811781971177795842089107519036325768932298882133054753656397633873210525368153651341260914098941072219830872711334487119709246568789747359480982755252152430402157014447380207090760786408265205545137559732000800203136750199256298419497315924197202893994081817702434459238430923245234575791683932861682945847124118958937423672717813748011917449413425060927640713687024598045661303952113384013415037432914883493033636158000130588759332472546201048166403710080511673970680927719260588960348045228317232803681187031272506450618629138861001275954148566415095600081015308217088430975829661490651423859763132193660525117633388134158638217519049714767119063945723171578151019595179218912729338551682001453030819043454878245408263437500120254435442376334044602833812761305154890870916870343146715245652773283431041407392860250480796803485192806596809855333297772986668103799435700742354867077311314589712272131788641879710793233868427693207194387420730083062528118643285570520825547326752348837863723225294085957046976403282869202911899456522208121620826458236485403829445741128331629382084816009173825727982745362705478457038425615653445181021898078023754297882055318390558568805474809499629743584484479518248026939110990875290364212204536332706626128176468053408407649243109388979549094928082647431373786179467142988191638288941225785348943868854632528599402913545489154484053068978162863823000366160237819716753451310493666848144862930450839567184713588568720601921059768004898348890777169855867038685678689630104228620027696190848737373593115559489316471614742241241080915717759369507297908390256697208628722732076075083433157804018595982216321305273881207658074452046050754827966442452381402017094824435270368061319011125926752655181876954087858148018718169579570729272694811666295639408633390466351259744410532863779156045567748268573798664900319980347698852661715714418485150351971611338457054814071731561010311297700803013892035659824806376504489316277200564467982215399291293815609566984236664361860965342421210479582059584960463891055303905596666930735260688627851937917438369125360883055927544388560027145080571797004532153325269863702949511264830010485917986200317248423836494080716911582330878681178100817517430784215819553290074107638543118831542337780918612111718398640817469867853658537784796684100354795672647383581298428564496194855634992668338556800017467144246309114053233502145105635100954667476387259109043659409570451628107003693334435646437801867855817503020706261095751735198245598952555068326031742238547524726553387803327296382780133921837788043654626876383362945442953469045674139219118842149941525260493144551517231835450076117034756695289843264617957174777984619140625' ) ; +test( macro , '-94906265' , 5678 , '12032097777224921443610910803648284170512319198440026582654592944907996997711020183354851559738136209876116410482775406152550319519617501575389742141362538671375575270130368782344375460094542930957208982333657039900983512378934606414708547255120509688221248878365002162079958544994081468523927315675060726868126226367119441190130650764598697841259026377226201673036205220245238076301842775410518683141308488299366012792925609747073886802877596666532246689317196865573110094049146280756613633385237048709371024252858686340623252312452593430321228085552943679754605680459379364986804128577790131289118408139954294866373981926459619424848669839958145224015329056251464187884540803724925854941893314508739139448540059027532063346594260009340289063635135268446417517177773306225826478834782126901952841733199463653563757819068049198556549112038207670677005457584687670138285992773936407404706326519609992105860062869525897101616064153489988499260854115519937665672793315389915719723184695407552227493961904033933034506875702096849362495327673029771455889030501830242732676146364350412302869011748293967864940422889128153590781271839942018607109535085227963257602139998078826097049418704998656236212402366601095688523413673512998518901468183798514551196413118699461621524416262734189234150826938615238369409717915433788697444341087319545108423271713647606132458422133503476646278312763913773672381574955638642484777319177742615693192492030931928334799325795983171516582124249978689831869160939605527534908432774284025724078112334305143452973560047389979442428241832752514170684582991619064835042076127845136974614077376818874608487426791468373615242293672741372298898215088365221162041567250511944704729950839359617629579145185451647138688599424451528822613292149181525578785717464355469269950910358964367355548167095991226459148148416836033320461350750016925333661337306860380813570244138594176200254338594713997700943753269483275676699592254818599648860765855658967021173586910470760937291362350281087625944947663940083612371308499706464739236243824369828191050651890831355140821021009799707142643546563126154302728058269983835130462112445179485724829519948644797857100978445782729948146775639685486727347085571030457542493031359599157910012477405633462126888771916787753215333242607039830155744016882502462503818969602202111471162936075917294595421685134910453228619713406894527040532782467138493248067630974131210865224589283318665338359787682806475430520542164582197378961886474218909120025123091615456874986351962126541772414045818060094363742441442667036502961807091952360039303360580900852680604055434020409419268918051690557813552959236488040160958755768871367230392867382735702108578451240872919059355437258914588914059658578625910689412928981898994374868014765744048731178533977420205065542882559318334473630109661521143300821787590642741661630560532599207482636782848372575108230527673435955097474563225203600719908173095140979638933646119901238452049016502626977563080111918315881318986264803301054759949431314581482431408037019249299434256675011740150791380650719740873599060034519923061234283942527829654746500679243122868491752528092330799766780299772695603288900967560796775174207884494845966890228277702276659444815563795433225980503597587408498869891219703208161074827864088098815419234882655313426926283791847398673264577617151571464296912550417563804886979853576821080050211194779490844153380677685847777313137638651644748358202947322079765399238487437874318841114773978903668929164955398911903679705111008999142589544437065672589266355348348971511169575378316208327903577552525930641088538955350354489078111990562226354820551745938135022897672457837517586016736813649699772486263689086502957138019177196070312090344215367177632397930739405411088757771866673597796220471619637645139435250941374184393351858539017096692099099345257001920271362387534252371917508119267325168864330673891152067448719178429752412191066355929358566249659077077560550302293786857736765866388524626228805050725063109877803065961191644600499168820792325163292525536974162404755526606943846795314338495539699560103980570000575730832399241743616051296198894674663823826249501962992317559847798100096759179383956869860153118427566631515292600888345422893802197242997389457528273662177569851158066854725418877583679801690209473560655905719642363040982739123254770408905429249758124187443434793269173022194566001870880813212255626734666407333284872705324976206677741658696075649608364892807470963909485110281558432545948579534204538696827102504407100425376019173981304010256984425288381928914573699655169020850451341503052441205769215186509836760430481696523650279090720163816251521349287308560407457609483984181328774565719714613388489095110023571061353122279353104129328013968956403235071785261847838169630745374996406189906650415573552174116649660276541371408913476854939747876731425608814138059458169543823165972801614100937621904382981944188903180205906327482865751979701901540575440519486923023420935041930682172192953852334672415568738221940582193314983240970450000477463045431237229063460109818726294597730994303217381825651493935869034862652936559019431947352777726119926158367810617503147922958376143964979603245915631333786351234314954623412494887023938633377421208202061177648550247361016141144451615061150414512561947705053352442969412639758719469809823355676287459924284669684459858991524522914802929760964195910108664304507593383032621305399692953057899447189106733091012594841503936991785388985322660311685783354745007380474195833316048135155967714601451196311606046191001166178941116722830537202351353675803239601270737264305300314769429948779160815303098446558150519469320909471850141905795161388126098051093418801571231958217059570635407936987518675272606139316846781769414872368547904423404977322742616034539497477291204678516696339549373290014129953927115273383862176648175885100832898131993707682449845814289537783195056908822732162500604957529260337740262458814285530991622691309191620743536827546586516016261289544348330822509040619411107336690611176859744962777081961711988981244490119102057017123472693131597991997040909096393811129374410032160780720267920557429521283544362429347063129854641992658572996108093014481102752542992814642875292835964120599399273647779564854999067324549593959628020136971251523507807754590744694873740047390084491259174712701241947149566007259569113369875274948363558659130833317516389511341744440804095510223434955552652210614743910169826529392899468656662706962138458679700014949089569408033941330187462290588839847072683578505493439388126630655399425769894783841874574481277512426591408213810373551314332889400820073202400253692361444659207630759168415095760789533492551330583140574981012731074049549919118053417150217808638350432013305694321389747006470410615077305764765120127628910927114025496289209479659319746699938956841225054827585736797719039052465086433182830701745898467197621237268086386733129150280583409523728139312677689819712362202660229834226632997964115903142152545104059172086002463963414350578947905947216633376664142189791562053019113774134585010114509991806040543148515641482014416718677876276580431730562587541020555292496453826361453188845475398099905277525052773545411713921648813979140016300112385588170999474985918656553076765214200080620922916851475745553785133089372514034029601819219527045772849932738904614873836099307092123571006738447715320002736785859704861742282537734067792187177608073549859135742645615364728840961736910729008697313304738536298720611573424123582407824500642154138363464791319257510414579292323013964798548950290960997144513319241370751263381191179501838180558724038708020579905145157293231789686223459443044018289699299028761818401590134930047434655260646434988879638156693278024323812521554624956388982330136290167049424094118582772096018451809597401164846924711716262902829627380939680535156293471439360777268668365604921618839689307971611636791474486517596411076810461187507596434260046979222951771970881882637300844957670414379573068900594030059669462435172746064402491699639256585470646371028345111692685583568972301562562922256758180181085480072911408202795425250027969499463641174613001079713276428421215191667447359883645715478755796737199406110184987838747951054762875131236948669154666701738693610353768722184367702584486223362096024384484603104446694719810676365358898796150078397378880308527506601302713337537470154717940902510142689198467640659012705019749229659196945434251394512811731664749976526521575163913656404283679160697284832403491752877439284481271499113105959231314317691378767826586965558827309006336474296703042302766970494721137069514776117071812137188441976088074396467632977148030639633204112209971813503021630520258087179296520213138286076436343573116739144719310772751735156402034501606390456169140121695688607125183103173251813914671347610021351582630598950972263101156473693547645926791369585126525848123770842541512577658666859445930626122772214914414428878443618845511938720224570647898061530301191130932770667765716795587750061205748309356694807519519675049350933068580375053894078242210199468520630330003161545121375796842051755736417199147757963284334866394276249640731433231049313954526161951624809572619652276996303120934045809848958441871638077879356764855185283339151315501229746330405881302263457753882789573262935098772141915955008754732738429440981828735729272802882701434622480077709131642461504208927055033641377102447767720176633847373823944955329314383832782143590012811927685177026789234911929577093962457115800486427160323294733691288587100842884523422947373759687195747031917611825381748929965338560830322621555697476051991779833983757024224308964473525520615691348057039080995096707558993173247103410555911126189269896588730810492029064501420933855518163570985872578414596537490581577386809453787410688705142748561393081836124251051324584698861388478139283569598076892767321443716553246412277259380509438802329441648705346383613734547877712888220362688053129344779935227318331396329401655637306388721745349393876059195313192731747216875912473534083064724394534423226971274516443125664390773514132844684527673669092932331255685956744208760893026251638308006285281531125557486527757107669977234989257848144696133615593927212707645061711788280447683309281341206400131653863420785992756287508115967050826182726890127091142835164557166691300678394990747493429085386293564966123136506231068567056989317384966475475729360339009395818317246772969137113875763412531168727939516546447462848160915288609593976373135718583011204195966912413852164206268427095555948610761307815791560355585910426147327321102341134387395444132445427019438961472388259276810758042673037214059651545259592406090068506838010231567454628094637254355973489738412673187077409391969169545123360596500128359039361514821593508030148522205228449973734972174002553108195263247639174438853119252163722614381071194775578403064409455019374052283926424489955638366392986417357495741112108742236903909428659619606212619900649574073585165166583918297998340673134762427650800452972036533098907970092878703482852833490281729498858731156264911226877099786698157523214591321994816532369903053664184550576973511700913443461257437675437472098084407017674888009625137498476466436818879720524380130001916537522732804698998210196055682123318139008022653778279715652658727340997456249218032227963658719808122825441145385176983894549215846317551213773007016356738334267963377888011544300061222386574258747191915588698617637837212717814756142051324008302080298650994166585880612515919258375738246207644772437177730335392539644865639849308897774064728887770437363216880581815066468852825832858170229658070845319130874032026316629150366399827042959910139581792401984719737440786491444999030986092724355755641888514009652129027999591099530921894279904701093752999885648973445224343373762636465568559928662660225367743242647517117639887521310379396989258168883666755250191993348321142152864927369234668649063028652063843003316973499048911633219208658516326528768740257621395512872408369502229664467552427061041482906643131699241509502631730714053932028098939427452444970068248194791910834306048571684029297039763506306003677920029786132935369270257069918171451215129218456327859444234926254208150987962386182798994154872735035689186439260489113584084457851762452138367055101379588122088844841306204874692945577566193189114109700874804492781437652540985226374341144719703543609354328682925954034266359991157018716516446223344660092640717378693207071014181491854379467954573981289282127187230877577110472130570576015105977305257910229508244095738723967730842098391729083715169089672956523592451123266861612656114937473953741130882127624277059388150081629717639957137442000516378123556553332349275408205751508548209994904127879234614825403357223962515911129518982040378620086754855361296612014949915205044289352069213501405997863521354165348782511867122622716426639791821261702368775506733831743186020155130943146663966007407244597917005719991265853620211871215693990090865326620251912533146988791177682866417571901522812420520954626741756852429297080414669100168753560040054760117697607946028484195290870973497362267381612404260749108299672450420697873731172732775674054385367218094949835013674973757423265370251319346466334678075474375906897432558238767579231146265140826352088422254545690686302743333477665277149035167938674924154842983621768748297426546172809743534122395481353193555875026625899972752500022321576082052828487883396792123138094495203111492864041134795761256726095663499686254762052539889279642048007404275482585612511343844033096850528226343612783861307535354140366802884442274775822100977205037665851810599890007341178775130240696632601594694061697231625625860004620538862779963203630814410243245714819549757828073441407122131050844039240224163642095196215306864657309686247074858678000635402415836405930550459058799511632845758556493533762990549187485016639012256731683580040073341731704082434264243561194791703596206015014846543656970640029940075455836423615054869940691591288967540111562931377745992026685841553681405592390900507543705586848434089001303884903488059141717942395691356277350339460187131843419289217935265295704356916529054605633813938893737767409366779159372882254232836716324580262988115146013874569597106960026911351914668502679283163961953086528727793944040518851106607715147835491925402383222147418855338357535739845538867786357060338435261036202368258020761466669889670691822601560184917436779215254347489960930087319530836518444337988344598187203191595434829132950413104197804486083026745302512606864460474736420264409880729091060010368627194325379608471121667642965001108323387523924855835054547593985702842329940726838791815501738849577938132081507924442944174718597397264098866829822238109143654804816673202408821440775080110551433710513005759571403757096182158076893681914376156120366821040079723970732533775297717113208811739667056486197044324270922989003211680035846379754027311741122863788335461268176688251174205660568758427931660106752538935307255339039355388757057375250425837093302168454705863145996845095042151313295262463259661279787231685169235050323016586688299833499115629856113737828434665438782484735547300584910063985708776012855041724554864958256185127598519785482694466456563490174364083687348114832431925384869094951858531131186801480404938023454443571034693096579794784282688250620550447004592047288521549204059159028509660096017875307950532319742036173203952041761503785819360687983493313089577551873561446412395575710594370027055187478904534143877344909963663735297933632031693194441131986356078620539658905801102236737444661108267332204176723242428802368200731035237320543765666828751910067807455585241166705139054718355894926417783921107593070742530185305927934025258466866218767376534792597033669822057078961298957496217109258353525748391156704355202862658731864850654926248935721796777991022299873209352867958121188810265931762818554937603100731645526362256769968645627563740131303913187747664074382451124596816950157537126085105444310397381169417181279755364952019062060800318321532221104576465370046063753472086774044100444414676557036622159972786835290325849755928597463426695781953163866965969052547199558811862459755929880206105062693162596966564969090523328485578382332426358809045831759393541573654498007053609291367872036111445231279494806931031841205524707641695256162632063010224942774570614275679640385413454072868377460757627086865145342680411059337436108163325287906190993195903620201661214403352143421814822960031390185721117950110818389291340253326486009897862116192130278391424657241044004963932456332370837203044676250871218583290978562214724386902489542748628396358186325956900204476723680860137151218998668021260767109942583224787827906233417831491624545860788315526165511635197037561922517899904690761031753872124042336536173826882605457634858121101471892751287742889625763093890478605491801544520792057578574375773201143929421480324074646141024278246772158921139478563054405229834847395540267665801516476465649906633858677249697918200443907759577085140538201853478765762117960994914145101764724959407470640463811314680073362866017160216055901670762363844476940433763519832222385027792750981080965530232813715566803117769888159323419674153708883977329384943689553768541789213946129813719122880362388613061590039120847635432704222352763497996891937276538781966653887199495265671013361386797466770701748928272976698049303363099194915667274909798041151694131302731875286034428026186929184304362229619692102502128326871687296959400302085212456821262169947535776150082836000223031048009020371350036539197512764290221947644788009144903781547616778821484803103102745494206849074992779830389209747508799417151536020207175883478394172905960788120783232579015657004053498129914455441618389610549539868266323811924818208880604509127630703993255747870363319837810567597787888248562918900718803552796004261069194657586185596777323973185892714770276436504734272537002948160990428552665125608477771575963058090305035115286941440877623389294911460277602637191173693793231079024899815378902648788493885795214168271309254640593363869703425269994239287771226535309826739493886296423210090644214129966601915093662511467744154185692679773644695709701672608468044373005103438648018171096398607426443413194281519283533259981445906676653664312034448007510997631193422830884833006737772887744686368777653538919592111949951373489944710830951650076413715452663964540719349734000663229824949598114271366375624217568372270930581796391817021771734034804435202600593398262992169912934443430494160632096045871344133239156139910775140126053555363620216919941247411877562901224722321989970134286623258958498605964077449818088184783496838986907729353462388738014823594316384752835667377359432034427008829688816033072344951707746090028382556104976370057205866084666487901937011251702362871920843956238611037186048336332441746362113871081603050950760137657339038936536596933851722041992305843336304901453452571715630307405640050171237176240125222557358332930710738041186084749584740450846611590610786726669986270473854160586469256252168384869883596851589288004569216909578136486049118663430702671507574735910444281915534186018197115110593685299825714958042538520471370923783862810373944427764167480823665142849781516572576659578160735209456505359366276175015044857079506949581097412535399513752605101582122333384186945231604776461746644687207899376798357792653596666581824693709787573041587757626825069517113369429081460885782112243077774167939979145984687560083045973141222583991194116736510260934423567193666909628226271067954142670416399861275578343838128155755377702692215310376282921807545085658277051619371602033888713006177339575658405744622442355225853961935039933219714558173292667708157166916833886949301548495619142336871670282820976529735014754467417983365683174117809170080328865238203402509223643245295215135732316886815093541440338066497831425192534469707791058531207292816542931530093442001376701232809955022738734490848042941077563991314157582176472360317911138496886256725677367798535879492979280051355429572780533908274951671490815885229571886451377910940010012673321183872398403321907312091527491690998932778856646700965310668633894463320063118790564548548680468929222591042338228420943806756554406415931090291538143528789629740994863591079711320495984207677768776056308656173482219428268311986921414524482951641166995052008686213317172019535225407298322183791610925122947801778616107589077345869377990653281139028741071735597803862826823503904687705298499157856081719712796392689492483355489380957823523151647371561894369978535447318492691386953116508279327857453984504066238005909847859372464174431153967057270158951933229971026010966691002647873844722520078261307977064543610448466409873414879293871473093770897730342188974916791516079659719631290440856802730239894028254762897599982086201797037774350455318445666421091272654386376102853322186923651805632319156209526417184248540024807358600433160247811092932618503532768368430167126161193398063991915395134237015963224689432846551459273641605647876407353197376326052974132020864262566344092487103313843164740701039613572905063871725731123431656363638983017301386812075627738970033704925617216698715754404765227506689591570815979652750336513064156973513088297698696477005797931273090405805324066030602361512119840369813400472419573729403873434074573160162870936318068249575178675647763166913751293933551646401329625534493843177325624465230372869642679078724392280172358972274796335813356986697385312329187363931167837979111403879151351225430729247112426650129104919284568825235232455725351552224363906641354967564821570365975247995194169878249598512813403591842113734352236034910030599591245451967209058347539059536190947433656585914973072966125316763518711707788780035041883398613275851057398845335005672095171230325334135754312046899114278318582949758025840627034073495122556098906615537245941205241050630832317495323472933706045476448135324622130249061967088040634256046633681463998139104615271598326353633335243659421316638748257095222430616324419633409773550120132726761874278343852462953247386966597193056825342009690607297567265709899931944826256174731047305094081727770841080440016328196894856028563604702780682709363667848710891858610272205043503944199299286748350079640312927864906304355154798671043210363438224540663084637003896566824195029371811104076856777325671062014465716574261539700730333018675634121018453203461781631294981764229198232448947654253783388204297001920517253136683270888989223979423417588630101697507592396076446071605672776440131159545850932553540460963555258875042206253533925856199633623872569538946264824099914287390183680108014685374620969458668067114850551017647802720372476318759518097294889667098388787511578895623400536394696909686982089754739465395458755824025627145860540874654096413723593095786861445483207390022439985873830588574664429664328016256793764664176593210650680088966473569586028063185778696846067901539484777171526008932126642124726149000234264622535507932061596730778639639322994194566230181315095849815600439054976860942354245780811250583700351160679186551987899007553450837968473873566770319473147476749953987063615776202643846558316122703715582310812032981020745887175302830579849877162396208954934582206235358053066687144876586531305671914153856979556448429896161954702428046020131267519937687942784998876608574424998618033186526320893410380410615897192637383212667814571224040666584728535219469735065470507466917541842491727590582415179332124764074275007615003561577219703985592626963898540408123901920954693863945334300894449076898006775718907497203849104045111950488579240549422430862215686448461635287540273933678378844195074450255145986318612166430395304017670650737974685138684856887920372725287537626880802277074988514877737086561392592097851272353742818024979368746610359299993821608029744496422263548547379227059308330732006560207940874965636535953389748254985558222428424330864460444917636632197361629108476540664208138353154832367022269303011778867713003519669926347227092605460218997631456886988546452742315709205780440409392361149984816382171251958377059474144369328217951856030362908523108523320063836177218545129144151675726728971709295080995491115727738994384523099426017049570788092605348295244510790430809310252002021162900702972004743370313805442485273713185126694838015211112954180162169003605131100343992572258878781008043930175009769360708537294998309182845117912092938413455780854377238800073118887421690605050678371370274063825715320860910620948562818451293617405229491236178678754278932510338478945063584831864172120232848867941761893175916936978589066485863729545344061035238414543782144041420795359232419130120814019590644487393845413057769719569362935783498618412118335138847775489214231071866809710199171908881608454495198717226829803613782208248938966092151102736556383497239013516522084118430594971074187519260946766667423607181318562263393260060663288717977893874080349690289502370587468658530985736835159292642558195601284611160860487456916132188445668274130918453531643472494048279511660213922482152284451162576937159479526872950903047337162660821805029600708501290793495192214286757581386114297917781127145691164585515718567911708522043336429297534300930577150477197470794166974719236537212770910044441149771285775283181049923538686195299106209763353070616873255072368061193988813137514561690385137083968163734396360347928328336563595006220960934830733065521338335841965986235454589498682179372157178621143188814181528148836823240009313917239615618819685916460559824760451892578522401207920356914008125649666362232615846019270768411703026907820785686893329687936007326486259085396965025670221843906365927274024874373060432645146595290306316201392153119798490572148328091329727540219633346941261473165756079426541378711351627269272757052944951094355168530350261245111562524094741072397641389854917843735109228705666266863564318304340300463039112532153772402056001825404569674075795960482695655750098767071905821033260887679978762025881061325337213163524622779581816972175555663637210876981896507755878807206231301747997616278339215979267473884231317543544712452852114555647618822488813490625396727766305946129050714786088423305048954173700588940427019522843104010086905515156909811517470970474323555351456229248573825599238197370105299573364893745750391351067788061060527046812509973058875643642096985994846004078611902478115985749938866763374390207356150215198771166488048581440471218124332859752158358015616660187047654002371295814353685889164385419937001586245963586686123227189249339843703303467679680488282425879611225214199203660669304537817806007418484543257294498646404096533225791315505537497715207372656046521498454410484618808462877318221533855177115026118801994635309492636704866960405453702180044263190730170186585393782170839546858732775601817761449580514710578003629573446698223526303276734226490467503004836350690787693180419256606367206975754427565647193757103622172723445912571921412299915576801160624014585320520435926902108223783097157413714400856842549485204781754909051139596113033072378955171738006815746107126582544226522618574999884662865437801703547910979352686377121384449362061338382596983291230994834971550479538621580428614474707245992895951108596353356806792208588625391355419712148342585326639448556448414437163323753111363340625419447936908942309059384977968558654468049438582343818038934475031358918368904553362235318960285027300982643072000467590624020979094167872273398935195854660177797067882015023199367866518380157778613872943331744050423399154264127572590316747837829937185838805929919930426357165171535205844319577554107598132285773629025750828527147869294916738495703358765482635112741426231530287972819515170191843245039795145568805407271280931405842189126545621691903281208244330021380936941534090926737001841378878232358824105952882091391122376983197385863111377095821200758977598655636124137542127167825095347247242493240787156813316762909697688864136617808861689815132468231141188094757116163402600963896457848764885057333264284354504937279338775019887183472529765242120841857211466394385600886129299536196104160966949461244421470876475635289658360673044133988472412908346503168644044604661248748712465204802503052422913247662994388842262879693084905772957000634196203224713014001316324485989167462563998596759472917793384738934828062167583801086989253946454905163667273365009826486005589759567623881215672865627059042146648672881327891063995694457750315379828488812880269962995872715826927673202525599988948924553574496455072613992039779209442466653855719582532255207207153068979266405561447716075597208003386115629512060258961979286373743813337931101772517953360698302031325001844985453129783938956301615754527286888929780663765211591009120443813269934515079913668898214910192754399304618341831453870034267125170721505066917586198732535221716916597559836503614379370118425547846931569036557590812044714028782560536961879256523449737057538949699208081652250218260123107062251099566298529927581162698576168546631586946049600127140987141317674460410902993224596022062324828491276267223741714140055313279819368014780323282408383224067009467800172584303162404423355760504326823431706740776861818994506012773534445613456631600402675225760377368762722021968052635826828120651984513278838416227839164392949867613026178865022522692004106553797610247860158988661216559547229327484286711157186964559739720520556436315158359781162799170405180320792416230576841207330921642427914971360147358390054635718803605053812837473635557695381145693736966197784412835427730682455377495472116907945998421668486206685639652442308850167256008495070585127947385980542764963491704371533238862062927529061728993687103715584617381449133650067934551429741997596233806357685350458313224546984096007149813473419575258362349731564468684291660239721484472043256211659727453894937763642732739820546069887466309796309447539968295322423746786761899588378272444571292371367413474447197434276820309108466176334054973272331173340111659361442337130792855312977415847609894557657244236135360575415882254468739766648258409923847596862145560111671406474246039147740994441351609557249626167418534932138685355488646277447161488690787234126802880936621565723899904615884548341472638437772090419017559362342062609301959534466652230774497315103874040974426330140216732414915907495369817982025864413682320190304402284550455106186758899229547597245258424329265319033989076324859178607488037746916527718266949417024120162124868059437809624404252426704159384001199136240834740094617360560669898139739645400311944527017550131601104533280441817207649685008412565052535179862086175827433761623348775986952355976268937519226183084278136545349291670649785347842730455081487877293986813649230888836033911523597766312541091611558308804656825040751880201229000742627616764846092999606733478252567564690692669504889322114105282631889525319858323705525911497612288157996632667685670674150846432327565528609123127086077539690737908771138085892200113245294049889922704737554162844306763132343665963132039823822365456559043777707552305193196770793605848172893387453594424454474013959098664586068848120392276052089591591308873830873345317112789906683626082510250289631190568481346881428473945619394593511266715086704096809000035241384030443602237087033327542922826698398494829325813183260408718893212433059617843940587229933901382943262992336198408409788514398330434599960440396485182583066248982823883042200111255085981898391448344844015751684471609252769042652840411485899734910885714254073490007645062005967803838338350515620582705664016191350475064132715818275524670604480386741711701135361668073237815153729800159901327889495086187129604447582390156419305608703427826439346018905984357281977986898496611416847526529975227719636005017771483921982957544197799709954130121091633016282666472057665994141283170246327843904936295814914169455433298130711317392343344536477614717883848576748172715876667106217813834587606343570080150703180822107697621328830605698506305609033356175547929890746964404950767451267747106159270327510593755358827880906472517244109777980040119286343261893970180775124057054774158177970221802579963540456256569061867723885060688202164035260408533918104432069412762092767961756595762676589021880178838196631141734156532209197898820016385683655803586282227835323540770476387548613240989563105953577728703740467085125879358539676422989918253524305042736487362952197862376130430552678640237349729018968430033265542780883750558736743752261945449029876696946612108224851115124942879425375009248761228804637428658896795153370852897642290653016040206069997053451309942591115365763315347798585143808043185383293137605133990375187081546565293976821820681678976667143825155588879797300722377840466564345393925544396615896674799718417150813477090500003898193451616746130407776930778672242012416461426697352259907686766455115834355953750908750468801886412209297018951915865714966322975970231743912119114106738120788423635459798468818392838721078133776550259766032933645790131678864392198922153478445210797007411829472852520896641724546528677899228076406095090087054355112053831012039363483887827931984497205305580640089884147850679614566821898948479674022244113913369887487652583123461801329225543373875617324208320681859309093341218594477765154347005165214923914454731564386152568222327274320958552990828960284112884233856381741112323189817039205176818285148223632011326114683897977754234839539859773555387479931478369465852786548627650813853724070487089026934104735632316188699054916850121902617757361251685208213541489423125264663780298582285404482769756412105522055863664088568917771323306300523891885066913901475208601262155693104850152972747067125562727745608865730314711297367302397805250438620696620826528991710532990343302838492054402628712678922427512444061374297112648006020563822297430010181285771385041656979587178970340526369080649857004814587864116807509544571472638333034374444934753562266027341209926917981677891921750897515727238195821470408569780330165534206129720507627843830335242167825939925171230104851587860224644439220292020253252521515829520218725721656441148152957244204914499245531265109309283531415930597420172103218491273772895034798650668137487351895169131869380823743909292549280691725771478618398588851733810124489829934377473370053370068252656647212635214606968547927504809038433155753162266329616429449015410862283066225309223030055256064379392216273751092054318524673355685810347451754467300668773538268859656515445954574923648729683873935557286856820970937068655945793715092808131171747403868732588043215625794798713241960194139927877235454587568468762746272019100094498768878435303678674043109734750924359994293734355746752800574597686230559451123952878914382180299790800323290843096781932073569058248305026863533285657386011004060766594502913168774569065159241049643726694858160418911013311490706738036543681700409684130695301318926665944626256463817919659855204483526903636334206401621354856147973558569067520506511253677092000344997303422716188357301982404683865947269583956684546963367459758762687671678204149310431797725100520798570137927948407559741374061481883367972415208467850517662863773339874292705113236025748070303373436449698506471836270575534367072477137900735911028494106738086952233620846769094804738713039865343227698048631407498839757989365214479653306186066720098433994778082034252601056288009952122283076954922176813820889628483465616421754123937579558193754200095019239139515555511223697405926455097278440331386885178334434554052038015454864241788988257555470096002158416471742411410132996885100140752406174456919083750028326577637466209951318990330737079201943113542966688636484421817970036239203330453206764934536684736355707322326827785876446310370573555594566522654459815454790470955048621062330510444683333038786245129101219361371510125280334401845995354716355081414363331143924307309675133524204853828824109943599655989890178320729881597902725812942771540675060969003063075143063594335159290803487756279512698080233303983448523903763359578020680403822826869215712204567152735947916516836123801571638451477512947633273928861312235512576987086278058220742708761872709578297417052880180662367826500231390634119435668470543727684869857682890608140863953707420877680764412659167163724061796739633033065005264111522515204885857558654834258914573545195512032180353594911695051378068719810556006895666360047309899697571949998411847437091347874733077520204574436565617262186793285390157914385444947163193179238783098002974102908514885479387830864484899289781518304707739376905740671105223300022583960963928395194012317124630264096534995267171526593770055565730102494501137676561913334587750246583294305250495353130891578871532092316372373133107902309220102841925745042896381868642367418745319420730865142002648204585089869986704818966935411839771621427485830775501646076259582071540977268704166605867826554568530493151242347823449624187048865683437944276656029782106486814685177512298790716326796679143241180948696299889708040355541198052387600659238816546438629657921933326303838039366429868607257229153586409564863587715116286506248407497620036497639682708720641591753907274496783732165772299744820271810956549362372807148941506408038206953482379076431012118157117732910126914164048218394564547100247423760878689918169039921521753045153136140852307023421248049548015885572583792382485175500534204824970481492908940320310430809050323007986533558215703588782544545718278427626486375885747827314014521764649075125614840753558736191501676141412501389041086207604364613946110943290698832808350946105405659106878177534966935163165977743784854970520032448041881269436554799191892238890741452952579974686319705933896006655839221952956620159751151666300129475309250350785976428156893784305478622359782685533113861735520731866174351824115841845075091997649633694047866430158123243404433057388021248152371142388316099631832447205081549938790835458611253943435564824171299287489119366707640567857774181325253233507979780771975461697394241257405396956542526065849971304547348847901021479486605612704247767646084737041513530671846138948561060030258907065141688239455904675293200356117950112887673328192319125625450112001441334554826262046043961154178777018566846299911001936816697919963389400196333444219082726126561961439286151423991499109774369393437975616583894807974648514443152564762608988320176773626728380768044611965217042661464062080139705149376171806476488738827250154569276638342192678366431133871111025133072862691969096467500425521305379670524615424717077214067299329167718710591789934002289122069747920433953864968281665817890773234078288875249889546074590578021210045020175846649075388442769801561868206680361142266963414252212701874669272948450859264833052568909056061160609027359184255550131690394077096720368166451553160609833896170781715866268750533758548369182807948608780968625107433984390434235219689740367237885674707704507030700597244015754049856015155058928190915694812731538478889554953381956036083413176999479211030070256296238738351346477023693051810382793957412886791553484931648794808844286324406999962815018551120571300130535112365975815392599766465092145349546061127412046819415225926986188716476056849908748119793304841105307635909081982031362197358414422316767268043098239315181137479061734502360873745508395271506258881998152137286301123636845012754834291165393438286951173209240049799587871290266306404165115829161019204881466233120224197635902895287152465704419993236013589982120474846271345840260611228369146254161192044127219280174741005492699430065610779347520954299270720650387651378861176589218001361087617775409717699262796015976536682841105021059664122075404910323076215802321801490368864524554178452977152697573396110449811096336643650973261681886798344414251669250224998533937199407689970648423521941761037033886551068960149333137371722361296472034150664556620292222683537040127141078291436736093570890846188142373958232245787503986561211010450137490946828402032613144801907279288018920751978234534610262408946310152037618441950323372778709960576820747366052518528388812006417666180087401861373515895458278191176440767682077611697073274163810947190349871592916000621071323440142391532644306688082924938683364588261228996162358510568247905595841766424855277606907075534470052532713604689867684196360667936729004058748210752703690582852587524292351670119901397237694282959815729865739583855822949365306356393915948828577313698981442774794707665584106781286664956274007171084307394120846271084144220384654297665542790977252203936545409559594221915876466565983276517927312109637452041938454476903708734290815286507123649654266467749616718795331528641404301235882753816634993816753568289004479992478192683752604759132474627756612961000581745982917363087175573302426078515416609069164426643196313914584560126544290921166479054390986891864459370224685320335100411031886752698293827320896578394742343752392404174187327761664303245103880308371741165000643275630023932633142124856864613839455387524460883835247056445230671943050578332861499695214574918673021229404253734683027773313743176432192583951191913236970762565695716840327124880325930914779807518816007401993774234221794461913879164577142778140583620285187482254501254780617476909707221619667136778860802714594724530597985286751745300483760149830490374318122069442090705009423973432872916069092401278307983254836657225071642951238528724138838574504391218505180992122754344306417613772561319645961095192874830637228486233492444491904268558980004614112652158744705099772253265288419466337449702012118823493884966713120693120582224051534971354793790579910847464242156789336422637453846505595136532644728156836277997378127893681071581923934505832928373516022575817127739736575756865378797460471263725175192803271851926819917519383686188517784400435220379006466153404705216541111363986878921739723739896607992639335605097808466640645060973299641467192720137922397898565627219164711374815726090587366358047829903172491757500331384309027495081387152401636448384580814486186637697087649689231216276249532384975371921757162088038760829349873080877249706384919119527981958190516873110807572517264983816623232205603988358157912992461349984204628724405823867426023186896007333398519510459422904668181847357590156918607616331138009353807527538592211061653529680787460840337585919547522274221559932006125164812648451392909851693330515235916955355721591013597659403166816081731576169618811781971177795842089107519036325768932298882133054753656397633873210525368153651341260914098941072219830872711334487119709246568789747359480982755252152430402157014447380207090760786408265205545137559732000800203136750199256298419497315924197202893994081817702434459238430923245234575791683932861682945847124118958937423672717813748011917449413425060927640713687024598045661303952113384013415037432914883493033636158000130588759332472546201048166403710080511673970680927719260588960348045228317232803681187031272506450618629138861001275954148566415095600081015308217088430975829661490651423859763132193660525117633388134158638217519049714767119063945723171578151019595179218912729338551682001453030819043454878245408263437500120254435442376334044602833812761305154890870916870343146715245652773283431041407392860250480796803485192806596809855333297772986668103799435700742354867077311314589712272131788641879710793233868427693207194387420730083062528118643285570520825547326752348837863723225294085957046976403282869202911899456522208121620826458236485403829445741128331629382084816009173825727982745362705478457038425615653445181021898078023754297882055318390558568805474809499629743584484479518248026939110990875290364212204536332706626128176468053408407649243109388979549094928082647431373786179467142988191638288941225785348943868854632528599402913545489154484053068978162863823000366160237819716753451310493666848144862930450839567184713588568720601921059768004898348890777169855867038685678689630104228620027696190848737373593115559489316471614742241241080915717759369507297908390256697208628722732076075083433157804018595982216321305273881207658074452046050754827966442452381402017094824435270368061319011125926752655181876954087858148018718169579570729272694811666295639408633390466351259744410532863779156045567748268573798664900319980347698852661715714418485150351971611338457054814071731561010311297700803013892035659824806376504489316277200564467982215399291293815609566984236664361860965342421210479582059584960463891055303905596666930735260688627851937917438369125360883055927544388560027145080571797004532153325269863702949511264830010485917986200317248423836494080716911582330878681178100817517430784215819553290074107638543118831542337780918612111718398640817469867853658537784796684100354795672647383581298428564496194855634992668338556800017467144246309114053233502145105635100954667476387259109043659409570451628107003693334435646437801867855817503020706261095751735198245598952555068326031742238547524726553387803327296382780133921837788043654626876383362945442953469045674139219118842149941525260493144551517231835450076117034756695289843264617957174777984619140625' ) ; +test( macro , '94906266' , 0 , '1' ) ; +test( macro , '-94906266' , 0 , '1' ) ; +test( macro , '94906266' , 1 , '94906266' ) ; +test( macro , '-94906266' , 1 , '-94906266' ) ; +test( macro , '94906266' , 3 , '854839655154332653629096' ) ; +test( macro , '-94906266' , 3 , '-854839655154332653629096' ) ; +test( macro , '94906266' , 7 , '69352833223452036048019660867447049048422594495110435456' ) ; +test( macro , '-94906266' , 7 , '-69352833223452036048019660867447049048422594495110435456' ) ; +test( macro , '94906266' , 9 , '624674792670819892886821348974247157367038441509612832874984853143476736' ) ; +test( macro , '-94906266' , 9 , '-624674792670819892886821348974247157367038441509612832874984853143476736' ) ; +test( macro , '94906266' , 11 , '5626570371553000770366419421961255147770032439589200995227891474434035187239751962044416' ) ; +test( macro , '-94906266' , 11 , '-5626570371553000770366419421961255147770032439589200995227891474434035187239751962044416' ) ; +test( macro , '94906266' , 17 , '4111621002962352544426035475002050767022502971311441626541763763792261198666994629509192961845858718231919984114833985236172441304825856' ) ; +test( macro , '-94906266' , 17 , '-4111621002962352544426035475002050767022502971311441626541763763792261198666994629509192961845858718231919984114833985236172441304825856' ) ; +test( macro , '94906266' , 22 , '31658294146038073140673550517958143193937503699159895257943887308245045293131342388364082990134400198608168678756490519887562990165044958599474575834979005035731090290356781056' ) ; +test( macro , '-94906266' , 22 , '31658294146038073140673550517958143193937503699159895257943887308245045293131342388364082990134400198608168678756490519887562990165044958599474575834979005035731090290356781056' ) ; +test( macro , '94906266' , 24 , '285152565696490625870442272729395647608950351839474257315727256295452252799048325652363949074270810510446637480253626162460689279863201482867682864836827407863087624820569082929394398407950336' ) ; +test( macro , '-94906266' , 24 , '285152565696490625870442272729395647608950351839474257315727256295452252799048325652363949074270810510446637480253626162460689279863201482867682864836827407863087624820569082929394398407950336' ) ; +test( macro , '94906266' , 27 , '243759720926361233482907476667027740766805627065699088178027236643247725320494107064742082561094618490109236612895062687353584665860859991879415575955849317191261917932396860642093944856375991467562330107969332576256' ) ; +test( macro , '-94906266' , 27 , '-243759720926361233482907476667027740766805627065699088178027236643247725320494107064742082561094618490109236612895062687353584665860859991879415575955849317191261917932396860642093944856375991467562330107969332576256' ) ; +test( macro , '94906266' , 29 , '2195592394049166382906227581924066334663790360178733838688076505880403691220571309390729652591082755619543107564008226799137799080033434887927401578673812379447379840039807149661750004725486244752615902332029221197778610238611521536' ) ; +test( macro , '-94906266' , 29 , '-2195592394049166382906227581924066334663790360178733838688076505880403691220571309390729652591082755619543107564008226799137799080033434887927401578673812379447379840039807149661750004725486244752615902332029221197778610238611521536' ) ; +test( macro , '94906266' , 1234 , '9591583891277388505525115654797253189447136886605641096683226693736396854292872290512151998759360923701943145747583511134137237540129219701865806527338039412393513087835762990942813556773080107716234535870561191650361302039829302403412946075446106825412751297892836531217239269776359674130746921131965972537264150037423340241624478540689955102073116137675285513450572840589026258095131250791322081023453951176768841489407000043160535726118339631576838850502482585592200779524367753458287644483993004333076374919449019351020134267799153173432760508245927226301565370359856673809842061641312175092790578128981482583891661097755340718832041897219562172618233303238094263205645877970358113993768074445674320377240792952208045529432335140630061808861188401135379799521387052163956136888910117971768073860253216476475927368994288414942490447092525755875965929318466574353873454174423568978107060092961912237658617656324665296966703692085594297491801246417796157302870670019421897078307859164701722985884435622838840530890375919184262292483249645237441871417071068806838100941596745962353204182500699553236401634245625283851805217533262792073996012743903038338818229229536055186386872511025680807437338096861815569495459484486460365583028341745944192156249359977394771788868182593957987578355313292235026581979280145300928658410955632509870162005244044559296175541745959995285799355003323443377883778100846086239675150873016131996875930350018015992219350113946152537456877585388442767668614805636644492157477034654015002200777424371801710940679802301822648705115099704427481311918749176783544920736529548586139472683949148040458809863320043994900963476851393707718685357960075583333452093866553065546077049928960672319740544152092427005399888194730320253239832076741315219908647683627978170933321554476794379260071113837209591838667536304118212015385101618506499462338145076365933116172453086230618448544984434420121504363011969733490863691026519845481227162596252154043336808666820679272401041855392723131101974634161808347994859566559136073803551874710780721574809835031749728330936601228289711332942475487049804198344632033302735878413333870324928721703861529246383352099214222474224938703923296131257451581782344657338446171822905587284519270798848617615383853637901599987735072168595913644523892204610491256735570544171294439722701186324784813173174483048007173966323269225972341862131385921920832169574095034230665694523080098106542220271445953212355824376796872664899930405078699681023392941095533624834406183151593571978375085934954718772261954055173766598828049519860162686382244143267595319712518638744666104806572606245449198069667116209595882863289884166226287944224244325912368780394022898051057039098547506174697498113971272667929236765997561816214125329832660683430329906332085061140646573555743366393621599195976267935743727788827183517095321230820637742126067889019665213164390290062070086490541490087922889187502866643165223474222152292371630635439138794711457873999619661458114893978180017319683380126983120641424939879059628457874620836535554946801030253436946381021247115406263632484804383695320385114124544559909521290483278475119817164333705567704791958463532021771160857295222557768598737275557446539702002377398605084666447155176033668026697232370808420470009321148824428418389705572556366704189822047227135423662015737971723144128915366318163252037686350939438961105050312976676967329177197952756021289597791397338470443572707715044081895964751092291481135333163500784426335086969222350790452151470682249035744789451673722795644580346446427237748663833724773055738574222477446871501122860335729438705137534047869725490906711494592485106885753816974753130866230360407926506022819960149735054814022037339465954340178612152040319878077106430592659196961703359784146025873205470608826469128543078279531426173587139642452817225181534576963768759115834369507960533557518872119645633087366816494975254571143679899649491717075104399517306160274939826782873377728147095270888144396760865832963585642969396605820937742695276189538284034362525529116594250112268646631014509298531366336740362116463524994112518288361022718725186733909161021464483147766958810416653193317981915259425065001767448497554577639274204071071705244125471084327932064913256116544625655097111357879218899746235180031762344942760169055331365226140925327502639728177654134067427560672144839015071652189807317452445009056094721496371835728117777604974208279421394708930008595905196768223073852631733496851110527349046730941946132098007584486429686144893021869768040494264750853862282987486806138208661684993068425524750265051353734028906190482450851078570663574840036302550770980899456380758967689998731148592509807498959236086788270504035504990430792437032016856376680319178405811261802074955061597795727228291245608975661248511105127641151300865259290562972594488780807006164810445138616615841618866683247778933343790417183231981709585853401070402352247880227834733605154654208405827367703397973124817867577312294892836600548995170550964519017755920491134728378033326750515727791786492541954821643732033152252733475994603308334780140629373474610355068194857748405815128125330220343480629589196619680550886899725922137105216388200442015479933602992398666447348073001184279416147051990832666558273496164807310852154387305610527877711252422415258565032409894506552122659357455434448999509546516876567873333914554650709822738555250110914569231361810681278643896615945548615899639843813666952141996624167611621492507842243902766221696245619381375774605289899874210671753440701163534059875806083218591213612602297792283259653398593217024941897584586879309412954558704641934429167525386399311944692329646781017786882955521326213679515731031183203986702444464679264883058444930210295590055606165224085189224526495039065334701181368385574370869084681514830806912736541133960881470315237742308529215400374398116689039427221492261470641437661432564644402005790004197437786314907560361356740707196128715870019180872806279505931484886218059480821987893092959069213150697966414731390314378598567994448063764696914845544937095976949556292692796483284851190274166372600687071534820393215816026820899675947738834985468497728922675033232726987359807157258554534363387708729838351923974285515021519390503787211158967755318117395341875443593494088249677470509256804069203968911906532856935833859629624953249282547694462129874921376210457781519780672138068580237523242109758156352510154248725657237885230051785607446612712455877439910598727422322236228918026459822218149591970911650199903977933286839068419271139224493809573534424910810569507347636018232048772842840705740610444557659804248321191219347571463409422539969701913590898411004567236097895765842127957787359469025195874392074029652861324112210670977858242810226625126442091294631154867160280576157087207127738748079837969738346736272907326954078228907240806250022030103243471070942620769424250383227664179624295113595650922927103176569104163069362275506704125229083883227741648535784720713916998425594827704884440884048570231868405014498867352517286315804797924811180126154783110497902148043082659366781977209563715381227919869341778767396699280870862522931948944127530770998030252387371682413803951145767257140559728875692368709218878174221849437349204586631919443118989273373652595227172082496817103834248085354242741398581443429002334727240172368808661300231451115291328199507370065934925021969833175256299351306328641830228271353568846058387616229810955704081192557684947405779884509699286099118817298430699433547211009079482595408740285359093432367204533672009970779486719368138866188648840163573708869681067182080546042978337057745453023016747935779322389017812077413454635572131138070447390064042098690495563990815384766717508180920795876792077075958862404761890064984999921424416035664890724207484476976948663181789371914701106962448405463092701988465606503300165084244328789019795067098840871060483436479149382772059422903723115301669510704882112896208019251794996975248024340609600192493149267102552688418448337310468569703642800278151785183841360284358832347643596421881526596665057964053827050804071884062288727904628572069704994983452228398970557246268968220658737939309295962851885135390864007109076454907858176227575944339250250806424963701992166486681083315296440885760692193722152386434371762373410590481977858473872297435270131851901627945492845960665561756900237380050320337739114937222692715636345829089022971742750975497841816680681521790589482652539674743477542852811800520246939928822189145763731846324657221289024648931687399148099267044885671733352094184536756797510551247165871717923549062099764463998166198147288178913216151413981763321707683229249020148234875195737760846468403561985525050842464738232714775172951842741929209903518935372911660933298610653450385567441423081564273457132625038138122267839275539394488317379385537074050425412207154034127084217300615381424425706034294800775550428346687417563346954606915929811701307971860847947436154534973614176016275979962289620596506204146325423963174288918311054000291798070696992896378237251211848896156990492511653866861708727175129743629232669035317239800711664336916352757273273019680964663040723297535426909582937904934585625428123881208162294614263698939436684681006337738069910841585236458607359914206604759267241756962489475530594581950179263984531751086934103867126900494224276800810684669857022045988157595957258035294079410835500711458127756501041160821464860452114868285466846677033681168740753966890869829905162812697068968738906495545558280538657098494992456740410755232449109163731371774089491724693292280219243313432709883187604627083249554581032445654578001281629105731324709943235755260023344512209169158809774752301507192585314852433760106795543790072985084166023044553539415733291732895468679601579454025049341590670709620736' ) ; +test( macro , '-94906266' , 1234 , '9591583891277388505525115654797253189447136886605641096683226693736396854292872290512151998759360923701943145747583511134137237540129219701865806527338039412393513087835762990942813556773080107716234535870561191650361302039829302403412946075446106825412751297892836531217239269776359674130746921131965972537264150037423340241624478540689955102073116137675285513450572840589026258095131250791322081023453951176768841489407000043160535726118339631576838850502482585592200779524367753458287644483993004333076374919449019351020134267799153173432760508245927226301565370359856673809842061641312175092790578128981482583891661097755340718832041897219562172618233303238094263205645877970358113993768074445674320377240792952208045529432335140630061808861188401135379799521387052163956136888910117971768073860253216476475927368994288414942490447092525755875965929318466574353873454174423568978107060092961912237658617656324665296966703692085594297491801246417796157302870670019421897078307859164701722985884435622838840530890375919184262292483249645237441871417071068806838100941596745962353204182500699553236401634245625283851805217533262792073996012743903038338818229229536055186386872511025680807437338096861815569495459484486460365583028341745944192156249359977394771788868182593957987578355313292235026581979280145300928658410955632509870162005244044559296175541745959995285799355003323443377883778100846086239675150873016131996875930350018015992219350113946152537456877585388442767668614805636644492157477034654015002200777424371801710940679802301822648705115099704427481311918749176783544920736529548586139472683949148040458809863320043994900963476851393707718685357960075583333452093866553065546077049928960672319740544152092427005399888194730320253239832076741315219908647683627978170933321554476794379260071113837209591838667536304118212015385101618506499462338145076365933116172453086230618448544984434420121504363011969733490863691026519845481227162596252154043336808666820679272401041855392723131101974634161808347994859566559136073803551874710780721574809835031749728330936601228289711332942475487049804198344632033302735878413333870324928721703861529246383352099214222474224938703923296131257451581782344657338446171822905587284519270798848617615383853637901599987735072168595913644523892204610491256735570544171294439722701186324784813173174483048007173966323269225972341862131385921920832169574095034230665694523080098106542220271445953212355824376796872664899930405078699681023392941095533624834406183151593571978375085934954718772261954055173766598828049519860162686382244143267595319712518638744666104806572606245449198069667116209595882863289884166226287944224244325912368780394022898051057039098547506174697498113971272667929236765997561816214125329832660683430329906332085061140646573555743366393621599195976267935743727788827183517095321230820637742126067889019665213164390290062070086490541490087922889187502866643165223474222152292371630635439138794711457873999619661458114893978180017319683380126983120641424939879059628457874620836535554946801030253436946381021247115406263632484804383695320385114124544559909521290483278475119817164333705567704791958463532021771160857295222557768598737275557446539702002377398605084666447155176033668026697232370808420470009321148824428418389705572556366704189822047227135423662015737971723144128915366318163252037686350939438961105050312976676967329177197952756021289597791397338470443572707715044081895964751092291481135333163500784426335086969222350790452151470682249035744789451673722795644580346446427237748663833724773055738574222477446871501122860335729438705137534047869725490906711494592485106885753816974753130866230360407926506022819960149735054814022037339465954340178612152040319878077106430592659196961703359784146025873205470608826469128543078279531426173587139642452817225181534576963768759115834369507960533557518872119645633087366816494975254571143679899649491717075104399517306160274939826782873377728147095270888144396760865832963585642969396605820937742695276189538284034362525529116594250112268646631014509298531366336740362116463524994112518288361022718725186733909161021464483147766958810416653193317981915259425065001767448497554577639274204071071705244125471084327932064913256116544625655097111357879218899746235180031762344942760169055331365226140925327502639728177654134067427560672144839015071652189807317452445009056094721496371835728117777604974208279421394708930008595905196768223073852631733496851110527349046730941946132098007584486429686144893021869768040494264750853862282987486806138208661684993068425524750265051353734028906190482450851078570663574840036302550770980899456380758967689998731148592509807498959236086788270504035504990430792437032016856376680319178405811261802074955061597795727228291245608975661248511105127641151300865259290562972594488780807006164810445138616615841618866683247778933343790417183231981709585853401070402352247880227834733605154654208405827367703397973124817867577312294892836600548995170550964519017755920491134728378033326750515727791786492541954821643732033152252733475994603308334780140629373474610355068194857748405815128125330220343480629589196619680550886899725922137105216388200442015479933602992398666447348073001184279416147051990832666558273496164807310852154387305610527877711252422415258565032409894506552122659357455434448999509546516876567873333914554650709822738555250110914569231361810681278643896615945548615899639843813666952141996624167611621492507842243902766221696245619381375774605289899874210671753440701163534059875806083218591213612602297792283259653398593217024941897584586879309412954558704641934429167525386399311944692329646781017786882955521326213679515731031183203986702444464679264883058444930210295590055606165224085189224526495039065334701181368385574370869084681514830806912736541133960881470315237742308529215400374398116689039427221492261470641437661432564644402005790004197437786314907560361356740707196128715870019180872806279505931484886218059480821987893092959069213150697966414731390314378598567994448063764696914845544937095976949556292692796483284851190274166372600687071534820393215816026820899675947738834985468497728922675033232726987359807157258554534363387708729838351923974285515021519390503787211158967755318117395341875443593494088249677470509256804069203968911906532856935833859629624953249282547694462129874921376210457781519780672138068580237523242109758156352510154248725657237885230051785607446612712455877439910598727422322236228918026459822218149591970911650199903977933286839068419271139224493809573534424910810569507347636018232048772842840705740610444557659804248321191219347571463409422539969701913590898411004567236097895765842127957787359469025195874392074029652861324112210670977858242810226625126442091294631154867160280576157087207127738748079837969738346736272907326954078228907240806250022030103243471070942620769424250383227664179624295113595650922927103176569104163069362275506704125229083883227741648535784720713916998425594827704884440884048570231868405014498867352517286315804797924811180126154783110497902148043082659366781977209563715381227919869341778767396699280870862522931948944127530770998030252387371682413803951145767257140559728875692368709218878174221849437349204586631919443118989273373652595227172082496817103834248085354242741398581443429002334727240172368808661300231451115291328199507370065934925021969833175256299351306328641830228271353568846058387616229810955704081192557684947405779884509699286099118817298430699433547211009079482595408740285359093432367204533672009970779486719368138866188648840163573708869681067182080546042978337057745453023016747935779322389017812077413454635572131138070447390064042098690495563990815384766717508180920795876792077075958862404761890064984999921424416035664890724207484476976948663181789371914701106962448405463092701988465606503300165084244328789019795067098840871060483436479149382772059422903723115301669510704882112896208019251794996975248024340609600192493149267102552688418448337310468569703642800278151785183841360284358832347643596421881526596665057964053827050804071884062288727904628572069704994983452228398970557246268968220658737939309295962851885135390864007109076454907858176227575944339250250806424963701992166486681083315296440885760692193722152386434371762373410590481977858473872297435270131851901627945492845960665561756900237380050320337739114937222692715636345829089022971742750975497841816680681521790589482652539674743477542852811800520246939928822189145763731846324657221289024648931687399148099267044885671733352094184536756797510551247165871717923549062099764463998166198147288178913216151413981763321707683229249020148234875195737760846468403561985525050842464738232714775172951842741929209903518935372911660933298610653450385567441423081564273457132625038138122267839275539394488317379385537074050425412207154034127084217300615381424425706034294800775550428346687417563346954606915929811701307971860847947436154534973614176016275979962289620596506204146325423963174288918311054000291798070696992896378237251211848896156990492511653866861708727175129743629232669035317239800711664336916352757273273019680964663040723297535426909582937904934585625428123881208162294614263698939436684681006337738069910841585236458607359914206604759267241756962489475530594581950179263984531751086934103867126900494224276800810684669857022045988157595957258035294079410835500711458127756501041160821464860452114868285466846677033681168740753966890869829905162812697068968738906495545558280538657098494992456740410755232449109163731371774089491724693292280219243313432709883187604627083249554581032445654578001281629105731324709943235755260023344512209169158809774752301507192585314852433760106795543790072985084166023044553539415733291732895468679601579454025049341590670709620736' ) ; +test( macro , '94906266' , 5678 , '12032817648505424732206470115984402822087851800458754279636201919240648069545320866560153680915753098175361305527571944284392752569770663535206811189003646879509578656245380134150984700793677615365069140988087774074093292666569225253766058544069550347050527174441848464033769865947958339935711577356378541412264423970226396093645375936214905159261610350242858917417274825574404844112579056015150088968297195170716956710849024033030314901530321313136125969347224049980779583582657176881341711446052030096202772974538698445525008118596374161589518848084436336526803665941965555491104046737440894040963947109593967956480178145670129677453883803551841426177253469183865084475725595826142523985262137749463269279257798034486481726137836527313367452357290671314328438612857618515953366030368261430360540763695870271485039165724885752553866509861096959097856524796407276935782076995718449804132659747765788304047343356811406221119007276554404855974610764195529043031625022180466201811329438874115924370207854394962989072466937684755950839558855381231468598531110161791599549283779948049180898253978038930131391965203934491358832834904237088198978460478436435260346993291323788040533668759476466237387161215852475434944660862309069972151382884427559495414208822804115701913705271785723745174681820409251541457004542480297333724163305849231905385022165131472866706690289906743159860846280981424473469229829927326830076613963484251270728729574503814307791762786013555601416538606549575141032711025523511415888723638864251522238403514209615257991112949184147400897053839753457149809381976922528684839893079020417567683858076689900826568207181631852815210327645775199600779525983840187855012090137702437886138818889991865427565806357553975294746020041388619646758784835829444515981357443648673117967946792507459637166782407266051469231502300232276219189698940875042523547644156383005262958119279161427467899540186226164668917413440447866544343462167108862890696625841719457545138663417647004060269444482339780740345497612893664834632640370620127200676855405941531569747479245411572674091251818894475403815473239183886002466157193530057684670655605573446847521994094849382549641374712884009164471656571372198449910168561787316766669347248358805643837182081303781837240736436136105361562692457596834668246060064085754181237451898863990804515605190388337710712867999191679779786712129894970664010407413944105206949638872966539657011251994137558113271215952893544638320085154429394938826746648785358611940674926917169614084840845838330085461611673093497785528104711054917591387941532664903919365872012413967652428893771254783514729383993987904033719641464047625904368835612214247748109590039950324488045520862407963337473558506985216736383673379753911040520601562793518299011996503309262568208883619152964120357680502143243237914460301562979082299253093538389428819917042632652200784610277098397358002737455993489830854317722387980601693621640290144850488960430945867613445370736462277356198969776749170074469142959139228103077704779948067569593268552335250360809034517777505978089487420438155196173015195413707500749188879413696451279508390758428449841376760780035529721795084992757493136169128293321086137318909063123039058397266188325938039949845723539644433753473294540228295834513955127390193735537175144046212555694020714759166871608060391688382739009845903946202459806666413942788393631458788321174919289511304789355666166018710631603596670860213317167734166889129692249373293565808930204157031991011885528221419033566927244666672894213270515941662085431325595906230594776340409294990273749504264542573465334640502232608314606771517369952134843645398223542989247175132652279714716937433111501880963356885109815217790196450752957228567594353774344623557404477791808889243706743536894781675724627289947304719225770725660654839527433954061516841146022327990899330817724998757824990111295998009049097615922407581255190739491092231346117657541300062685972295196237757295575969914209258890395384934110805224837375196790993957760232726873726409663790983348867817606845992238136671232375378383442128153562558993510087405303974930371982970935436148399729480315961683220510601978266384119209049691241779665749455934311999233053059017638411476295376290561801091208176239186699145687486729178616233651626665713543619439901912710580944645778155158797462852234495229231406539206472287577297378192253982740258520802032184319738335496087808027150192808403729360390814153726899607792522414861087778808864723924610633595805110618744865362177310122714818412795648247881041310195803062313215902474261741174952685814591966714305480767184438698736320248721848847642234552533028696642298731293921638337742568224929679203340715151738759154672955264904729487192815222409704216298143439170015879950939045057249309073969228984931579994969781518397426907617306970452320824844550818387028299796381307177696815835155244322539561008715495766453539759717077193466845576102664991398263517768253493037683951482880594999592487164043876965317780003505760527667863680438637377024026769527929551980088550989890140816338761108689882533404008958689956441208348099517790655163832888672441196339023333523558262873440940381150551323449813051211874782355328615332116487157592812281631495362815861059878771091573384226171301604486063550985885547526084873950124641753676687247950243102682512625690242813329639053488889144642576604385864315139668920318181435129690631047099936094981891064896430786909547908075022480142180945007023530760518540471631799916726591085967028615767603414815858484391191419226449103172750734862583321173181611826808717155895467441107144481818474820145538915123191086233889850661674240080442220814781759930155904531817862470486365345886110364369758405347228549431644962312521692584793216958186300617894642831369657323204177058526995631057099851113254417633669886363824556236862260831309128178167803213227296932516696703169947834651505156750711821678584827987720266958112228898408860533624224495113943886752312598411859670081240718595741432294942764857421091909115884148224555916194806655809926642996956901825501253612530105826618755517164012710830281242388235631527379824843157390117320858596018324726028114634513731910537333745080425512204214923714850269287802358237211241477533384595700504349352943037853153152826576013563379638817785556868194091209215931133480115980056464675106593427706835334947158188177836411830984886508981465689899139213351717298512840062197481925426346012965958263308687858310254839246643736356288094423514700890181531946170936255870492888090106543963957053638462537602324269379083493214926494662001476819723144975153483394390016211234911521305578087159665053195506910683427552629512701423004114557334590767201287380253575889880716924180835742565545587297372230588277744954790269429956487792324583964844408254629753937326834163368789921452639360922619001644423905992054827955523551707437217080870067136099865977482032198335037959434533270675522876697240093272437334734369226923188059535469846991641709332683658104575190444624146274210567461025953960170291512193215781838523322046313242892959796365884825784776849648185822682474064256026698235271594627736075157465861135739641700807125348820678293047370189781363932882694927128285410177891393529704049003357809736578523395638279194743744900566551317265479571829718951144370147604490513174682721505873577926782362538993812368812010097486662549501136198241341798084746545706437440426878375892211248824662555732459007737499801554781654267879320262704068105933519284285796739713621966126525083860893611057628869197088116263187425689411609090653720984344418988835030010895382016374020344833711823116640310985731777663607552620413465337138339866989132413420055538428253299998808303388845963185188581487436300195905101117842154869015140378602684126069213877902049366627282585389279538334206573795995374258165195704570108297045710018639586996443344402990380550529595121860257242747783754028054652596757584727739810928998066179549536463070344995795834380103032675101592624345721957432323326573571256893898028138781425679040966486628547984753574864434930008117523845237304478890899718331660641419486842158394473459007167484277217322766481893195761391938895623708651566392702159311537448090535583956495076752757058074862172390454533499093851240951296540985779357629233421157703016528130291156343737642593244088633852787614747817627060006991669568592280723672383298225466281340956636710431940328427911743530915134552931031391690006021236672575108176444082447291342833803642309708607039528118937917030486917866538554824932145847913873347906410715580065154707297637925304057208331186121542705437629918199561558440077780020149125928636524680160377906904253706618745984744483286494859496634897033537125257750234158366566522768726012073504864415325607039305152748943100533772051166644314150037384337861942612593701611683871218292642963890517076695142661403572711320388033047007398654918216722136161411678662937623850123091604556006551841441589614125921909593939770390437476075298171895573919863135651088828848336011726492799841320111649935389358931258373693459145057553136475922751342605359538155293383583876955561910069358749936951011082089615693841896629336961254394974036986721026940350856347077152772939451280308399363104652576626172429793776211333913295809413213919318285255196490381055544205313396583888277769550637211217647203529389040683316967313521879297011278503165986866646581137787534538214235999303080897442666172258679022325039014548620740672684311806497429047056530576223713193356973396804439208879107248745042555605441287111013049709202762299259851107012441701468738419926890133556245430056477998293002461917643271629591853938120614647619772495115562085600504853146424640985096824494050598829781714618733157799877227971474455616632639023850925729720213591779252776369176312110497936405970870772189359848240927140061006848080799072830556306659756678997694657936924990345096410314626570672149731543628000558026533834459167842889970614149005288838811229513837405392153251553605330473659867312295620005340633564023904208178972115034037935254190823029327420408002622341072381223538257497215682930180996569122652703053739471871654162569414951520531206458862671624276235522538318964461432849995356820683233465138675410827490596964352422796420736525862662409202276892082905745273014755041772993819374747043291676296825571338645605019288235828607460219104472171905393978286058711994994075946946904501719626129891297785262794903831823520324741271326470009925340248044413698893160087471101115598827156017322849926448246890250940872800969912833939106037661646340854638183562189382226457787900923987531877913431946108694947652717492923066187775746930063437977519195800521298729848366280723108648799156318978065768015360592367479405252285966318000015191998608772683676758058031311468294723167697582272502760859874036909801930740974001192058591430098287098021570441654592505727247768282011756726844525801256651444301950079120380718219338329468008534442846077685713544194007524327955071955226200530986913459845314710510719058167265959825133876149104200332459364223361260375456263610906578083438476313348490161343553564484692187424842603773823747426008609267536178919597384345623591288999415207111940819590820240164261067200326676758012794725260339664703418163303398007586421287243859016657962176274532712513078145376826038329107151236318002243613099209970831731135481008172826345298961517973963163916705165676097591487481466079223465813873607872273761995059993093591322303896613664321628779241192911035846341115545622374501606127977756985292882117778296500478276339993749813331078686903702537331445966445686036256887898585809843950252338373839157713280364698259134024338989451358780140559424371687870519586950515334379886144076554360694721608275939343734737390935610438901882220547279311828445041103639111103188607674601360722196695674871077543938123944828376247570522481733445127428507577252676752726828669296273888040688955392452214259080886549295627930544496374040482414174429554699068859457610531632589984450033487991393950194379605142460240622750964605904319347162317103632880464489765441781176775360255307983114046972917021261575999747919513175356289269738252254493902081778863456041493700800804759871388208118144666431845192191907729537903174959385672176640184810677326710369561461912187493932368918706337698762794615949381684820435117964874003383886204354335841513328726838198927086809536254198720567097588143419818644573075112705490751622292191492544793418111741658483532767411666600528233897824313428372479855025933866719301492980684042893544902172403475761202059963960896638007212043160771550410552889811065116740233744236032304871579001993160935959555347073311004243774883544443676731406104831265297661674183379974269379741288515676564618943733469021389351199332674318818115012130962124777380484159115171369334822744164229342075923978372260068788894241149239047819830879098322853736363606047921128478685310683095184709943048770806054769494926160412480736093641419077309213991679052703634396648375610853612922041643781461899880570131047760466065993555093987696077930050904841973329976985820417577209060155514571722895551726144444596204596782453047002156424345570004197583274416101355362390738881463523630967387072211376360805282936674787380880650737793203297867993622101141663905879536696169691639238866186158654641243673999077254707876292273024963076334728546666159776798341058364962760500123648903436613222992540337677988477671022338118694216304682423334130149852860681684099263517683335157344038308938179479603858917811593200169277994326389000742115999246806304045702432487140508819529399245059884575934708946209516322574789907597746226957553035886293114377154459544505608389208459380956440963140789343305699658278203986551812398932069405456026560759534279324948812804513062587167345623977971097453549344764469259507711376402428457076157055436430677764738886674081844106383742912023140510418552281742188746389236111863491148474361612517064934024896521322519834851151242772104556306598929440002152036519490819251376805450957184749544824693635603569605225972053841581004501584100912328333976003102107491085953159226069012834587327259971112025925123819947881840747175767809667062611411996051112013271091350150777864798314871955256044949338844757948457477116889094191094382540558054779516264683712607043026838398910328428087833751980730006443119069122334166099941402646601365567136347123203738359088947443981087204456279328714404539183793412240994826870342095392017313400572110318532747843060607288706258394994682842520556381575601014199010490404397191138445152855809707016425452959778664359588040560748735412597512323836013768239677434435239189168997928071347187463000837985697466045497488955639372562589230908251673255473804486520327695043897071532175037437036938183448706068445520270184271860267785443607757449987645862550853844492488331774133732177529596230056374085739368318799336491781716721031643253122590074871792724944404133795117394685504903169776472613579323786988436816555044871147023821295375315968422237070919604915553260798754019817204005435917338028778866898767783201988249690480208167510788846166868446591501548151404396048081597044050075742974387127512894683131544017091983972922897201447567071326201918658162425054687848305577141613831948331736546313547366384763806330342036329442085133559102820443474867650075586800703988545083847887658720938137520387462853564941611748541059186958982227681935894334481608643024722381659381938989731023292291485815605912701175709672139292877678190348729760666157907954715630362098750256936461038759071141133514628511273752727853532279858408268908582987443368819679334383388270166337798654040644855690261540077459818835228437887729301076041005381936867843411337332815350029407543350462675437781165812720616995958519407473614668214152449569347793047763581660230557418465248972034336442550080954052153006780131714480535397523095413274750723701383225842109411649460720870423187520888470553057940395347526767669497718524603967849112705432812547718499111843247323011841160686418751692868907882025078560674843768816179401584803887200747810776387544791913903025938435744852431951915576190055048231754367790804864233775987695188801541755557892125771674773775596365864929152862381755401283073853655055425091448611697016439954534260814030388938640509188143381711317813476900790628429257746511202468312957230036100116864480097621669013542313504580498125607583068356957065062879843861421422680449125994612477774818757161945326684776971564527300842862017927612360118968033138171953084120164381524148059624459163118084096733232992442581634862069037490046169948238393108530288105627559374357574375901411757444196980563141505220137571144388964279304678461638650126063683382309278978344376529180243251205221507357892280444330744741037298325319700933898637890602101615296398869580920345296280236271953557041411865760773333961802153204654733800918538855539998075391359632003872695291240543210415227135533202642183404859216781849310678370931836038236340074191979283348256435037626347573331738056630737544630627819667754832890022502410501605907042038148659166291897056811128443400490554763520515617080334010077029504407741614050704547796928760915765587321003086708428633478958994497231881728742148146582878333513294577932133195398397292515911616512890368305984393578729868207205694140862127741104528308067361504231110165275192585475375358000676577709244330704876174208560189889742189118009170492691256513264181013828227165086680711420434651576133518693155463307951273683890278139573807332751907304778544307753690835516724244324828301915566152584064392368154012296367388561296655115159377964858217285140994654349136595083503371058992673764518566714682145847493882822893394347204092233214651141128348419317600574953305420152824611858556704207679618775670228729011916634895546083736101005758230326310636673429185051800939052184453293132762586281584909086427718838454160054742974280328396661361347295963302563629881389597757395692922460506227719569272480843843963982294218088153904303273847479651330200041676283719440322315419856051041525940239722748989045813626337663435654703148317669134876847555469792411025033420364193061667681444556983341506990373187827551963387220108573965968914968862001608003924039023517819236072227063268657970009813282109838740945014605897718935027854417422516891716032864362714644753952562246051636958846719430334197522545309124095753712501839140881772202359462149006967535743381987382494199903798783450128864108137711379338678990406261945617986484478017729513417966059143295468448727905734551655932034516014732958476725736677666360745474765405553207731525120976743153206626090160055202221435671053558239271799027644260676893678561236876461169942483963790905593236778663204622182700607533615177816293194243328323059827764195754067310463910960166786833097658112569805863287752396504825639025116157475645847961748673868648985763576921316360028625597643145982378614155913337308072899028630354506317000731973048320498440559655009741229059616821075679153626408071146949434874870710442443607598092254881233946034011674932649197951588391079113646195367873645750872572676353074784800670128148448926212428049339412055475920927927064266795956572600200498190491828386978461485683642086665791764122916337004769909968407222832293743026188332895081447303907350456907104380292438133354568556580913923940135089837451503139566900151184776483065461722434703576835856162451903500950263460660059609102492532142956330352718793762144273337958725209863219465403332730360337994136681320539676141959170028609571573318264331511603324410628374361114137620410932826988141316635961417071437490827691742173260234374302730791524687955576187003866752766949337018264318503626167264228405496153334243531140332510516296899883807675047755079172377866058979779109219361302539854229267521185113459426964212674944243036359083834041693510700598946606285775592307909800370642066904336886030146957671455743670251078744477019985475848795376334708946576839355982663342271782974876971670099428998708971102417217050194310201496909274080129838572650933663158961486164318754012103629249337765151672364719569977796470263610483643241743081238512099346318125509126340730907301902331865609410500322101548902016145028474991172896518663299753954359738145858524256241079822888388025974877315851174825234099588922307983039849059328140405070220292462966857742931975247086268060742036088901447914159791901545682768198127862624633726084182944519076169341611788879344467332624457235181005489161468437468286277927595231710889035229963620976542808014437720825245958218422545401854965717001947936025069441351490369482405131546123008735270958799806732505582384557603513044063735545265173441077422655347016647100822557881227410017918031724818941284851218632476074548990913121757687254853114905647152161232816453294063938585231011698346476850219902049515565302989770984364797494877746871059691242951446947928616748412677311316689309276924328166978373287156127637754250091827262880001580912029087294416597708081303921574616792751138598416609282955474549781919323050366795607116559122995449444513824012921931191554790229338378408917767888764757481247942357523387981462036482918774775255481502617812032424350337757705134963581392988233010269239543026399000590407670292541798141931143957825519431024943808265104606375893000801021372156629170649936482063505577146268662962099488092098200661611049654157290575516049458547343584333829118330105341165469101287828518455011376471874002702126745604311883893741228949110274354393717306210252780458508823091743222111041747254441747473986354767554852139796930960587571954051842952106734815850369832317500044882713313649500485928442503705962330735475241650188479077738536979346401179945139932535355966728284296269303465382689387382904506131090629101374506641285879526447951961592499074899803465202603048622508966269246410248303951769201230670090880245754249900954768059240928580835677018471478117764727507460788000454066509256352049419001433619066501137325877958902450951248012775946853069206507022910965027828695344876662390444745223071764327986092164128821369419529923449745342622529520337107152499452702345241141322434371161845076945400253720116974932841155231559246404477495415318558856170762805541331599037682445748096007207307457259420504514213233031560297159337458934773052943897370160719593071005636639052337398910516328917458761997763791052147675868492052732846056244343846856562859110918170514850638431897116103962577287557650861624128410941073015672545799355272188821573142146157647220592136501403389440498405045979220449287529240951068425759059315541517416653195735778257997109940532355650068087437125593263015404801959966170854247359416368888999714143993665160871834991848566207054598521044690133585142761653289736942697455812090483602711809497731994035628689666322904923368824343322943897077533662696509093532125560433883239720615037830617553062569400982442551469212711958432874003095252511501251544368163946986793533762477996739664587856894977815882349958159300266076187992625866248371863178211081986479246265805496439281433789465210502472287353963749371542009248496304898171325225431490404443696275192260731587223678231773234700501786989060062073372663103468326762818735022839079304658268264383403675611385203208802610883443153396372155598085767531581987651375303196560138048749012301078065330371665264754684135929975327450958445710569685713002470385735812499009271125281912305498904570924803427650562790575789311044993863517834700777416970146268592915939173835339588498234255520467622101245918125290891960721252962341466913538814589814214723753781664749478425706364352461070224233708179564135246880492730639677674623872309076224196922090720446752424962016499908060928640446088590198190025780328393379622363600793252241003767266825105789787022775751765687273282872681784817235974474959304500106923652827770175776376057866784637584218919587715646859185759124581929407837290204615476399831255232642772149604749965883742550558896424909600890318701200878005426405783690223803023797534308676408970377177829432708888482899871770661919987560426133634342816194791652942901002649991930864509397547495136799464971411961885951448364705084776854218557154068032421447791593957493800552595011736497560627402048363722641737191562791467192752850831819871126942696603819688457632571061264341307436496659871052442884327358088521230434779757325515620881755317489614893979565115465466459134952019342787508889329177160466567164607203135727175727007576133217386625201585733132524102256267135974095667268967387808616588507490403645684015340306735062054190431238197422650374750608082120129477961774411707229963815811485877200700501734026677170462507781454324736384494629139100648590234634063450890873793218123159652262636940460561659812567660405111805037271771919133677053378340571763804818663579984080144826950600742568620996921074204543790255158895558727569627833033922369940173618424508834111810651656048535574444567986963711635689671493979686086392051590735412326987468072321026945906095052728783747681972245983868013037928884763904299129826301670561248217272709934758302637217436483609049259979017913572017677999917451517664593806401100830094206113930664869181230286977905241453163705128560161844356057897016629444587321825339889932073812247330853655199279654850681643123911145550445824784071197446536929226480929787125781620877835455757799725872429412183788180777229189273296533362017032457858813870135280647619436731981832381160911893129851064121020987511004669726225726728447523886592540185823062928562680797115677436491664945960425463840352618701257065715147975721913145513121975941816861627415802916250662475683313221460810083733560259082176304656979800876036280685013224264755601477814078188584904150365677219720532288211268983178369847544314641858955739505549156547927819249161988086454580912459896288180831839198694747159727783540431533139780840118503526092188395999937083438859471424422484895173339353662013418404633914278270531257635152842306416202901968927515006838776193126399890861893238570955140721902636602451481280533397113331997181668368168114113211417441091536660280740752073688197951869383500740801485250371189839664555255637862300294894725338807388545090253060968823072953675487974449697590292547112002691372243223615249165249747041660867764509155511159477802075808850762651193636610867311554992969899613510446151689019965900866044828778159525923906714414752885574464308524982926278589922516043567064422228451889411464404645562403027336145425521604775172340420217961207569279554941274837915390099345785110541869546066004279176509714969623554456015482986407451412652305793262123648552417609567710229212341687156454311883528279150390985919008321641915631234630542109381453293097771127251164835846456017032621220535159510911806712579812990017904201396748639648986580416830392353504059649048195263808560060144490097812861709892171321718078141652344634889987253449435365479232110959791057112787715767591956424199236727218939549730947807636035618617124214592974632640888278642920646150269913678711900700105591753932021927544248495416598915245127805617973028286807341594473386206410511414428389049099794186454102765796914905933255458663787331998410234134210186357410895835541247415216366309533445597853759036910747535179357644751896549954802762133472758890605527381638477541022802894735646799360073180253868675653146890507692412609328780793399715860489456638327779713788516054313521050756108383748787190630773384260645245277015038626404267544599526329137987727604904731562738505220497843816310101861170621100872755427778464809073169584368881349788891479628643600529445515580370114613383736664314978973619136220173478287784163951945648158666739841536848953175419910538486514713806203315648665785618237610350582300314779025897090284284080969250933457877228872443367222249154142248644276474288044127432827952859178595732895202190015471726020796066245204963376906354394976290239211712022794927835141158864526574570946923047666699485949903120984263356978168759479817623935013795014196775910220111958690782426346191285770042525098984695899814199136259926824361465285823048578317155487790775485313929046655222874042698387928987865423117119839944817973165334672655644240394784576751152259628370824434663024024418575011518490382064521827913667162089667112747753535124207783675418967511974700275667309012046788487060329223754816307592779170924531501164340119876000139327544408024106973184674625473383812276564724893335841539005571654820183265759775079589751747626589104877587523415006319142401438844584683685256184472651725051979384269512266601971450685653366718533020065953355981712508860345534161752796241189385496331101145400268056092980486470369444513019881534614061799341395392897417347975110433595794498856720510672308772750213294104276272132667497463492787282710357371813082428478468377819129538727211815622333666816660354583565438907819881292081303387043386670876926764469958036489231885191131050114302131977936474847279924851923137714263077854243985023606988127523596289821331500111059950584764623037107983656960989438380956968393260575271072778863957365450795572899629582643385628639710611546711708409238271955614736601631291370395060012833231421354443797341554577170376506036564132217557077652411894117329603768900109332749511859736210742285027560130448468034446432758727729638990040491574996250063104797738677059556962784396811723371443252662772605997510646452758982125426031044458649357552995121303204693338942472794723310009789920455359278131277695870668310315876389946031424494549763773146136063430889417701887448847015328003015451499112860909942403248329916941358489871131665319203260702546158995642204910162911659670018116940727018797217171686323023556118323193198342370803796953278053782977187454671829418430921721985095232819212480102940486000736338657164939674716847410850866338919788038362565117722358348690989096737227059283378387520150072310475969531030512284930329368248541131113766926569221020923296593566377299675247629189109056398144800021591742635347744703956072123890797151089046108298526010507197557242777201909634714422471270603537857950184437259093361956113283048564569574122170292703201825073022983566835511332308338851334507372273081202885655714787807833951944184851958437229989794757451452736941245634812065844048175235449024407397606058411010621436622691612507865446029785762584964939590202876090478392978007566584355372687291804000734909051848660440791202433127588453190203200783903284912792280548420676834695155901857566765932088926634171356382407121102180333281700812579308596278561884268236429082157465746397088329202574170766452511505505609003041124950089258440827042552762430618486885201276510552341532342351164734524285396714462005001978788690975960312082731929333386050252112006807345880064713266643891024391700346350471880262858040712474770262634884317585612572195523131314179386278947285577465324615711086122333531902738278585784646020600313701514942125391959071309667102965885213697839889156290939743771636780743647494786980566347580750783699119643179162204062000548787439490012304199473697303589997900840621652874808426421326071990248127528436949608115779005494179734937511431781806145857785045035166485825750634750296960306410410179563289780730826789234509202931820390586826950654104129396809093876099264731036820798174964438055115624044199738101662825807851197445426685021856220844261848759266200674656511060029362486031624820819678918152181355926111923461166345822665086176145950743789341584980812952752231860843257985965288802261190266665922655937859396637134691957840093532444525473306658768602008060074798781369928554199058085681741549030727173827517234927484381244144270371887360574934364399214113609316363985218988683805111173090608023338304021000410004993333783004263450282560060958459050745590194592895933947062092079507573081523402757767724788144449830636192589330164576778830549052766661774876685632674136307814153444590770266999239828355457576813955421195065159397418434372715876860476997930972151568408519046320497117726447903332629934498123201460718775034315147902361476205883702162559670339483592737874161365824447049081019047867077729938161516575462820068029800463721563526770860295002450363435919771658499908957051051713169210155056685711478948292601652283703664279729412723327993385676972068945177529247890734902739568992396004082005895239640239584914895675194441732990455908284962508388272481664809644013695108530643590237328537639688567194704667459259852194847009346130261141412179411299994375826249494565666674099752312940749960678432841327379608811354294970105991967067932527833097758928415762643944723789054971807292766811411062804902336531718448905647640615296706335520835436041593386648611858094071235308269292644418143791110200993361422914793119640919331990182443330345380585754214640238824260774995215366915341497235208474057031765422776345411042327893101949992571577825558691897895422945443680380208657578495349595586606235401227143323363094432958840171215550050203924175856785197077586124718868813101246599573589030798669834807255201536300814627715056943239448585159116823195136012406495891984611338805585159868346247052637564031114665756371321951326231045738075829116360629934323624216434728253094934162532761445177538547165024471725562255682921126585840210275028026032072889156454737530566706272562834758199753126146886585122828302440171763025247744940890748240827209734322451822354861070551316853275578081420600654807730862579379336164296300651251035620903073641444759072951433003329108395228654468968443998724991943750648399825412774577834064138787246298154005871653201690041161564805619094094950177728315165333892502449398614595846310753261175601850635807705775203998921942871973931019055845469784764447913903988508253744480825540367906677867871057567478493188656741810436755808948879038430592843598118575241573451984420451874438273802788249941071249303464372879792957737080283657705694830680260355087766018017548240826889393233567613079361639516134438559058561470248595710630583243521624876087878849326799727058325744525127686358697175227126042729704763198212221500110961927927031953451726345983879650304506115735253749823992717894744913635383053788207368902228723257035589214660773099731574328578894614609958412257841707173544840654053687963529161718339377820673974804275660397594495763320761934541624154607081082091431381630887662852444276208094195753892541482888964133078632756060019952316521890141964819830541862502886279942861929515434864567266354539499955976735355894393495991004445955069390234829281284926336527704287398385545271066278910515123558177655155124804872688188708038652699563430158718539676417362165324740950301161676147226987091336686975730078772316774484804082212792921345388911884307584665906933970070288913666161767306556816492529686126542330576930427952309859851945687695616787391724886208606078219586577521157997471925755521830252778574776276558662045076936010197431001405073169538271205697390441457933908374685337544753066892359751986805458682161120599250577029450471790531116688637592044725816809350715401468061886209608998308808761053155925047485763330982810135796784437153235684378855933935608225979566539014908874229318867856908106633416008188397781368955225608754496472366002973989622781331076327936906421333836156329940767987829949219414282739937552368742050095369670510834581278968845142676270307586970560344050293627832921967047772968940770231187440894414891611957992234348384361908134992564366682665696510978419367665490400052255968546785818638881481409824051219338973454619317589006191281840488521392932267525779747925510077945960279398495734167739330399574628957203655424637187995438121309889157318399563297897718347938915006476879059728332276590034174776666804805807585137415933903539371546508657211772037063013142093943376911484717585548985036753668986990778732349370860695937442389869679255309585195314500199898018163496806602205369815418049524140539038443752983715573321216713716303309876573223472073494658660387196143966238355254434272031875166654429112534708035265585042313178039140504966786200157779032253018379775395031624177802409362800776274088937204606438009792960229334141357316853027529326270934813060617513040349194939506111829667596679721724554842338458197057324866302813949134291966549465895240393949176765935059682165276533388253260395177273452448414734481084363051946017495590145528378728694589718770632641502417259843086559611204202453814610339462803726715365311373975645333786896813006476033470456391277472796397664318741782445580539265623629643719879907041630801149589490342214249683643075413638713825740975202255710524519005628410890292248754754939152754157107953000785347651731062707781298031248059008088083511571893341447743035315052308357772390705357815401965655229378522974863831081531326498095411458206016343526704502197334552693425313951442693600699979416793419044571047950054591933973470783926474430571876070606494546076496652235432486913277445868254001418092467524424087719936981330245844189018050669626927477561635971967675947936667840573264315222817706208841363096504161459299455789615473844664822043191643886065072888244114235145369904453860898233956764637008735231406874585372559803108174040402975992668970470323458706663340829004120177247777909390407650943557103557176164798280730176947885600023350422406684015217003439639897364954618944020288720946937413542886098604075227026482788702174057857719036625711012261058982176805769679934893705049041439972935657555686872759565537429136163222780629831139827737682328273538007173604361766686339194080863757502388242360541635097206494291599132259373964992477759699130503679859467387685858969458881363954404384016848950761974795313353392698993567078740170008504367063192312102584020548165945222524105239691877251826775214235888083623030633684703867930130650125295968428623742677462191715457239299389032287069336032372302828098382506936703358757555827103340491155787211743066715263418577384309801993728612813203556766993754656540038816495840381520797028440484282254884632112821925210033546824602794396854826423202843726689970480869195071650949154727258460224485143154709172855637969394753939537534842454461823870448127360033316087549390339491932603424096663377705656553981384251344651715053403923964417851970419752086799349480032265992581424000705801737101791445964258963875786190924396690033057790178748531407381054411659092462411237526877645210411022521678216396060020924621034172725054413396654304600511543838181495559908429007654906632941883397253075597857634654462449755501594356663254192887988476758127961551318345779438588059118960711018114915926214069348039421926460721297822408069255012690250178221901583499188663372994201653644081755046119923887957198992066054340294114974546071159657605660183300202102344309467802093991861862965216891368515339833603657760186751215707978850910662690444513903724718434232835066662847876807387275374320546636913075891542321272611108399646743762333862252602882930547232324311990485665318593042026396489306780598510984447945017700408320977028919172057048382181924135570226760960898139417290817645998917756855185172967724992933123052909118247462398492666928951967247431522756106437050491531797002473836449419068540277472068963138393177448233961148030322348372301545504016732072510497336139578845609651207819365400056853303027235062359420018098760449076899084941741369357339039371012080828320780934162749276755522409809098153174862234168142466848375913203535996417859932173938627851656219636450621416451865792169471928789091851626456347026830292184338577370915000158169528450080894744186642838772985819834529563611933373632440708524703027899883434677586606441445529530405836184308602571764765354456106254643446906140012957381572512463660138820345199166078432074790037248546139205726353557158090656959024185745345956546890947422882539337183883406929169297400044137877815260349485959875657881972792337911693367611917919131915027920557706737769810315715359926487713855353321793871564010753738106086321230546595044476485010200470235649943642098272637082343166210803794993910337605136239806876905139720151979070575500255076889855737572108112919425325518445248006933632368025157148533351689787936121880720836116653840743617415571493745387797691042574418704937861768435997110148267844022966899508273305125680545431462825242960113760480968529000760808009707472576440561766071700939806743526995640583592236944120793230124851216017592161718568695361629331621064836815339177400421921220156618102527651553489597482005681543009594232948075392858721451225712296026349598054076571694498983982619415761813379326410749885515537518666751789095081260226732887008501369033072022423311241991556050372244766164397155244356247926874588767338935163683327933554702277547935287703755133035368418595728953591127644725043878325718984441974471692217612825126396314128770579712175562666092567978624210753782825275802681456221191328149519567354816438303073809218496633499815268520022429717046018825658842467015385712669468265707555696525948903227914864246346468870618605734062682911322413808861525616756567945364657325139882917475692209277183304968538734947428728388582797185751925085125363729075173796643775804671009928949220293268670456975658752584332903400349503949011586021175082326448210272758388252815782194585442203117090992668634959462750022443452546012055002758055127454792702255890205631701275211122693794920290417833369691631162589900706279105985583858392017695508708913053733434385675958920310284847781339811291863191093386084475914087239356382800972352347223372355619360570354411451544244307940032823148529609638296958288902010391872278763245256372127500248817419151015466871343223054572424151488837160849087690844793830186151432135847711240614541446439183938044066695316622116741046472939622004638961665608819717101930135624767270181741989733125492003140924411241153224900070754907516184957543551611208022204023968376636880451822691297708293688894074998217185540931850449663735709971989960908519813174658217406440733137654410084264390199313344416298280201059159586221741529060546858446825609039282323617534880583845852642034407748295813317970457691956263225675641685811512670217066518907796204233575773817564814095574905621916350619556603859001230105241016047652273704404479564336649968708539745125105915160022240368627482259079202336430778070946622175011973214230565495684814465576107906033710595350568611341645767396110859401880245617579689883266256409894693280104365291970684730005887925438391662019569596571533373614115187189312356643389006800187024689032302797342271128282171799878713212117329036060371547786892810406560993783700207922558468011335587906261901093629494719347614610784908347727972664981060886160896302867201510015108566161825129634975425024272081557002265941815391290337945136518047397974376034831138219062938133831604578871761305972624279786410979461568839594456833208172319195856872204542603316087926558321489377543723491132201816700479397540948217989075370768230671731249702531673564543406062253586483721876364885815656468440728188332621030006260484399864535626813077449518708844252479808421884652431126530875716970356579193081754594545979226680522690302736699184607929615623142663354132052863597405323796639870431453066308061197943832308479553993128427148101202879692518240366933913835269757022542403389041102563931777385856395150760422381552306943437155154770876052232484595793376372779715779096638669304485249549423986081793893310670696881891161170144901546778001550049111602186286345163199534989815372560517348564641269606632792272652115204168983118001639477232503487517975266466538605885310375386323449185231709798124778365598533541593980958124433491037239259424061787818955206789639301137224039378855362946151869759563140264720906997750013611877360612394880182302599632772460731913224265247765843851870907483675299829361720529022209380906861000458689821676603902075564791012594713699959332168445898305343858211764958004751287406251595999467293204674470870715167851421656776355939143657993736347249925156645471605043233097281630642396809038021750687833536173404097614118680059037340312341605883455235067338752800787033133391707487966849528493075647320868840934380554883195960251773502083727624240339456212211925683490737454112277877641954542607470029658579411795883383494012636284071606370192505278671353911009904407560251382987723241502706898676119014622076654875776162540892477299357715761700750960446391506332058899436675190871956939800022687432780180818392178709073123353331373011315965680280896735755650091675680722007667153708728485188186965653450591919415129897772500704531083484204256009802043625565542287774299566636078316295125113411325583706020566573294986977164698547137703200443022008505653377365378947288543862725055911788727943036314460020086504429170778872386381956215475209306444914466262735267509651875004139279370893320240127688827675054296294093093354920744403327434214120799757340314496705538078219995180518082515428583740839433883842984823268317117814453641785347046845620463915826027190815790559731433923858312882529042132987246860789417898096245935117545754705002593969747758470845487352156660639391962457416095124403612942059946284579486042861317902103275464677157584106545775551518446983441064825708631574744541847215534147110002165755331087323942894411304556036096' ) ; +test( macro , '-94906266' , 5678 , '12032817648505424732206470115984402822087851800458754279636201919240648069545320866560153680915753098175361305527571944284392752569770663535206811189003646879509578656245380134150984700793677615365069140988087774074093292666569225253766058544069550347050527174441848464033769865947958339935711577356378541412264423970226396093645375936214905159261610350242858917417274825574404844112579056015150088968297195170716956710849024033030314901530321313136125969347224049980779583582657176881341711446052030096202772974538698445525008118596374161589518848084436336526803665941965555491104046737440894040963947109593967956480178145670129677453883803551841426177253469183865084475725595826142523985262137749463269279257798034486481726137836527313367452357290671314328438612857618515953366030368261430360540763695870271485039165724885752553866509861096959097856524796407276935782076995718449804132659747765788304047343356811406221119007276554404855974610764195529043031625022180466201811329438874115924370207854394962989072466937684755950839558855381231468598531110161791599549283779948049180898253978038930131391965203934491358832834904237088198978460478436435260346993291323788040533668759476466237387161215852475434944660862309069972151382884427559495414208822804115701913705271785723745174681820409251541457004542480297333724163305849231905385022165131472866706690289906743159860846280981424473469229829927326830076613963484251270728729574503814307791762786013555601416538606549575141032711025523511415888723638864251522238403514209615257991112949184147400897053839753457149809381976922528684839893079020417567683858076689900826568207181631852815210327645775199600779525983840187855012090137702437886138818889991865427565806357553975294746020041388619646758784835829444515981357443648673117967946792507459637166782407266051469231502300232276219189698940875042523547644156383005262958119279161427467899540186226164668917413440447866544343462167108862890696625841719457545138663417647004060269444482339780740345497612893664834632640370620127200676855405941531569747479245411572674091251818894475403815473239183886002466157193530057684670655605573446847521994094849382549641374712884009164471656571372198449910168561787316766669347248358805643837182081303781837240736436136105361562692457596834668246060064085754181237451898863990804515605190388337710712867999191679779786712129894970664010407413944105206949638872966539657011251994137558113271215952893544638320085154429394938826746648785358611940674926917169614084840845838330085461611673093497785528104711054917591387941532664903919365872012413967652428893771254783514729383993987904033719641464047625904368835612214247748109590039950324488045520862407963337473558506985216736383673379753911040520601562793518299011996503309262568208883619152964120357680502143243237914460301562979082299253093538389428819917042632652200784610277098397358002737455993489830854317722387980601693621640290144850488960430945867613445370736462277356198969776749170074469142959139228103077704779948067569593268552335250360809034517777505978089487420438155196173015195413707500749188879413696451279508390758428449841376760780035529721795084992757493136169128293321086137318909063123039058397266188325938039949845723539644433753473294540228295834513955127390193735537175144046212555694020714759166871608060391688382739009845903946202459806666413942788393631458788321174919289511304789355666166018710631603596670860213317167734166889129692249373293565808930204157031991011885528221419033566927244666672894213270515941662085431325595906230594776340409294990273749504264542573465334640502232608314606771517369952134843645398223542989247175132652279714716937433111501880963356885109815217790196450752957228567594353774344623557404477791808889243706743536894781675724627289947304719225770725660654839527433954061516841146022327990899330817724998757824990111295998009049097615922407581255190739491092231346117657541300062685972295196237757295575969914209258890395384934110805224837375196790993957760232726873726409663790983348867817606845992238136671232375378383442128153562558993510087405303974930371982970935436148399729480315961683220510601978266384119209049691241779665749455934311999233053059017638411476295376290561801091208176239186699145687486729178616233651626665713543619439901912710580944645778155158797462852234495229231406539206472287577297378192253982740258520802032184319738335496087808027150192808403729360390814153726899607792522414861087778808864723924610633595805110618744865362177310122714818412795648247881041310195803062313215902474261741174952685814591966714305480767184438698736320248721848847642234552533028696642298731293921638337742568224929679203340715151738759154672955264904729487192815222409704216298143439170015879950939045057249309073969228984931579994969781518397426907617306970452320824844550818387028299796381307177696815835155244322539561008715495766453539759717077193466845576102664991398263517768253493037683951482880594999592487164043876965317780003505760527667863680438637377024026769527929551980088550989890140816338761108689882533404008958689956441208348099517790655163832888672441196339023333523558262873440940381150551323449813051211874782355328615332116487157592812281631495362815861059878771091573384226171301604486063550985885547526084873950124641753676687247950243102682512625690242813329639053488889144642576604385864315139668920318181435129690631047099936094981891064896430786909547908075022480142180945007023530760518540471631799916726591085967028615767603414815858484391191419226449103172750734862583321173181611826808717155895467441107144481818474820145538915123191086233889850661674240080442220814781759930155904531817862470486365345886110364369758405347228549431644962312521692584793216958186300617894642831369657323204177058526995631057099851113254417633669886363824556236862260831309128178167803213227296932516696703169947834651505156750711821678584827987720266958112228898408860533624224495113943886752312598411859670081240718595741432294942764857421091909115884148224555916194806655809926642996956901825501253612530105826618755517164012710830281242388235631527379824843157390117320858596018324726028114634513731910537333745080425512204214923714850269287802358237211241477533384595700504349352943037853153152826576013563379638817785556868194091209215931133480115980056464675106593427706835334947158188177836411830984886508981465689899139213351717298512840062197481925426346012965958263308687858310254839246643736356288094423514700890181531946170936255870492888090106543963957053638462537602324269379083493214926494662001476819723144975153483394390016211234911521305578087159665053195506910683427552629512701423004114557334590767201287380253575889880716924180835742565545587297372230588277744954790269429956487792324583964844408254629753937326834163368789921452639360922619001644423905992054827955523551707437217080870067136099865977482032198335037959434533270675522876697240093272437334734369226923188059535469846991641709332683658104575190444624146274210567461025953960170291512193215781838523322046313242892959796365884825784776849648185822682474064256026698235271594627736075157465861135739641700807125348820678293047370189781363932882694927128285410177891393529704049003357809736578523395638279194743744900566551317265479571829718951144370147604490513174682721505873577926782362538993812368812010097486662549501136198241341798084746545706437440426878375892211248824662555732459007737499801554781654267879320262704068105933519284285796739713621966126525083860893611057628869197088116263187425689411609090653720984344418988835030010895382016374020344833711823116640310985731777663607552620413465337138339866989132413420055538428253299998808303388845963185188581487436300195905101117842154869015140378602684126069213877902049366627282585389279538334206573795995374258165195704570108297045710018639586996443344402990380550529595121860257242747783754028054652596757584727739810928998066179549536463070344995795834380103032675101592624345721957432323326573571256893898028138781425679040966486628547984753574864434930008117523845237304478890899718331660641419486842158394473459007167484277217322766481893195761391938895623708651566392702159311537448090535583956495076752757058074862172390454533499093851240951296540985779357629233421157703016528130291156343737642593244088633852787614747817627060006991669568592280723672383298225466281340956636710431940328427911743530915134552931031391690006021236672575108176444082447291342833803642309708607039528118937917030486917866538554824932145847913873347906410715580065154707297637925304057208331186121542705437629918199561558440077780020149125928636524680160377906904253706618745984744483286494859496634897033537125257750234158366566522768726012073504864415325607039305152748943100533772051166644314150037384337861942612593701611683871218292642963890517076695142661403572711320388033047007398654918216722136161411678662937623850123091604556006551841441589614125921909593939770390437476075298171895573919863135651088828848336011726492799841320111649935389358931258373693459145057553136475922751342605359538155293383583876955561910069358749936951011082089615693841896629336961254394974036986721026940350856347077152772939451280308399363104652576626172429793776211333913295809413213919318285255196490381055544205313396583888277769550637211217647203529389040683316967313521879297011278503165986866646581137787534538214235999303080897442666172258679022325039014548620740672684311806497429047056530576223713193356973396804439208879107248745042555605441287111013049709202762299259851107012441701468738419926890133556245430056477998293002461917643271629591853938120614647619772495115562085600504853146424640985096824494050598829781714618733157799877227971474455616632639023850925729720213591779252776369176312110497936405970870772189359848240927140061006848080799072830556306659756678997694657936924990345096410314626570672149731543628000558026533834459167842889970614149005288838811229513837405392153251553605330473659867312295620005340633564023904208178972115034037935254190823029327420408002622341072381223538257497215682930180996569122652703053739471871654162569414951520531206458862671624276235522538318964461432849995356820683233465138675410827490596964352422796420736525862662409202276892082905745273014755041772993819374747043291676296825571338645605019288235828607460219104472171905393978286058711994994075946946904501719626129891297785262794903831823520324741271326470009925340248044413698893160087471101115598827156017322849926448246890250940872800969912833939106037661646340854638183562189382226457787900923987531877913431946108694947652717492923066187775746930063437977519195800521298729848366280723108648799156318978065768015360592367479405252285966318000015191998608772683676758058031311468294723167697582272502760859874036909801930740974001192058591430098287098021570441654592505727247768282011756726844525801256651444301950079120380718219338329468008534442846077685713544194007524327955071955226200530986913459845314710510719058167265959825133876149104200332459364223361260375456263610906578083438476313348490161343553564484692187424842603773823747426008609267536178919597384345623591288999415207111940819590820240164261067200326676758012794725260339664703418163303398007586421287243859016657962176274532712513078145376826038329107151236318002243613099209970831731135481008172826345298961517973963163916705165676097591487481466079223465813873607872273761995059993093591322303896613664321628779241192911035846341115545622374501606127977756985292882117778296500478276339993749813331078686903702537331445966445686036256887898585809843950252338373839157713280364698259134024338989451358780140559424371687870519586950515334379886144076554360694721608275939343734737390935610438901882220547279311828445041103639111103188607674601360722196695674871077543938123944828376247570522481733445127428507577252676752726828669296273888040688955392452214259080886549295627930544496374040482414174429554699068859457610531632589984450033487991393950194379605142460240622750964605904319347162317103632880464489765441781176775360255307983114046972917021261575999747919513175356289269738252254493902081778863456041493700800804759871388208118144666431845192191907729537903174959385672176640184810677326710369561461912187493932368918706337698762794615949381684820435117964874003383886204354335841513328726838198927086809536254198720567097588143419818644573075112705490751622292191492544793418111741658483532767411666600528233897824313428372479855025933866719301492980684042893544902172403475761202059963960896638007212043160771550410552889811065116740233744236032304871579001993160935959555347073311004243774883544443676731406104831265297661674183379974269379741288515676564618943733469021389351199332674318818115012130962124777380484159115171369334822744164229342075923978372260068788894241149239047819830879098322853736363606047921128478685310683095184709943048770806054769494926160412480736093641419077309213991679052703634396648375610853612922041643781461899880570131047760466065993555093987696077930050904841973329976985820417577209060155514571722895551726144444596204596782453047002156424345570004197583274416101355362390738881463523630967387072211376360805282936674787380880650737793203297867993622101141663905879536696169691639238866186158654641243673999077254707876292273024963076334728546666159776798341058364962760500123648903436613222992540337677988477671022338118694216304682423334130149852860681684099263517683335157344038308938179479603858917811593200169277994326389000742115999246806304045702432487140508819529399245059884575934708946209516322574789907597746226957553035886293114377154459544505608389208459380956440963140789343305699658278203986551812398932069405456026560759534279324948812804513062587167345623977971097453549344764469259507711376402428457076157055436430677764738886674081844106383742912023140510418552281742188746389236111863491148474361612517064934024896521322519834851151242772104556306598929440002152036519490819251376805450957184749544824693635603569605225972053841581004501584100912328333976003102107491085953159226069012834587327259971112025925123819947881840747175767809667062611411996051112013271091350150777864798314871955256044949338844757948457477116889094191094382540558054779516264683712607043026838398910328428087833751980730006443119069122334166099941402646601365567136347123203738359088947443981087204456279328714404539183793412240994826870342095392017313400572110318532747843060607288706258394994682842520556381575601014199010490404397191138445152855809707016425452959778664359588040560748735412597512323836013768239677434435239189168997928071347187463000837985697466045497488955639372562589230908251673255473804486520327695043897071532175037437036938183448706068445520270184271860267785443607757449987645862550853844492488331774133732177529596230056374085739368318799336491781716721031643253122590074871792724944404133795117394685504903169776472613579323786988436816555044871147023821295375315968422237070919604915553260798754019817204005435917338028778866898767783201988249690480208167510788846166868446591501548151404396048081597044050075742974387127512894683131544017091983972922897201447567071326201918658162425054687848305577141613831948331736546313547366384763806330342036329442085133559102820443474867650075586800703988545083847887658720938137520387462853564941611748541059186958982227681935894334481608643024722381659381938989731023292291485815605912701175709672139292877678190348729760666157907954715630362098750256936461038759071141133514628511273752727853532279858408268908582987443368819679334383388270166337798654040644855690261540077459818835228437887729301076041005381936867843411337332815350029407543350462675437781165812720616995958519407473614668214152449569347793047763581660230557418465248972034336442550080954052153006780131714480535397523095413274750723701383225842109411649460720870423187520888470553057940395347526767669497718524603967849112705432812547718499111843247323011841160686418751692868907882025078560674843768816179401584803887200747810776387544791913903025938435744852431951915576190055048231754367790804864233775987695188801541755557892125771674773775596365864929152862381755401283073853655055425091448611697016439954534260814030388938640509188143381711317813476900790628429257746511202468312957230036100116864480097621669013542313504580498125607583068356957065062879843861421422680449125994612477774818757161945326684776971564527300842862017927612360118968033138171953084120164381524148059624459163118084096733232992442581634862069037490046169948238393108530288105627559374357574375901411757444196980563141505220137571144388964279304678461638650126063683382309278978344376529180243251205221507357892280444330744741037298325319700933898637890602101615296398869580920345296280236271953557041411865760773333961802153204654733800918538855539998075391359632003872695291240543210415227135533202642183404859216781849310678370931836038236340074191979283348256435037626347573331738056630737544630627819667754832890022502410501605907042038148659166291897056811128443400490554763520515617080334010077029504407741614050704547796928760915765587321003086708428633478958994497231881728742148146582878333513294577932133195398397292515911616512890368305984393578729868207205694140862127741104528308067361504231110165275192585475375358000676577709244330704876174208560189889742189118009170492691256513264181013828227165086680711420434651576133518693155463307951273683890278139573807332751907304778544307753690835516724244324828301915566152584064392368154012296367388561296655115159377964858217285140994654349136595083503371058992673764518566714682145847493882822893394347204092233214651141128348419317600574953305420152824611858556704207679618775670228729011916634895546083736101005758230326310636673429185051800939052184453293132762586281584909086427718838454160054742974280328396661361347295963302563629881389597757395692922460506227719569272480843843963982294218088153904303273847479651330200041676283719440322315419856051041525940239722748989045813626337663435654703148317669134876847555469792411025033420364193061667681444556983341506990373187827551963387220108573965968914968862001608003924039023517819236072227063268657970009813282109838740945014605897718935027854417422516891716032864362714644753952562246051636958846719430334197522545309124095753712501839140881772202359462149006967535743381987382494199903798783450128864108137711379338678990406261945617986484478017729513417966059143295468448727905734551655932034516014732958476725736677666360745474765405553207731525120976743153206626090160055202221435671053558239271799027644260676893678561236876461169942483963790905593236778663204622182700607533615177816293194243328323059827764195754067310463910960166786833097658112569805863287752396504825639025116157475645847961748673868648985763576921316360028625597643145982378614155913337308072899028630354506317000731973048320498440559655009741229059616821075679153626408071146949434874870710442443607598092254881233946034011674932649197951588391079113646195367873645750872572676353074784800670128148448926212428049339412055475920927927064266795956572600200498190491828386978461485683642086665791764122916337004769909968407222832293743026188332895081447303907350456907104380292438133354568556580913923940135089837451503139566900151184776483065461722434703576835856162451903500950263460660059609102492532142956330352718793762144273337958725209863219465403332730360337994136681320539676141959170028609571573318264331511603324410628374361114137620410932826988141316635961417071437490827691742173260234374302730791524687955576187003866752766949337018264318503626167264228405496153334243531140332510516296899883807675047755079172377866058979779109219361302539854229267521185113459426964212674944243036359083834041693510700598946606285775592307909800370642066904336886030146957671455743670251078744477019985475848795376334708946576839355982663342271782974876971670099428998708971102417217050194310201496909274080129838572650933663158961486164318754012103629249337765151672364719569977796470263610483643241743081238512099346318125509126340730907301902331865609410500322101548902016145028474991172896518663299753954359738145858524256241079822888388025974877315851174825234099588922307983039849059328140405070220292462966857742931975247086268060742036088901447914159791901545682768198127862624633726084182944519076169341611788879344467332624457235181005489161468437468286277927595231710889035229963620976542808014437720825245958218422545401854965717001947936025069441351490369482405131546123008735270958799806732505582384557603513044063735545265173441077422655347016647100822557881227410017918031724818941284851218632476074548990913121757687254853114905647152161232816453294063938585231011698346476850219902049515565302989770984364797494877746871059691242951446947928616748412677311316689309276924328166978373287156127637754250091827262880001580912029087294416597708081303921574616792751138598416609282955474549781919323050366795607116559122995449444513824012921931191554790229338378408917767888764757481247942357523387981462036482918774775255481502617812032424350337757705134963581392988233010269239543026399000590407670292541798141931143957825519431024943808265104606375893000801021372156629170649936482063505577146268662962099488092098200661611049654157290575516049458547343584333829118330105341165469101287828518455011376471874002702126745604311883893741228949110274354393717306210252780458508823091743222111041747254441747473986354767554852139796930960587571954051842952106734815850369832317500044882713313649500485928442503705962330735475241650188479077738536979346401179945139932535355966728284296269303465382689387382904506131090629101374506641285879526447951961592499074899803465202603048622508966269246410248303951769201230670090880245754249900954768059240928580835677018471478117764727507460788000454066509256352049419001433619066501137325877958902450951248012775946853069206507022910965027828695344876662390444745223071764327986092164128821369419529923449745342622529520337107152499452702345241141322434371161845076945400253720116974932841155231559246404477495415318558856170762805541331599037682445748096007207307457259420504514213233031560297159337458934773052943897370160719593071005636639052337398910516328917458761997763791052147675868492052732846056244343846856562859110918170514850638431897116103962577287557650861624128410941073015672545799355272188821573142146157647220592136501403389440498405045979220449287529240951068425759059315541517416653195735778257997109940532355650068087437125593263015404801959966170854247359416368888999714143993665160871834991848566207054598521044690133585142761653289736942697455812090483602711809497731994035628689666322904923368824343322943897077533662696509093532125560433883239720615037830617553062569400982442551469212711958432874003095252511501251544368163946986793533762477996739664587856894977815882349958159300266076187992625866248371863178211081986479246265805496439281433789465210502472287353963749371542009248496304898171325225431490404443696275192260731587223678231773234700501786989060062073372663103468326762818735022839079304658268264383403675611385203208802610883443153396372155598085767531581987651375303196560138048749012301078065330371665264754684135929975327450958445710569685713002470385735812499009271125281912305498904570924803427650562790575789311044993863517834700777416970146268592915939173835339588498234255520467622101245918125290891960721252962341466913538814589814214723753781664749478425706364352461070224233708179564135246880492730639677674623872309076224196922090720446752424962016499908060928640446088590198190025780328393379622363600793252241003767266825105789787022775751765687273282872681784817235974474959304500106923652827770175776376057866784637584218919587715646859185759124581929407837290204615476399831255232642772149604749965883742550558896424909600890318701200878005426405783690223803023797534308676408970377177829432708888482899871770661919987560426133634342816194791652942901002649991930864509397547495136799464971411961885951448364705084776854218557154068032421447791593957493800552595011736497560627402048363722641737191562791467192752850831819871126942696603819688457632571061264341307436496659871052442884327358088521230434779757325515620881755317489614893979565115465466459134952019342787508889329177160466567164607203135727175727007576133217386625201585733132524102256267135974095667268967387808616588507490403645684015340306735062054190431238197422650374750608082120129477961774411707229963815811485877200700501734026677170462507781454324736384494629139100648590234634063450890873793218123159652262636940460561659812567660405111805037271771919133677053378340571763804818663579984080144826950600742568620996921074204543790255158895558727569627833033922369940173618424508834111810651656048535574444567986963711635689671493979686086392051590735412326987468072321026945906095052728783747681972245983868013037928884763904299129826301670561248217272709934758302637217436483609049259979017913572017677999917451517664593806401100830094206113930664869181230286977905241453163705128560161844356057897016629444587321825339889932073812247330853655199279654850681643123911145550445824784071197446536929226480929787125781620877835455757799725872429412183788180777229189273296533362017032457858813870135280647619436731981832381160911893129851064121020987511004669726225726728447523886592540185823062928562680797115677436491664945960425463840352618701257065715147975721913145513121975941816861627415802916250662475683313221460810083733560259082176304656979800876036280685013224264755601477814078188584904150365677219720532288211268983178369847544314641858955739505549156547927819249161988086454580912459896288180831839198694747159727783540431533139780840118503526092188395999937083438859471424422484895173339353662013418404633914278270531257635152842306416202901968927515006838776193126399890861893238570955140721902636602451481280533397113331997181668368168114113211417441091536660280740752073688197951869383500740801485250371189839664555255637862300294894725338807388545090253060968823072953675487974449697590292547112002691372243223615249165249747041660867764509155511159477802075808850762651193636610867311554992969899613510446151689019965900866044828778159525923906714414752885574464308524982926278589922516043567064422228451889411464404645562403027336145425521604775172340420217961207569279554941274837915390099345785110541869546066004279176509714969623554456015482986407451412652305793262123648552417609567710229212341687156454311883528279150390985919008321641915631234630542109381453293097771127251164835846456017032621220535159510911806712579812990017904201396748639648986580416830392353504059649048195263808560060144490097812861709892171321718078141652344634889987253449435365479232110959791057112787715767591956424199236727218939549730947807636035618617124214592974632640888278642920646150269913678711900700105591753932021927544248495416598915245127805617973028286807341594473386206410511414428389049099794186454102765796914905933255458663787331998410234134210186357410895835541247415216366309533445597853759036910747535179357644751896549954802762133472758890605527381638477541022802894735646799360073180253868675653146890507692412609328780793399715860489456638327779713788516054313521050756108383748787190630773384260645245277015038626404267544599526329137987727604904731562738505220497843816310101861170621100872755427778464809073169584368881349788891479628643600529445515580370114613383736664314978973619136220173478287784163951945648158666739841536848953175419910538486514713806203315648665785618237610350582300314779025897090284284080969250933457877228872443367222249154142248644276474288044127432827952859178595732895202190015471726020796066245204963376906354394976290239211712022794927835141158864526574570946923047666699485949903120984263356978168759479817623935013795014196775910220111958690782426346191285770042525098984695899814199136259926824361465285823048578317155487790775485313929046655222874042698387928987865423117119839944817973165334672655644240394784576751152259628370824434663024024418575011518490382064521827913667162089667112747753535124207783675418967511974700275667309012046788487060329223754816307592779170924531501164340119876000139327544408024106973184674625473383812276564724893335841539005571654820183265759775079589751747626589104877587523415006319142401438844584683685256184472651725051979384269512266601971450685653366718533020065953355981712508860345534161752796241189385496331101145400268056092980486470369444513019881534614061799341395392897417347975110433595794498856720510672308772750213294104276272132667497463492787282710357371813082428478468377819129538727211815622333666816660354583565438907819881292081303387043386670876926764469958036489231885191131050114302131977936474847279924851923137714263077854243985023606988127523596289821331500111059950584764623037107983656960989438380956968393260575271072778863957365450795572899629582643385628639710611546711708409238271955614736601631291370395060012833231421354443797341554577170376506036564132217557077652411894117329603768900109332749511859736210742285027560130448468034446432758727729638990040491574996250063104797738677059556962784396811723371443252662772605997510646452758982125426031044458649357552995121303204693338942472794723310009789920455359278131277695870668310315876389946031424494549763773146136063430889417701887448847015328003015451499112860909942403248329916941358489871131665319203260702546158995642204910162911659670018116940727018797217171686323023556118323193198342370803796953278053782977187454671829418430921721985095232819212480102940486000736338657164939674716847410850866338919788038362565117722358348690989096737227059283378387520150072310475969531030512284930329368248541131113766926569221020923296593566377299675247629189109056398144800021591742635347744703956072123890797151089046108298526010507197557242777201909634714422471270603537857950184437259093361956113283048564569574122170292703201825073022983566835511332308338851334507372273081202885655714787807833951944184851958437229989794757451452736941245634812065844048175235449024407397606058411010621436622691612507865446029785762584964939590202876090478392978007566584355372687291804000734909051848660440791202433127588453190203200783903284912792280548420676834695155901857566765932088926634171356382407121102180333281700812579308596278561884268236429082157465746397088329202574170766452511505505609003041124950089258440827042552762430618486885201276510552341532342351164734524285396714462005001978788690975960312082731929333386050252112006807345880064713266643891024391700346350471880262858040712474770262634884317585612572195523131314179386278947285577465324615711086122333531902738278585784646020600313701514942125391959071309667102965885213697839889156290939743771636780743647494786980566347580750783699119643179162204062000548787439490012304199473697303589997900840621652874808426421326071990248127528436949608115779005494179734937511431781806145857785045035166485825750634750296960306410410179563289780730826789234509202931820390586826950654104129396809093876099264731036820798174964438055115624044199738101662825807851197445426685021856220844261848759266200674656511060029362486031624820819678918152181355926111923461166345822665086176145950743789341584980812952752231860843257985965288802261190266665922655937859396637134691957840093532444525473306658768602008060074798781369928554199058085681741549030727173827517234927484381244144270371887360574934364399214113609316363985218988683805111173090608023338304021000410004993333783004263450282560060958459050745590194592895933947062092079507573081523402757767724788144449830636192589330164576778830549052766661774876685632674136307814153444590770266999239828355457576813955421195065159397418434372715876860476997930972151568408519046320497117726447903332629934498123201460718775034315147902361476205883702162559670339483592737874161365824447049081019047867077729938161516575462820068029800463721563526770860295002450363435919771658499908957051051713169210155056685711478948292601652283703664279729412723327993385676972068945177529247890734902739568992396004082005895239640239584914895675194441732990455908284962508388272481664809644013695108530643590237328537639688567194704667459259852194847009346130261141412179411299994375826249494565666674099752312940749960678432841327379608811354294970105991967067932527833097758928415762643944723789054971807292766811411062804902336531718448905647640615296706335520835436041593386648611858094071235308269292644418143791110200993361422914793119640919331990182443330345380585754214640238824260774995215366915341497235208474057031765422776345411042327893101949992571577825558691897895422945443680380208657578495349595586606235401227143323363094432958840171215550050203924175856785197077586124718868813101246599573589030798669834807255201536300814627715056943239448585159116823195136012406495891984611338805585159868346247052637564031114665756371321951326231045738075829116360629934323624216434728253094934162532761445177538547165024471725562255682921126585840210275028026032072889156454737530566706272562834758199753126146886585122828302440171763025247744940890748240827209734322451822354861070551316853275578081420600654807730862579379336164296300651251035620903073641444759072951433003329108395228654468968443998724991943750648399825412774577834064138787246298154005871653201690041161564805619094094950177728315165333892502449398614595846310753261175601850635807705775203998921942871973931019055845469784764447913903988508253744480825540367906677867871057567478493188656741810436755808948879038430592843598118575241573451984420451874438273802788249941071249303464372879792957737080283657705694830680260355087766018017548240826889393233567613079361639516134438559058561470248595710630583243521624876087878849326799727058325744525127686358697175227126042729704763198212221500110961927927031953451726345983879650304506115735253749823992717894744913635383053788207368902228723257035589214660773099731574328578894614609958412257841707173544840654053687963529161718339377820673974804275660397594495763320761934541624154607081082091431381630887662852444276208094195753892541482888964133078632756060019952316521890141964819830541862502886279942861929515434864567266354539499955976735355894393495991004445955069390234829281284926336527704287398385545271066278910515123558177655155124804872688188708038652699563430158718539676417362165324740950301161676147226987091336686975730078772316774484804082212792921345388911884307584665906933970070288913666161767306556816492529686126542330576930427952309859851945687695616787391724886208606078219586577521157997471925755521830252778574776276558662045076936010197431001405073169538271205697390441457933908374685337544753066892359751986805458682161120599250577029450471790531116688637592044725816809350715401468061886209608998308808761053155925047485763330982810135796784437153235684378855933935608225979566539014908874229318867856908106633416008188397781368955225608754496472366002973989622781331076327936906421333836156329940767987829949219414282739937552368742050095369670510834581278968845142676270307586970560344050293627832921967047772968940770231187440894414891611957992234348384361908134992564366682665696510978419367665490400052255968546785818638881481409824051219338973454619317589006191281840488521392932267525779747925510077945960279398495734167739330399574628957203655424637187995438121309889157318399563297897718347938915006476879059728332276590034174776666804805807585137415933903539371546508657211772037063013142093943376911484717585548985036753668986990778732349370860695937442389869679255309585195314500199898018163496806602205369815418049524140539038443752983715573321216713716303309876573223472073494658660387196143966238355254434272031875166654429112534708035265585042313178039140504966786200157779032253018379775395031624177802409362800776274088937204606438009792960229334141357316853027529326270934813060617513040349194939506111829667596679721724554842338458197057324866302813949134291966549465895240393949176765935059682165276533388253260395177273452448414734481084363051946017495590145528378728694589718770632641502417259843086559611204202453814610339462803726715365311373975645333786896813006476033470456391277472796397664318741782445580539265623629643719879907041630801149589490342214249683643075413638713825740975202255710524519005628410890292248754754939152754157107953000785347651731062707781298031248059008088083511571893341447743035315052308357772390705357815401965655229378522974863831081531326498095411458206016343526704502197334552693425313951442693600699979416793419044571047950054591933973470783926474430571876070606494546076496652235432486913277445868254001418092467524424087719936981330245844189018050669626927477561635971967675947936667840573264315222817706208841363096504161459299455789615473844664822043191643886065072888244114235145369904453860898233956764637008735231406874585372559803108174040402975992668970470323458706663340829004120177247777909390407650943557103557176164798280730176947885600023350422406684015217003439639897364954618944020288720946937413542886098604075227026482788702174057857719036625711012261058982176805769679934893705049041439972935657555686872759565537429136163222780629831139827737682328273538007173604361766686339194080863757502388242360541635097206494291599132259373964992477759699130503679859467387685858969458881363954404384016848950761974795313353392698993567078740170008504367063192312102584020548165945222524105239691877251826775214235888083623030633684703867930130650125295968428623742677462191715457239299389032287069336032372302828098382506936703358757555827103340491155787211743066715263418577384309801993728612813203556766993754656540038816495840381520797028440484282254884632112821925210033546824602794396854826423202843726689970480869195071650949154727258460224485143154709172855637969394753939537534842454461823870448127360033316087549390339491932603424096663377705656553981384251344651715053403923964417851970419752086799349480032265992581424000705801737101791445964258963875786190924396690033057790178748531407381054411659092462411237526877645210411022521678216396060020924621034172725054413396654304600511543838181495559908429007654906632941883397253075597857634654462449755501594356663254192887988476758127961551318345779438588059118960711018114915926214069348039421926460721297822408069255012690250178221901583499188663372994201653644081755046119923887957198992066054340294114974546071159657605660183300202102344309467802093991861862965216891368515339833603657760186751215707978850910662690444513903724718434232835066662847876807387275374320546636913075891542321272611108399646743762333862252602882930547232324311990485665318593042026396489306780598510984447945017700408320977028919172057048382181924135570226760960898139417290817645998917756855185172967724992933123052909118247462398492666928951967247431522756106437050491531797002473836449419068540277472068963138393177448233961148030322348372301545504016732072510497336139578845609651207819365400056853303027235062359420018098760449076899084941741369357339039371012080828320780934162749276755522409809098153174862234168142466848375913203535996417859932173938627851656219636450621416451865792169471928789091851626456347026830292184338577370915000158169528450080894744186642838772985819834529563611933373632440708524703027899883434677586606441445529530405836184308602571764765354456106254643446906140012957381572512463660138820345199166078432074790037248546139205726353557158090656959024185745345956546890947422882539337183883406929169297400044137877815260349485959875657881972792337911693367611917919131915027920557706737769810315715359926487713855353321793871564010753738106086321230546595044476485010200470235649943642098272637082343166210803794993910337605136239806876905139720151979070575500255076889855737572108112919425325518445248006933632368025157148533351689787936121880720836116653840743617415571493745387797691042574418704937861768435997110148267844022966899508273305125680545431462825242960113760480968529000760808009707472576440561766071700939806743526995640583592236944120793230124851216017592161718568695361629331621064836815339177400421921220156618102527651553489597482005681543009594232948075392858721451225712296026349598054076571694498983982619415761813379326410749885515537518666751789095081260226732887008501369033072022423311241991556050372244766164397155244356247926874588767338935163683327933554702277547935287703755133035368418595728953591127644725043878325718984441974471692217612825126396314128770579712175562666092567978624210753782825275802681456221191328149519567354816438303073809218496633499815268520022429717046018825658842467015385712669468265707555696525948903227914864246346468870618605734062682911322413808861525616756567945364657325139882917475692209277183304968538734947428728388582797185751925085125363729075173796643775804671009928949220293268670456975658752584332903400349503949011586021175082326448210272758388252815782194585442203117090992668634959462750022443452546012055002758055127454792702255890205631701275211122693794920290417833369691631162589900706279105985583858392017695508708913053733434385675958920310284847781339811291863191093386084475914087239356382800972352347223372355619360570354411451544244307940032823148529609638296958288902010391872278763245256372127500248817419151015466871343223054572424151488837160849087690844793830186151432135847711240614541446439183938044066695316622116741046472939622004638961665608819717101930135624767270181741989733125492003140924411241153224900070754907516184957543551611208022204023968376636880451822691297708293688894074998217185540931850449663735709971989960908519813174658217406440733137654410084264390199313344416298280201059159586221741529060546858446825609039282323617534880583845852642034407748295813317970457691956263225675641685811512670217066518907796204233575773817564814095574905621916350619556603859001230105241016047652273704404479564336649968708539745125105915160022240368627482259079202336430778070946622175011973214230565495684814465576107906033710595350568611341645767396110859401880245617579689883266256409894693280104365291970684730005887925438391662019569596571533373614115187189312356643389006800187024689032302797342271128282171799878713212117329036060371547786892810406560993783700207922558468011335587906261901093629494719347614610784908347727972664981060886160896302867201510015108566161825129634975425024272081557002265941815391290337945136518047397974376034831138219062938133831604578871761305972624279786410979461568839594456833208172319195856872204542603316087926558321489377543723491132201816700479397540948217989075370768230671731249702531673564543406062253586483721876364885815656468440728188332621030006260484399864535626813077449518708844252479808421884652431126530875716970356579193081754594545979226680522690302736699184607929615623142663354132052863597405323796639870431453066308061197943832308479553993128427148101202879692518240366933913835269757022542403389041102563931777385856395150760422381552306943437155154770876052232484595793376372779715779096638669304485249549423986081793893310670696881891161170144901546778001550049111602186286345163199534989815372560517348564641269606632792272652115204168983118001639477232503487517975266466538605885310375386323449185231709798124778365598533541593980958124433491037239259424061787818955206789639301137224039378855362946151869759563140264720906997750013611877360612394880182302599632772460731913224265247765843851870907483675299829361720529022209380906861000458689821676603902075564791012594713699959332168445898305343858211764958004751287406251595999467293204674470870715167851421656776355939143657993736347249925156645471605043233097281630642396809038021750687833536173404097614118680059037340312341605883455235067338752800787033133391707487966849528493075647320868840934380554883195960251773502083727624240339456212211925683490737454112277877641954542607470029658579411795883383494012636284071606370192505278671353911009904407560251382987723241502706898676119014622076654875776162540892477299357715761700750960446391506332058899436675190871956939800022687432780180818392178709073123353331373011315965680280896735755650091675680722007667153708728485188186965653450591919415129897772500704531083484204256009802043625565542287774299566636078316295125113411325583706020566573294986977164698547137703200443022008505653377365378947288543862725055911788727943036314460020086504429170778872386381956215475209306444914466262735267509651875004139279370893320240127688827675054296294093093354920744403327434214120799757340314496705538078219995180518082515428583740839433883842984823268317117814453641785347046845620463915826027190815790559731433923858312882529042132987246860789417898096245935117545754705002593969747758470845487352156660639391962457416095124403612942059946284579486042861317902103275464677157584106545775551518446983441064825708631574744541847215534147110002165755331087323942894411304556036096' ) ; +test( macro , '1073741824' , 0 , '1' ) ; +test( macro , '-1073741824' , 0 , '1' ) ; +test( macro , '1073741824' , 1 , '1073741824' ) ; +test( macro , '-1073741824' , 1 , '-1073741824' ) ; +test( macro , '1073741824' , 3 , '1237940039285380274899124224' ) ; +test( macro , '-1073741824' , 3 , '-1237940039285380274899124224' ) ; +test( macro , '1073741824' , 7 , '1645504557321206042154969182557350504982735865633579863348609024' ) ; +test( macro , '-1073741824' , 7 , '-1645504557321206042154969182557350504982735865633579863348609024' ) ; +test( macro , '1073741824' , 9 , '1897137590064188545819787018382342682267975428761855001222473056385648716020711424' ) ; +test( macro , '-1073741824' , 9 , '-1897137590064188545819787018382342682267975428761855001222473056385648716020711424' ) ; +test( macro , '1073741824' , 11 , '2187250724783011924372502227117621365353169430893212436425770606409952999199375923223513177023053824' ) ; +test( macro , '-1073741824' , 11 , '-2187250724783011924372502227117621365353169430893212436425770606409952999199375923223513177023053824' ) ; +test( macro , '1073741824' , 17 , '3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024' ) ; +test( macro , '-1073741824' , 17 , '-3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024' ) ; +test( macro , '1073741824' , 22 , '4784065733063810973581885157618788676291241975216665977767007373648750357731006099232824032039924032894289638403441329240212719241920971274455782595989040464660523567661989180298099889009174801022976' ) ; +test( macro , '-1073741824' , 22 , '4784065733063810973581885157618788676291241975216665977767007373648750357731006099232824032039924032894289638403441329240212719241920971274455782595989040464660523567661989180298099889009174801022976' ) ; +test( macro , '1073741824' , 24 , '5515652263101987298728728207430913795608113109085112352897269396216198887424215820128660001943808587833784893551335930816647064191168732319583111500951066614122648616177179922993422016587311577585463592732098692120576' ) ; +test( macro , '-1073741824' , 24 , '5515652263101987298728728207430913795608113109085112352897269396216198887424215820128660001943808587833784893551335930816647064191168732319583111500951066614122648616177179922993422016587311577585463592732098692120576' ) ; +test( macro , '1073741824' , 27 , '6828046779268970776657768233698567984276232522051489956245767999246374131525255241237946573692471593720760228447675638216590132893818229842292076597586769967201441361422350907866192164773697561322460176523147880429251325990375896362151810433024' ) ; +test( macro , '-1073741824' , 27 , '-6828046779268970776657768233698567984276232522051489956245767999246374131525255241237946573692471593720760228447675638216590132893818229842292076597586769967201441361422350907866192164773697561322460176523147880429251325990375896362151810433024' ) ; +test( macro , '1073741824' , 29 , '7872201966280717348342236651726314522606839627565764220475565031568317153405023507392663596386569558004653379220621715171372109048108541030444785631640845193093816697582678260933332408613360539868835105124282664122403089594119217080450011771426148362301864935424' ) ; +test( macro , '-1073741824' , 29 , '-7872201966280717348342236651726314522606839627565764220475565031568317153405023507392663596386569558004653379220621715171372109048108541030444785631640845193093816697582678260933332408613360539868835105124282664122403089594119217080450011771426148362301864935424' ) ; +test( macro , '1073741824' , 1234 , '135032864495417264161796347776955705785892222817973553418838034178314956028897546684160639856425763595503385824329054755201421463563212980917112733900937587464576847323832924136423515380546856668025289567166571296527646275461473028717333267141003518332467805495676717695347879685792063703697070949206732122179518994434776335316458684468092377731792188239016034485284630253586964894185124335453057822293914949906863158326432012623661553678396250401107915138994915256878813546994860886329001648396962604356523710403969300362981938297962596264354907403355610003410746213618666434661128903020244869263896170471066369182082892608827489848219714660341764073206537992528782425500311374732638679622889592596379830695201794132135693911769551065799954240113610377067376683502257705550961373070910821982440913313765403579054599921224319207778610832609088192808064360990585104697667138615140446175879997439210654552913976627035980457885269693547247688226220637387637045378917414583352542513965899437900025330512737621517111697083031434057763772292768696151657707923184295380055081923115043272032888153271224470285860092716037417011085867348183777640814999517894828296507433835585929567261420420462344313146389909474179332054613893650718599796623059768279453815288538594004374465681087299360879696203325418022962651748866461417173042714747088991460375318785407702300361444578324217092319160985594722221278104937860539603355035209045656876866415381803837578632001346316535288568593998708433385135715755188408423372052774222216062791048328356892426522413633286855317150328892404110603628893696215163566867442031835287126762113760377467604420360968473120576018581379277564986140009067855235173575587538977545428601733720192069320627430054733306784720670681238722112369930138992200505842377717496879786984447202871740228658026814953856942888153479080568126661272713405724755303867126253550104922434031984783644501692789857112933381811554363124855689663968314433936452490388268436076601610796805828686914442925663191706651004835742754007540713785525346442305287873815143574033326807511787052642265739017004565917956613363367471933672846629587711796258007368503719485449080451730511414011638477972141851445718086957116808591931107452359052957804865633522313939899601083954314084664652521357737845635635594429769313821802217558277658299721865464301558666750790259183567098179113274454668640485452931068066002908997277843409635151859336573513012860151545891329235097673549964928547801966932932777277610659955980339629366284864226600662175274920200231799911374929694310790998989788523133581837411706270099109279459393672455713820011546843294753524645198035778900516714217425354013155387659200293566814809279617708397538819427548364362324788662653106656895970337977138117687158105548389244431881662586459290188692191645535827574319724588383784870507646115475296972326304672165083538472785124541284886058416994446142617361494723365850552096782926362377318561314608226102827450344958934465468245954006024257745239912802322669809977564421376969565655823452390561157232875258411436971600411470668202989843565841480016584687122684712266492502542278163229587079707811073162054156571019054961062952927977983554302015866971342580754327070415115073966145426561158662194502911612889959593112256884020821481134001501231980935188947653774740923939867063867862219999510114357601167654576478400771215648552504675553652631911512293697639701046365273307557081624386985153768458592210790101466864820465666077389235557282441554467556137942439039191407590628851042708228500292413849444833651262460968069570764996387290215723393788781245642804553333508408301261343724697551028018989537881749905976076338448452394908535816426586597030779896515482117647557447860634450527101713121746502484479941152499856376739864275419495610691316310634478200363068897623674033337430538837932663020502333882835672567028049270502480555370060999493787391837671108324652717939749490597481250676971715293682844252870745501145551758940066811058992261248151841276017611811411887274572413802287051107702233361626519940861991365151787177732149135343171325963570255705926609298821759763745740605618507883067662117450926227987106288796642374051280660094717537306446983341125766514345467801301022109170850857456333788167674306579695352752143676166869626035002861003680151141687395013408918901196436576953798322233993027260775444170722889022629783177992510442629535947158550432935980049655104057058621049474066059547684213926506563385023004213643849612559790681501591969143956634858312507054320677326538188275884275107886773666192492559052155330294262524555672315514034789884026392912345926416901360808651772382910047100655600280544831642567723450232097407181605364971159781140990727057283670253338705128542777670983899963185946930240111611346828021014300849527667380963493241772072243503208897153563615767202700820461479775801950340023203862180599061144940297631835377016813742279451921894644661911014611402981461194280564179453079023523411900246837570509101994534431957542873784483700881074971158165429546479001645257417913405525852266215205603087742174929432327288507482831107662551472614657976383161884377268463657025482687656063877010334242025290874089994813121457120585350369438678750482445541628164325776911259393529988611879496239373025342855694600744246027039218591404431155722013586923335365589621061845464264820717668612915592171183491557882072775450347227785803371128754402118852662696497779734299037300726805751376345509065452470499771152338656741540759667286001807828234665941391188447950478415299791715469552242795959977483249749098144154729856726398843394843136479906418546581912783694281934186249899746840563706877029836122779488478015849960103559937024687849690515515689170897889503967015459345616938867807167382350934016893152627043030526997853293078436718226621464395154690848550466482856381991831742986166751803513242752173233490694252183014711530077920709629933842242926656727149369031087137074130182692159013533974804462296354847649804625060701458152488648760236684887914355314516265818917796761265782595118181981681044254889996850913972129942574101636910767699459646998565563334934817729091557460304359721174908710624610165520926996466684432035990548126234720976930050635146064837916857286368443462256725410214925359769688795382559406991790923193015325212536964901024443651640395352239064142041323998597222052931115684682639641634800512022146941484482355702865668732720081140181922030567504656879986036737923027379371333794512102069490267986276796423969331880136840719651462034396200061876091366707548763496112346222123232248230388694153688276766328691064711815330435460610088491421888195612048740193844188314932702563544622667512558911661710630118364274196170285674349766269310062034958003334299954120247304438475039760866057864514345508533138628508770723222951065702526427845206142448239674333189634298931074576766130399670656349372266937207854772004314241332793691477905804194502714575051020048862726839370657406000869875185698670555381280201599182665294886015354833856011808620179345081837914124086071187518476483594847918835733763073473814523558994575501588763392130790088638634309767210564561156248614464688514525041131096155150204607020153647966454650761265273455261627425314514074528596787641024836845254467857223858579509706178001258970617383401025827829579991212553362569959842654814709014550315424922111780290827915930414726165818710997646590887384752885393971444427639715814163996840822838498023284380865733129768795804080108863886307701355417615576573589725489445560015923098909783946350493434691086273697821816061793195812770178371503741153108240688178150147461201688003004263999364357199123049902951417798592453452403101562071608640099027564271983356263970688542541011654918968049984647651232137086895404259830149749220416879709959182020123061308112888239461649235275893165452695700741882252283027093045450482557353241644181353530529653471719973518815321814018114021209910092621976503477515448618895747516994954217971534012469546841874151849040054346531026855470552536470226180210581952214311535603720572039239234584559973566186577426541184455268877699457062169502204867831831763139996332553492281719620044008348442819347402916347449063826287493279275546962303367251145148862797186077453729802990592616042296098334476139933758210139481670253798728685880004650690300243587853634793764661363939548941992865429829630011064793643332258817519440699413641147721299779933762272040597516388553460177074372616592967741331217479003988681016928742585365278732728251483499212078891220690889658188156539798384331139356971957782445900967760132357158387747329622665956719786329684268357644498465257273930645057475745581973619803774790375513161774140411043479424601685237941073465868677839867198646929631273490654610573573656534496084196010506741518390113797703827155068331674200699131411229929426209680688487714374805974168983332553493786309966923567293209378744360953393793837125430206186894839350307705730235833717173154106746899348996486996231198585887923276258550483914940308115576604381833814866652308982829995287823135115578881841683647985874625837749874589942687788384192613487693851248999443749739642785826605231657455343877879315308426560948548969337045420424230665445855165336217895834289470720467926611740468031169083110333367765062731740323306977689561405194787701475443626301894061597784690178137908223901264029854714026072728307465863936978689722771921158057199058515421972406268544249165602289029057506413446029967238761073334521038239699127377613786798068608688136455403186419278380623768639967693818903002914091657689851030323485482272515883706497395534650119809423124565836391369793842875038747816600835980202179604622141185688760485442517152962269215524720968096159687665960838433942792005418796157545207812339197623327607879244889471757058218065058047984089888544282248414904169827449234143857530585526799957307705003072573479826497347064437602871900701432264712373284911700095912533127999896443887782038410277845379907218733591984612184226296351103012869133391467968434446494841517603701783596211408280361807750260109809286092555909870372810146591135183334539196312751504033478470726845817388732348939299912436932024285485403024073626586251026026899899295415467127267737038677726809661009108302376683834416191919481724680647658317867588060396025374752516402209355880386153514329598353790340684707527726798504415578402359843949160793333347705630484913082537803617023770261845303091364666015596737350934362512646919111958540171867785831140669826682679983246022184079073759821259756221015486738276522189431610413723028908457172736855850746058294313588226728849768689794812414866669348870741591827776664772445325863669071829320107144423553422120538225532216445443836199238118227392732940295380857114186288402531225261406147809210925336362075376428503158948931501742771923187008514442594711388876951547491075456021295349274877008031010408946253351724911972191625857419453217284075817281481549626955942730030530589242183647212102223686706445886268268877799837073315208919568520733667353137904980761596821645748802852145377472403345961092081642831719685504154626740435161580568576' ) ; +test( macro , '-1073741824' , 1234 , '135032864495417264161796347776955705785892222817973553418838034178314956028897546684160639856425763595503385824329054755201421463563212980917112733900937587464576847323832924136423515380546856668025289567166571296527646275461473028717333267141003518332467805495676717695347879685792063703697070949206732122179518994434776335316458684468092377731792188239016034485284630253586964894185124335453057822293914949906863158326432012623661553678396250401107915138994915256878813546994860886329001648396962604356523710403969300362981938297962596264354907403355610003410746213618666434661128903020244869263896170471066369182082892608827489848219714660341764073206537992528782425500311374732638679622889592596379830695201794132135693911769551065799954240113610377067376683502257705550961373070910821982440913313765403579054599921224319207778610832609088192808064360990585104697667138615140446175879997439210654552913976627035980457885269693547247688226220637387637045378917414583352542513965899437900025330512737621517111697083031434057763772292768696151657707923184295380055081923115043272032888153271224470285860092716037417011085867348183777640814999517894828296507433835585929567261420420462344313146389909474179332054613893650718599796623059768279453815288538594004374465681087299360879696203325418022962651748866461417173042714747088991460375318785407702300361444578324217092319160985594722221278104937860539603355035209045656876866415381803837578632001346316535288568593998708433385135715755188408423372052774222216062791048328356892426522413633286855317150328892404110603628893696215163566867442031835287126762113760377467604420360968473120576018581379277564986140009067855235173575587538977545428601733720192069320627430054733306784720670681238722112369930138992200505842377717496879786984447202871740228658026814953856942888153479080568126661272713405724755303867126253550104922434031984783644501692789857112933381811554363124855689663968314433936452490388268436076601610796805828686914442925663191706651004835742754007540713785525346442305287873815143574033326807511787052642265739017004565917956613363367471933672846629587711796258007368503719485449080451730511414011638477972141851445718086957116808591931107452359052957804865633522313939899601083954314084664652521357737845635635594429769313821802217558277658299721865464301558666750790259183567098179113274454668640485452931068066002908997277843409635151859336573513012860151545891329235097673549964928547801966932932777277610659955980339629366284864226600662175274920200231799911374929694310790998989788523133581837411706270099109279459393672455713820011546843294753524645198035778900516714217425354013155387659200293566814809279617708397538819427548364362324788662653106656895970337977138117687158105548389244431881662586459290188692191645535827574319724588383784870507646115475296972326304672165083538472785124541284886058416994446142617361494723365850552096782926362377318561314608226102827450344958934465468245954006024257745239912802322669809977564421376969565655823452390561157232875258411436971600411470668202989843565841480016584687122684712266492502542278163229587079707811073162054156571019054961062952927977983554302015866971342580754327070415115073966145426561158662194502911612889959593112256884020821481134001501231980935188947653774740923939867063867862219999510114357601167654576478400771215648552504675553652631911512293697639701046365273307557081624386985153768458592210790101466864820465666077389235557282441554467556137942439039191407590628851042708228500292413849444833651262460968069570764996387290215723393788781245642804553333508408301261343724697551028018989537881749905976076338448452394908535816426586597030779896515482117647557447860634450527101713121746502484479941152499856376739864275419495610691316310634478200363068897623674033337430538837932663020502333882835672567028049270502480555370060999493787391837671108324652717939749490597481250676971715293682844252870745501145551758940066811058992261248151841276017611811411887274572413802287051107702233361626519940861991365151787177732149135343171325963570255705926609298821759763745740605618507883067662117450926227987106288796642374051280660094717537306446983341125766514345467801301022109170850857456333788167674306579695352752143676166869626035002861003680151141687395013408918901196436576953798322233993027260775444170722889022629783177992510442629535947158550432935980049655104057058621049474066059547684213926506563385023004213643849612559790681501591969143956634858312507054320677326538188275884275107886773666192492559052155330294262524555672315514034789884026392912345926416901360808651772382910047100655600280544831642567723450232097407181605364971159781140990727057283670253338705128542777670983899963185946930240111611346828021014300849527667380963493241772072243503208897153563615767202700820461479775801950340023203862180599061144940297631835377016813742279451921894644661911014611402981461194280564179453079023523411900246837570509101994534431957542873784483700881074971158165429546479001645257417913405525852266215205603087742174929432327288507482831107662551472614657976383161884377268463657025482687656063877010334242025290874089994813121457120585350369438678750482445541628164325776911259393529988611879496239373025342855694600744246027039218591404431155722013586923335365589621061845464264820717668612915592171183491557882072775450347227785803371128754402118852662696497779734299037300726805751376345509065452470499771152338656741540759667286001807828234665941391188447950478415299791715469552242795959977483249749098144154729856726398843394843136479906418546581912783694281934186249899746840563706877029836122779488478015849960103559937024687849690515515689170897889503967015459345616938867807167382350934016893152627043030526997853293078436718226621464395154690848550466482856381991831742986166751803513242752173233490694252183014711530077920709629933842242926656727149369031087137074130182692159013533974804462296354847649804625060701458152488648760236684887914355314516265818917796761265782595118181981681044254889996850913972129942574101636910767699459646998565563334934817729091557460304359721174908710624610165520926996466684432035990548126234720976930050635146064837916857286368443462256725410214925359769688795382559406991790923193015325212536964901024443651640395352239064142041323998597222052931115684682639641634800512022146941484482355702865668732720081140181922030567504656879986036737923027379371333794512102069490267986276796423969331880136840719651462034396200061876091366707548763496112346222123232248230388694153688276766328691064711815330435460610088491421888195612048740193844188314932702563544622667512558911661710630118364274196170285674349766269310062034958003334299954120247304438475039760866057864514345508533138628508770723222951065702526427845206142448239674333189634298931074576766130399670656349372266937207854772004314241332793691477905804194502714575051020048862726839370657406000869875185698670555381280201599182665294886015354833856011808620179345081837914124086071187518476483594847918835733763073473814523558994575501588763392130790088638634309767210564561156248614464688514525041131096155150204607020153647966454650761265273455261627425314514074528596787641024836845254467857223858579509706178001258970617383401025827829579991212553362569959842654814709014550315424922111780290827915930414726165818710997646590887384752885393971444427639715814163996840822838498023284380865733129768795804080108863886307701355417615576573589725489445560015923098909783946350493434691086273697821816061793195812770178371503741153108240688178150147461201688003004263999364357199123049902951417798592453452403101562071608640099027564271983356263970688542541011654918968049984647651232137086895404259830149749220416879709959182020123061308112888239461649235275893165452695700741882252283027093045450482557353241644181353530529653471719973518815321814018114021209910092621976503477515448618895747516994954217971534012469546841874151849040054346531026855470552536470226180210581952214311535603720572039239234584559973566186577426541184455268877699457062169502204867831831763139996332553492281719620044008348442819347402916347449063826287493279275546962303367251145148862797186077453729802990592616042296098334476139933758210139481670253798728685880004650690300243587853634793764661363939548941992865429829630011064793643332258817519440699413641147721299779933762272040597516388553460177074372616592967741331217479003988681016928742585365278732728251483499212078891220690889658188156539798384331139356971957782445900967760132357158387747329622665956719786329684268357644498465257273930645057475745581973619803774790375513161774140411043479424601685237941073465868677839867198646929631273490654610573573656534496084196010506741518390113797703827155068331674200699131411229929426209680688487714374805974168983332553493786309966923567293209378744360953393793837125430206186894839350307705730235833717173154106746899348996486996231198585887923276258550483914940308115576604381833814866652308982829995287823135115578881841683647985874625837749874589942687788384192613487693851248999443749739642785826605231657455343877879315308426560948548969337045420424230665445855165336217895834289470720467926611740468031169083110333367765062731740323306977689561405194787701475443626301894061597784690178137908223901264029854714026072728307465863936978689722771921158057199058515421972406268544249165602289029057506413446029967238761073334521038239699127377613786798068608688136455403186419278380623768639967693818903002914091657689851030323485482272515883706497395534650119809423124565836391369793842875038747816600835980202179604622141185688760485442517152962269215524720968096159687665960838433942792005418796157545207812339197623327607879244889471757058218065058047984089888544282248414904169827449234143857530585526799957307705003072573479826497347064437602871900701432264712373284911700095912533127999896443887782038410277845379907218733591984612184226296351103012869133391467968434446494841517603701783596211408280361807750260109809286092555909870372810146591135183334539196312751504033478470726845817388732348939299912436932024285485403024073626586251026026899899295415467127267737038677726809661009108302376683834416191919481724680647658317867588060396025374752516402209355880386153514329598353790340684707527726798504415578402359843949160793333347705630484913082537803617023770261845303091364666015596737350934362512646919111958540171867785831140669826682679983246022184079073759821259756221015486738276522189431610413723028908457172736855850746058294313588226728849768689794812414866669348870741591827776664772445325863669071829320107144423553422120538225532216445443836199238118227392732940295380857114186288402531225261406147809210925336362075376428503158948931501742771923187008514442594711388876951547491075456021295349274877008031010408946253351724911972191625857419453217284075817281481549626955942730030530589242183647212102223686706445886268268877799837073315208919568520733667353137904980761596821645748802852145377472403345961092081642831719685504154626740435161580568576' ) ; +test( macro , '1073741824' , 5678 , '28148898337860105994977487045818154315885187098857720123923019503536550068661096672354637598480165134022041984837084308868395452311053157640615896546050985553558586892645700423928507935726495168161698045415140497515602386527627319206488017355554288186119966734541348472345944365178980166309150611812365395806608007167010671798672218072170128957907439061754394300128594626814429645477396628406899347464530711061456854894379095840425674956808441653400041181506139011927908393244086335493121681302022622095101860620829845276309901056671871394201026397395171820873860291913878080280170380979892472296164150372296767377145551512657194585337453691634475382711660977481092241928982823053143625635560423178221937797712042117395219329456302241242041523769729459117196674726421874136677546084294826873902192894352596290458993633922997209073832114653500019746006542685067098597091796593235383026677957632827401939309333387666537839316094357314127534920705674404309028805143966637229018794907522055172849778130036761405770603918926933967928498088220730576083729725145992964744748428164200419463740275487586933626822729962824800560240761474558428430552602958126365583033236298214451648931511755996108094562356049299254807663118738845759260918867850503834415322452603653397365429159370357398957195114808416983753993622244836716555146831907033098694343145327951581021334647653286088313114479559741196437718942355964184601385362964266877652784804939052253222575619622416395426846679242522689602653790030499520892085577500725499201404182852867226125589028845844427853042309885329741850855526415975172436890910632693916719523636332471118794070682433535223602563287248795595868253883675189904726519119448801915261351526420699337492762857231988691678382926943587916545335155283702413750409505677924941689908432596377494319662783929468093868450608410231488451353317560659020100954006099204197631204922322164052615891958008133081819761014762487524836715828049458561031763108536694043217084348793653430411896364791299284106421121855831489687835195476115378899943269695006351002750960984964426672142770799033138424141023720291141340435508636127792984379054343612312021179919125313130082850457997100339188672577640528770106417201838870495993792046104170422555977835287298352499757882230600591394487250631375216854641145304444397854662472195749485109206617330733383898435103350307488437904097790795468490159665178407362104384319804361651012650220132889393331591715558188458831449467209968941910069520056730023723713589013657691484906132221013788386184219197754113246865122654385680123164873741763553852763331300981166654373006819001402186381647154946999554421873268375821628561307292124869782352332192908982894920263895011772173577732089662917292761688897717750366293629569204248484060863934466108937195948443800932184673102763342937824460121045896218443122360882698024688871403860910852370898051562718960418260546695613954738347691519692022893663002976632717861663007580356823097781646192222209252702435357691413104372734064147456843965665955652873096110765830684236182089087886565807972209217987226299585696168982138854941280194328335120626512261001331081248654357371396176501075032152655115462224365334172115688122152776903406306442312011439667376618560819888585728027310382981804901247107028140882078332241335878660689097272500434681089309886067525115434143986130726703706878433743992681042628744048964001570508077876948518135387246241479296880092162188798942915085422997374189631465329853471853984489176174861323479075234363120290867769013702739919612009426292832097099802965008680479851809369240814572285623180146280697670984531193650342503967101652478766807739947358226388629806728654389375296457819784548065774571293116718672409678564611844170365489608651048260596575158516893594390739121659741649999445353536303503061294401994598214548838049962733817701620624687363493549713852174836185700963467241090073849191740103227875513619343224494993071747822732607018496581774525356633102020037794640774098109121417106381829411247224212510736696706825452538654935037259956407630578146638429226378102600142256743099393349884190724617199388463752205790794440451940454605274720879574121263752007572801341506805655067825631941739793740936589208965150634092530408044204662895618653609322262359163887982449970383124228287512441583793977627962068395199273400344976325835945060297779883770211181669216457812349694314847337342309957623761533535923980598873005880875269599846465045392510668257169787436828598047252165951647190114307062027405441868359474835271630041202717715681530050858890904183091778324015733255757236109101580482580441967985828890176389397718041212941356619163330226370976268329734773630524413753494529257754781863229577908457569032718062086750844184472834347570239536056326155201810881038696860481717433476664625621082241586991225812173672952437197866259897373157784743844679729067516736518800101031672599250959815137720332161848205045025007611471141186707050967888154770682560924038751737207811193901992570725369435103201791686524505756647772640472180936813395743439078761800234463478180846516292693783004681080895964724137021083746991000603574423399483472642365997697739565793596648669477318614358267250383134596038860702874813526614432265002227880708968988988737493080405962374293053076826540765411717793130826541346297462776836630777435661531826481318792145062405811198530844655829858226912380798813160973881440163721569917634885574462693105998116146807054360746972666730885604323790569427284253076223964273715359978030815340692680006321945430455280199860142711370872816427712142263431097232719784998704069638989755157328661993441529401194894894909869599801115592481835323158814300011842131902588936147873994871847028405399169811064272549350520174591847212829792438106825404534383049157807382417071716548998177187833979248225968420666706416390190707768457675226123463626193995384720198209759936791376844052254490031460575054413862573529726918023653700705063568941702083630891996044965826722959248558923416329510449787545274111154340053470755669172749024818935495960038271562190088388398068258567446215438429638813416144469861387009096942616760208032476355018814040329680679835588802653484030011247737226987035720770688024054612187818344447061414642220551886870397419965104800759185726414865048332705445586347178339611571166805268460025130817411913319730985020314703929369141828244979458118746350794440972469365515773623521735815053404694400936400473790547133327308952286757212455297814986317480141532831981218157144776502263149001123086063793023408647358626440541879077132102385221082903921513070649860566861228278306927456359858970160082545255406851398044427390606896847739909856033659996912142151062203182419823681576029939545766232546225798544936003488100493795546219182495490312417078545669619133839724414087313221443223560772275469655787068013125130766170757522755288995196083208632760367504798374588838275982584188716625435557712975930208506356967363937122210773117642423759034688847074262569157860691733884420095472655868693804788798853460305074114676050174059869840188238249706756922707852403016294480987516418402809622158722332117912191322396344308046005168529470763240755288495911503467885568547110796443005962189288373077954193026536584426645858119360236884973893893358131236585957253729142968547596265350388138211504681166184873067638534159817198960647922530056737171392998222652344768890440903942958874497053450492657340534404950722261826476694600389620993991121412934627781512375531587430119694418600921042491946241808425609218148001707575278154030998716384895216667657329409014393641864525969281112155349965482510043869560234065512374117610382279304357796353832138535779361023572767566136655174688134341190085638519772716269105777397667544752112308407281551063186641110391181368268011784028035535033180997148034817583725977310854347328290703963033914233260949053078632664379976313477320469323833039980151301644772548530801510197665795747529811668583071320734297978242386191013538568847456151931045213697759408021294424885981327060102359352968094713641880316402184069434459849295665713894902493734764537578851014033582135990357328370745283459359873866508862907217949984436520976291123753201389817868962086019717213048013769401358081253749874316414733761110700403879731481327366128134414614015062028812312964841192776605772461602572237848579751596062846119891809475923058727329328606164325877380198476851130919034536367632484283364665496341548696606675798822283175208724674569561785917038686953070189275754779088627350245328334100342506484849574784279451309720531675563912478225243235012917746633631513142936777117922425886154614922105224375020527023628916774071542994620484847765716560515554737127344964768600124294594714592715001471003807303089010784319406981481509952504990850744144964515173603048334536187116309970688343136766612177268007668348523128350364138371524518071578343144952047467567938905941913593215582743180827679406961185115865886327377643057697587542832729089317101509237763970252435463768975389494971467359397430380888536860037432765702651569010253133830734119885207436369488914639018501744924571605683611573454465059643881519676195549227750953450440893566116496066519058403193663154983497437154203819963260242165229405208778700716060684766534758748916704009916082633385168020080405048885760694176577865460810820723540078488639369178154320241426505293354277745875660846622369288568123133292561261235256785531922213375332813363516492867281651918872071496312751377718845934838314667391677793894714490889453532680855202389134062406106528371557396680459568935062620695390268278489516786937751530412550577162465259150382716339278325770531171352930227692196632869620798522311181142960193953850924687498620070544338109430949277948159507329879155210160241450119748611369522285092212852813824570293032227779647026176189223572123084451190061745506256343264326562147424832561761153522386762221700802908370661822157393320044695725445229989991188431755677388407747966911115439215417944956153478651673184696643896949254524276369957021748106422271849652943735723075220056207411130072896924286451944171527022637264455020523596282445070630771934761579048221305568215457139994617211411085307850660300120371189812200827308583395539820589069061017861328862614076955537014856977190049697039330309651801348304720476087039640721882498623638587478814436784569169724978777030982272340221145046578552827191352546947143035275990939793413754422719012024556590240543018750125119716435776594606691472552962887122631806058400823255622524530384727573782908089505801222820975600456796411789607997183949633694399179379455469571927557602044778175978015388866388477893024649939309704230972907459714140113585529896807765412294459996359442449522528811461650087362667428633366378783346662514627715854569781388778149878012550900142410424032639113511075518363232906427235201384917342979688961765962102151375425532423292393037112830729746922825304316043663626837496782405688495899065655537216405612388901278198928051245924054604064320232470222166534446528962122067805923069489828996675843271638295113384222501506572543452808653339012061245181593399976731212745904191650313808438588548016446126120674226308029977326300360093713369252084641668517986682964017531891894972707847947894703397603382187246975964105692629345413266060528347071427038400660608705761598293765664181968080597125867912583308892435338706392483149232139991310577488003922853083026387762353546878968616781786702320683290245408076838623224983658193002922968799601420269991247101304606880493000638853120262969345837845575632652594203162116188047397369127024269086257206506049305152721408369249824397488170653226655559449775665832715337829296847540526548358288035657313921214610780153539347835226207976076946168876430114358524272233723646988855002094455275840302962666856844081766293291452137772048110790637266536704660807449519739327018721619044684676011960134044956848557708417750475836513642574721735576244762978717150713261667412716273664438107629604313094428969497371965141673202051915817445633979326940820989733688568069901109275117585286470786533583664247227757623461868123616550942380510328263064047797942151063136084100508835563648567547381317493212871351484118995384664462190866589013506449874230637279552571417457669151996916924270409859368135881488538365606716772030232698811184558469064636039865808366906057231656211951193116937650377253371722258540457313473237383533121791937083143459043495393649754643213866611930380243460376842178995100338772584518299046902703748625190488159098692582062884386819474282872980115522829156617371896871414855580179892864231619779226423289057203279126691229766046555328864768267364321578175263384079348441103395394618249025089795196954124821643685972538912223482310109199583464708899243992298931497078502095787511123559987214651034665741434614829428967428333802394306584477458469633359430987362811953453518400356509454058669839297226788372776367280158730642818372182875605917838630804855852420246178189659203437587382007313143987554772337361728272583250185719831437811387405182412368783988197961286391351624156213505940541094805465500164206288920572949611162162113050402038557325431333024558950631067367936611318153854810023507303764110973942973756954917700791836575148652033411756519651474800034591874142970228482783950150557217039469375536911748110596177461367744944289602462137274637274069720165611598466507748445243616769937369465337749866771841938628315536271843426900115553507410869477054081430287053781532316668174001761433261847823250273169400494042990324465308492795796008958697421991828212877366624163731089097149011406345956531300275914140023841183483485265586993192321555157485947797690816166469044557255832260658892615942710042684013595996265472441252752479660126933682227709014013002675508541470117652788250994783969626624171862885916722522793464173019418067898505345599496735174015977358875619968199716219533552738926637031051890494978338580207273924479022246491648620522810980430864243281885381172828258575698372088024439462447934958632586064921165575955786537269481483937723577490467737221720409666604585388204859474442997324805317238786488235195413838346371458154199153397286434670625395599277956221756084293733060481746683886469999967199808248860997598988465769993529406058206112180431991132713457015628241212019583216636957380809911503435447564199491276079636441647078944643232895303344668713941249744967791690209229128883799300994462500424955736495750871431874087322800538276593777301272661937240773237633293854544754939117218573431236413676044727898884777030673570034488739595200946297274238360844588881821427893674692289872719794617552712949171013259904704167278643987743105273334320443413659380726864695786527091362412670288650332875617283949480199386204263527209082186767929892326304543956845184355613429740397723016551419039154318260427281778819523773313505580722929854977110755322952416544942744038661223221183759746326498482668536001557277096914159111874312153517083375211013183593250726321533259140501285618966863802490518474254707070066879721010077181030496698210597599398932161175581512349806140123118157674998684530687977209656109669570842567739926631008487026917889091286956137809901880327742971892768270601951934752109320934869765144253043800750296293513146606452851069332013443570630554704382747449487485536496427956274784905893103873987768740604182379428000525642086938721704335210558279257980735181414966979314982367116027137599914079057701202907012346767620471172401133094852140947507709878927974690819147519376781258916641942410215263854181358354623399721795114283058445754664116386572155146227613060724837022655475289960130851827789796741182786701725436689175126115738951255328459283705735673792038332771275966384139356869886544157959423900159524818315186940605161679257955706740318466678645508179828694369147823415549800070451991820864586919375260489703149506500802123898113416334762997208596193606353010669216102269842389887094552624430998968131186451615404193377168588441373578538825728592377440448612020203066191898235515693843215931480135839738134274029581253133656093204899636776425859689995495873537309952309610072133005212939182414561325696226801098867717882906061991955075678342181331882095542089225604653021264291770836186590776579787363667069660002867694074402468427249988282181175359142889347493588450134025762040336381857980331092417620342654222801867511538594654519800002440876114049836951162662750192372554175899061991906290784393548297931360854697304660217388326454025385317464060515392460270735562634219706400179619734817004536958508273604064174329604012897892903752485301302318494759650641425275359084845658186671712160266483012379281979192335879671133821261746570768835599550683335228772226084199813244119457702012788644482031756025391901885339469726868198018085491130601667643050694626140156924968196367534431524629400571184798126488006430721476852350356305114701192180938078185596501406019121622406459154304979668159832955371593225491929291926247593357479974910111035479049436421729173094079651242582981533593842859642090017067207572422151856331378087765898272716477356116505494492527760323026755374093035374204268993047047278479131391553691647838872720204941034872333171803661000114147594995620657679606204475115479977905970944031101379807757313636918891924602682562733654982817525199083912568378542859662922923704736713241305728532013661459371953714893728644715593769353695924513479019412720277833400288463057686946226328790417273092172568136932546842785412317831005776620608067442091003848742510088030854918907472765326404312356309549410618389906172934527763348333129738356175599668898544090809612543931015042371463710234727490208128449271087498194070337397932790231655494664919249685556900070331820527927700923879904712981785622980056040860293852786608014416839444705794599237330395343625677231165730337929171123427679896358733212313404887778628928451238376200468283542093779290360409735166492249355597416078350393046779330842606201068250136256437582935384024422088122049514231186924987486386922255709770571686751402668463117086056087909722759647760111192263760999074221853531262551997916860630419344885774566813330605196726150306444911793623636315706197278750196545874376400639813558827027494733550174136896390860197943805543393966475454387001187325653165083037204644787454406449433808128377060422465144611339962742733002574791924410578469257487544550966959852204997217505241888127436816371252790120771208092431156862674023113879531236174297777218690854959431629046382150819392457019720688697146956554700635427875989653883984765265971447058319231040626981527727045895977255770905523050300664800936806107450054604610397698279501524594807393099512501267065236510023558743136424070008416804213522349576537960765214664370640100210453084611914479027691656864136391290070746628452999965623824867446732398214983818615825977108668636422441563513003831975312156804175525835009983723583171193533501782236576964961510324559549005090600262768394195823389119794969001830645368080861318691095973101919011548228483763812949239379397626324227241369442235711216350246757630159193695160367142155317905915084581982797609343509326821521911481105188403479863217823202421104691839244143919644602509537137465590142091458129871968626743829025365323860594221268369465152742323854658707635430807412874755583770885944383748932124569993895933658098650493753903580677968213439946116629845206367354440478040241152208147047847884378168346630550895572113154003279420848335567732550380587563785065372446579951171277007080376181880859588508139391302063701382117980942753440726346766393542850829543275168072355642671555135145516266084215524110054708924580833152698259832144444062702113296080126316162775848061402470651419774813974402257085656428945474157242235893836799387584558606751664927393493334857578593093025923033903249925802452928325559868490477635990253074330537697360009102142806389826773193350715830565814882983312166010168578638318113581909715614425901966904069916789058597977766919792967752743913284801516270290058840699327499070875081504588210302710253892626213023043634438957621385860258666727257127841683811540495720040171541891264342129606769050464645389966030356482089900989596777679522985065453229500095190697538100163379643439267150956032532346334280315920319424327896526362404605954432140230470878470882264003739306894517976684362812045551613042852192669772965726304705516783708137205632647644097851889002247751584331244400558203132964873335621281299717509879304619288476150109332057109283431502529001299150493028581031388664548216000769077942923394288901958119435090722574806233751271973249874552746532634460237024563407790213999716314923882457446186579151315812380783168745156472877906107226071419443707680584882191451197597628219448713650209673215406805360654332701478226078972457384732586255866424341772998013397576055716829423544245310237330356105227120287256517184974300181658805985949145921001482457911564043446049296375077517623765343452571128748736683475042340324486422980741771950961157672017460212375000343093255257855859277198951018128053837238080978550325407234199361789853768134577442527702115229975219525718789959045191073349653955820878281896398142889923003479767972076383190379298185808476922809215238314249626074164796021558425557210308754766801631838440222800550783465777015428522380797710835404996664778131573332303144318415473153348891859475225796874442481044462069842108821743637445608331048146899622744287339341798591369054634267513173964115613718772637770100806267461469864702974890809600842718955909073251470396524319777099477171768967587473664352749169748604394124828227185348843004451978265273237048553782545156365567001316028448768834710532422641102380518061679205162015773801588206664244457180510418277261829269152549407626154892937631258492719033672820382433466745502235228363223303303588498621164057491411472890847331713440771748363429011212793517034275378352451698293411530204186563333810558260562682373432930496010859284665817691922432863011084933699996961786462463745048747116470391194990030628015332701370191200450760857094229809065249035739502022559141983819390742711457191605178020143282612262800696462461845326859864102767722533666771388582815245205576926226742350534264234612616163494445478555919018674566723039443492562381116590300549213807725226129072939143803666847794403804034573197127632276495815673691688391776493042924568568460383396331869780349811708739849417094527914268223170364569506352973511214621114908992490959875119891914002201928543340360020016065452018805546551793704705117911784155214540116673803430547871133266630619513912440304683435504710983133680288052313077803153090031854465575440001750060605408581808515948034989770356122583873261823440265390089426304521951729320287328409207700383100123151876966524323583031388935239745236968350327632037316230013986711095983640286158845854503322070918325810361899675959053468566534714906108407864581052288055415062268431577178677164927351157974624449718170551912415953093539272615139170040559982269069144788537260760097258745113985468798064087385257717936930463104173511481167429308423462459460962543960069832104794421579983837186447051182599950438328122680458288337425520120137574451732030637289392014736022854027545044245408438033635786397265945453723332808703182454632061130743471916259007228432728541803309270197500946096444605584853072197436724505877621601824420511356681513957999452264448682983769699343994225768926072658063255358146106163505098999696551897853532925142643283744909834395865851620590128292004057571404777642678387685668703868806130918608461650915274491926100585166495256709407294941727457418325940432516141904359150294292748288413140787948986359366462074746713836604803390213998570822968145438813731705421355204337496672010739199285545674998128780178114493708777570231591229449657604145369857370727860129063567167048674305858866375066717347101711427057387739505853397158515841254093617246606188397586238440372102294736076889840979753873898793143249127390280808824855731104585046537769857330026521552755052259518063241611856641516275156726512986189523254888151278812592686063111446785816181415218227445732930445311585144011106096911480434585749527586559521968949018049836045512020729497009550286634399863511982953971128118927749655951377838933784252855345681378774160557470438174481259093651353914975509617330930104363369097847558011805545516823230152705422673827213285554606402424177535395875396349439257879147269990316570555566363631107873583908853302109598741956597344312363552802425107351220022316890426842094449146094093908848454232919398697089400054268720672186047939476318363153358024503206934420826394819801998769864748411198961176921530138349929123130568849437161791761185855627806231398428339981489989031517554700169925879901481360164293541370512956624760397990743413674286804847840458699624232365464488482648339370331099527120400687180993305421299234942550487704295774851922811662380580543940934664708380776764694636606791934436854233668907969931816983166891497973095943662588130142677860603610047337982454343702508574417771555874499100448295382819121831778816886809637030681464951442852987045658744822323017354193015398929135356947939839140306698866302482879187121853214437761579840307617080110522099185105281184531897202070221182174780155244891343031372681720259990267379551766505422208965641261232230697112205687652134593678103177579970271087834049239379072209949397401559634057001243257514833108769363888955683621052565237599125728261239118022575912894175987408009344745117251993238187747886278888586407900202408943623153890915214818002421838815923966958787049692850878031566893781773464813916368968542781397442084762131956466252849726966494397504673443856343004132647844309750841983656463183520640918053128194362601997214048354393807871873141019891406717655832279814142519576502831792032213339668060138693124678086147323694655541522077131244528253802212257686660195802890422055107005242552590674759212912277749904354621960351337529800061117715230093493340418671330565674438486174036271062712551650355860019081761842688678384695345181209344993751433013590249265630411818871254942665247341590902374863056013659912681932484952788985051121820811227358115551518694832616404366490062429428314767614403471928494311323127965060377740115015320155059011183773686991112928134219938238861942579094187368578097611857130108971701774055507254283957072531780780052063471633303056993180268811324636908498651379339810544455043184362168932560296467858789354987134340096423851366091213584971916411716002520202011394261611806506910717102336647860845390923567597373075328613344631519251210849547351316195902683921154170420914315410594227945953667999824864089646190094752335728668593487864038958074636801121239687073243551314746481125760217832551027923488199932464686665557283280854081782932546169494512387423905425853523327120893410410728807263709579745414874034347298836164872219912390950976376370657059966587673786130299383959548096535839326684422935261597602533478601891806412747416883653296136723782138835982528170764256084886875777597602961751140496094774423625070287438285325047835576946313794396636877736116310029692958421411875762799468941694906926445604500237069120930529645136448763546020507845697850054138785172342116922512128840514349291988431425294645753905990244686733733410385281678970312606729383537299554607797672907990394591796359202264492486835738568186180945133516707434961240365199176036679479430505970223502962244183781380913196804818441600413779120622805317818799661043554644440443705675483765184690435438142246744131509594661229983124492357221608279423279364533295157372659250705441584344308292111187384818184306257974181607894350319552740374868519341191483135283763350477192196383786427703966689423831363409240725954775713154895328593988160732590160054997239929414823714727974826024035217860503862168944433455274636864484104518503915125790030638481521747050177942348449246957290358941785218596751364264136325302012127514536979011995360578526074657060450670609980645092613668861127834866905147761396712739540375500705135160407800946104520181528985815263489926159911880084213321212768952431725838938601672188812651102720142982130177098645113732975494219793752073889227065759762609687893651335914924691660042543013159140121403093465609000857166311112970382917214818048185101582696684107408042143042945014390810480019118356949537099663818754715059209366691270390106111853299655506660134809491448878987832685380104145003045774887739416422218687559783784403589016023706079260754932303246949584114360114089506475306440896925694575031099223891967798964042809303692120072723649900326855730217433709980256225249076797838874125035531112686624813374295588750086023037138555024936706002261539102751472102701168353855022613318138841001365460254229596701129402640443828649877042750795516229713646589327314125732074265431844531268182493212072736085146019842646560868628969743149933436726067266230293919685332063288083684098369674426608064526187772953954892826318674314993417979569039823495888917128289051117477198054203719038275454185022748040457767103249901035731885373830510569953185345260681492090178619428435327767997448105824239005042284690390909455119903699725245439425773459997919739647511506450037183108134359259135471444850889646470849065205304395614092274471027676451130301998192579884981980383331004755985458519740718112147812962705310617555010259274607985705228893551463836617686124231748426817936045494654384933976330192421266623131254582148198369659191509650211552964003305770959771233149223935846202962723117218456932567654472669816733803847092639735772223976250554596127643265710435182191800068647592743527104298607516812775387380003886771219532565745981432787326595836968342349008462815121251789385562875463614831060974949395788692980727720786032761748572416672895325498419331366014371448904732847968285929375551256672205371236319010761607531035489389025830582442491033340311783200278400330573275229324139285691959682207033048166845240280073722049031522270750064451502205702838802314453492907125113196867357626343878692666709910893945062710386453480965984908868928331852364750709250772228522623061255781933618377709440518884675617168771208213362028807000568991336640250325843144807507365386167323430530383757386514877678566741578803351624259009223626044690394968507237740190193077024096179943106691946391713265839010095279092109535492123342892233114535396448888859072578357724845567858023341418639436957064116245382812764104096389861125288235620089839796959708844667271837724791853923155783350300837209697417124820469598763421016230556944144273578255047209140685603269167269642662464781417402044138800193094975708451596078152422131206951630446037496865433989208174418961047669463435692646401380865304211042807149992732461476622644253291650530746199877456840901162470871578154957110644808251440332624321213214254142116691052442993385768448482702905034603814208635913143936488381755746324155738630413306167461255699186732545319102104515653378661263778599973833109965924889965578020478609385756785428483645146480030473312941683848824619427905074772081786032588682913441577171034065769355232243310095044798628461790230246155642424833564029628986053338033122509288271156493098356126356548508541821956447282864237858810739664866039796867178105481303341995681155609103956708352541385258044674233021538488882256047867864755689487264233200251948632434367557411696985908027963208271722356561030717196004391383906360151985343954617673570213543813895091001157665808641175774156333012362213294444222039514585400935738306777816189406291014204426171617177142780096988819473458459887462124401026378144063946634234937478266777216707400466276855252285387625315985860983345555708831049494034215551909856922269254608364369447708759473754568912693844211940774320914411502602340550200223765229096489309938496752456919270003385668591424974211318904032650304107631242385298382914407054967999534142551977432253069569518207821850880260921220586532594795739409805616209429954329604196061909860469006839106493724703640208556506345365382655886368345271812409551029573250054776291206004935504682461872164043783174653715005083196118181680022375451553428281102240058446959296955227821993514685348539842528436786789259135360096841258032925547689013177486729459318947085055431774319351281557368747716393992737693541108230965435660525692480717964031924241664724388845193264670242141356326509471299306016413454162671571381531753658371397956451669887495352630248631157664761965740380082152914081452732415621628375282370868233950168887184531780269004718739099708910660900090201255053397723188285495192828542314394947620483330304687649237120551521237832434525777447953092911201834715259217245519280176880179885337857732604864405057483694102485505256429471768330406332418310295400408419432432940963470934061812695129941627390018523946146290853393677169776503143927133001591974399819542958121940959619409121036386106497029519948200613092346225268222984335952952211870862507812271819553684431413604081858429624556100379315289298469968791166103454024434690367788140204407001004669551371707738311759495150757612726027877731029702306303481073738582347882595922394576946021621186829772467105355572710477124514971906584017529758090618910480942805666401277004037346463984772905375809948144463853491825056157101189240572959686371293182284160480818545596306440473897493917768183499944319205900645179847295735484551449225229261645269968906429508149998138016622129015857135775809846587750617782253958791389940037001143544832241065010658361305409557331037342515976928994199426578267553413249193592307251067458813978078291350669052525953950112448480003624625092254818432528874435095079342421604083110240934432048412320452642368267544141594660095901465974593532827701312505826582575011497446990637441740616567155660949020249228616684830320354314707270016757257201734175571113012610174151094479944413698938350396910278103547991209738636261259356477694949886515282971734718664058449032335352583037449070952755124611382023143401658303667877578519296296527334023449638130475844470991345333618511394777165597830452951636561490737471919475646861928324359374967832521186421053437409487480470461954966554705773855950738645971740817037823241512416093275245345820788368984925734262305322634441156380026457447197182213483013402950350246138649304465256498219312777160525099167726998120704957725403800575045490582281116114994378718817183032439438208226746360325766986720916774835054649560456316259175632867603045141112409889552612372622765216331693789078480741915298207295555848306263838407170482811223590205255671667422964415870641962144241361255726603720198161298973619057586912427934170325155184902616599199143436064767051953442782556327831427853713857411098088989225849680427893366785692117780023838758363675203567047751767933295657237755027185531691483903456972232893961200648229859233228579781125136864313569508852945160079164443773633476981446295403950535828103167719751726784350601629663178850550389728335502140195564260831725188380387307159781158911038797569919167004945795140577149749170901864075423619030300911182620763077511907189012876305215130787412613925421216160360751332520310931569700798283937005333531483817004253266974122408656002783119309246945216360789948717449837131577677922669864583629782440739388630470181967026233829667565773873102079102987908580164142215769036178315875089633501680791005716918960107298151922455023391131279507844863316483788898011992028922935242614044660187284736254085622682834529882590617733762378374747202648059522912576707100472276664571181081828497963723051983320823361890551873317486588183597041968899647405888812769324885665206175649824784331136051942330320955997813290150374169555690598341682414758358005345032263076159951017735855589303019820663937187166738223420643133072273883753060709742405287892650826450075887658352906610591407918098029363694819236430463321771822021175150958737396912367945520530338753965695796553479705539515710152369148055346684802318377472296952509107769076222779644096906583067893946837767792663232669048207226484434581284994990609048194589647870843829686890438595763980976771026423557663089024892131001305788227380520948975891163833166047675665100986690807244435880890604269549826217825523138658314976275936944089547382635813595490748259777205666498345149897846304836074875260873003896477439834091090867636750095043118229481634887286877880618142748512183455056884216089061037969239651354971148328982756655369145281624013806819439797157064508394810115585016956024709722310092594188732446592100117958881002635994259708482658147888287467568985217077229723202214489094759132716574769640290873606782618033552995230016319587100167955339887968922205047010011389063615635451818872082020951265796370440182994059107927214391413065859873935945939866806647249901995379512541102421318646178957796346016199498645184725987268058320037711898529749988840623868356343243014613790813886854385271790938818469590098025543064598325239352259049625770848587072012496241155997192163530260660709931448706553743372471711358996628745306173083673087048269342745699715075360398067471245252833958545215646060059000665959497705967713122400751567337815731755845116818658270900111989799269094832164568929732353735566608022923214255026340432900765571233256796055879631067021720614281128969644791733928937006346217595371531877564139995663256573848449072798997910083484619753891994751816910829518221088342707669386410746832407567737548811686421700767615090296347645343686568901979295358016279996388099431659129877979491614467543895195928365541638941655634949364961607403740873577172023120167622227906175594503905136634860440145452083845427286042679614121738077233331267751337860968115995259442772881335900849426085481298429404772477164459261951878223611738672150293049444078426200516395163393367687521048654041265810615151381063263935652729823202648067856665037222449646098366399836365825764298326138044202049679510635928460540367467980830027780617634593554463824431146300071372144602579306617234168891833603527083083269873328058909495444334975114655549063249720495617631057572031874245243997961001300513101362881251642646541467566216418471740031857891367923431107308911790203560135760701742446161244397707823612390132206932904487297474667708365158321867415005381327784224688971310518664331206516637603593863201168061905577055537633677360364992716387876270201457406093693672211367026066251359512820184684258506560590497065152819145724007871945726278627820342047898093019876389613692251293554098133528921703415241378403497988370527212999054917321986991814063285400208883044316721908821428731628645291282887066115443721552877170570604616124348447368192516248043205025944481980530204535986716383404018559523989983031812399260867758441326518650885918827088514421998934133330104671880369209347348081232645725979472839249731922910513395615257747541668539314925713185740795246049806364284790354471628315103815173988609118640232034770300847089190756094694855291947481048264317280061195943077860015918935087735267314720428607580533653591482200744245764521762708826753820707439580086465928632736043303848285308853903855332348614871305843065583952661440745127334275983316524983354636338311850616828793114631386447872731549903896191810618225811994194258543856474840852403622495390802298101905113183569217747553051194324637039769564669265685730461935387485745474548531803797420197881185660590162228866272412460152679622021094012535010728078962481494326411253419325936549782831143489394327333139421162015929032280145593875719333520986496480401015368469256210183619123828239613847237761325489122341426463456792867754427053754130540233036035263170583560480037008121865434631069654336463838256630571872029280200897225456315873962517477987515356054666388335880482803738335843281234886361107822104373467807207148152456587769815724600397786335996139383096925464081053403190812702627052226018164361018089519728465893624253132229741126080320799891756070655845964271557907548948044677077363863257868119670264756034808085525933006104325450582318119445844371631130489034386859999641254958672328012330708972446485735538272452812683116142324976642281414157806727682979925482140939388726958044973071808687704736117992808583199418428491405610310555841404113412524512607651482794741704104508555513921174117909699949944138077122359611486542282513706246826158111267704327564719834230477914342600808913796656021750262931585150361150826736050413848790484905133275593843111446885863249713473516993295032625202150709018861820843089366420307862925612315011763286059087359702646725316162907318251933248352262736009240653208822499846306085714364841289204210934994061604517285057191437038278296329720531577065146776291030097029355798319414150197610941914453739920532379971545817364964168876652813969275610223555143453902384109425782195979757650614340946753732503697778300949396933922189195629933830643427842357993425928608221704765171398421314049866443720720332523788140277791693319134495238776754114249069486675919919115524635059068477480012114318640538800382974854180294512160755863961496844546963247293230634774004814278524154396815808981949969899661609677131701008847067152145047651867360230416267953917241882452727879680761316075541059208603633056503562463652855050253493849478608019628492062758037223414401417765687997128882287982851856003322488026022040865006856147528873435385875797540153930164571391471671391160042539309854941702496529294867154798015788742502152230116550540162661693692539273155844284794665714954330600878709559778016078241522501246825227935293632552928387677803748341379225975660508623451899520006550271647002585568931118574545455659515660038345490294841747607977013620826761777237291808944805985937922773779602164771924014259621421398152048641717356805328377078270519526709847397617420484043908676504757819931941243041177123618041199834460478895183606359631910158614297021460961506443641195117499315571630596201425150181128388605065882437056059202356631642243208507714451165052845415067097808080851672441966218691001993587878740388639996683623023734138001598565353767664950990981120035086276433367022305016868201908444769762114808566372599134247909095865960176282379704629611831845169982707258625668463208361346123275876520219495822276097730472791775307022937656401471570150603123068394019432703602830427629891416112019683710380141408360658819167165008669555364748658228361388799129393430801106411036742406503306803992584318621042791299946447585114169600357210438157957095528391813802687194266709630039430263970789169155406821880784658555589183142366431661016710970043339646209991971708490052667399949393124645885563312313000565256168576816471242098741078655616401684618105443606700332167319459199324804559567998844314002622600802628881188006088161891775688908776969324799915484922813295198723011775033753773984506158063112672102525281790176367584254556349673906995336472433972094889433283905354468728810249741810297092250546619901076403998845317693420655635133057775389193863669306991834605425655868705164472180005264501435736678480521635938716050416503207778590785511538467619550627020032108893492813556129597923638223179897023498575923081788821088015804957415400699801583142361538757925647242388065271363797533919781055008828224632453178217449526824788604797672702208962436493342699356518705273202494331071951221069318730689993098592688654567904468057095325225333473423398110323034834929517178574105226269026108740903170496491984283872607251986315802385098293436390674754854459924659801591397981418582800158623004657928930499141495824770952134245875818682387530291630027075762725947865821227819368622145724985158466580099763293854618850180801176478217411245219876559766971294143696106113612302343864027910528445943043133916663267112690598511400033628218370711265166997699353177108131047643498369142260604016608498278071054060236977815657846742243817272015351033515462368642825223680361745623868563711420294182888855363490410712215539677378212792938504001171148596659381275262256682730800334574549206704438125823923904766613486206013683813771293988827994751308475891995988301215387152574419412381447476226068834648858706639617162206593451235290457471618073014725679837379893842150101611995440452298353244439201356304245337965099464541409401494998025031536565597836490234188808696463603490112721627711519596821915331825959575551885212518211442269003344859271286227913506007307492776291453029668960179359667440503179328412171436131912330530510150770695249381710538279056954140700591999368475200255875436698833909225866367218550888340455501359261125896501916510656688648535225387182212843221884399211433135403492193025160357801967177079276486051857093141011025001336496825522387474808295736361392021889554180981081598463622614232871932724282534643030508717884192962595416173373901132147755094503249975052901677902751297694205366921037547465221635547109834317374178362148899395469037802172487094585186770930012509897916799608892358494351340358146933481155823397177111871069488870844726702308338279055819352376060712105984288779181524985526892916898169771532756305479326497428699889380770355624262738057395122369955283094631409213654957473184032227153342629154545066740409513258489251745894951453040542909925854317157799562581760030422099105501627694451657079935138142010860784796990853862871522191280775790778371590639687771159316980947819357536812939905863927717243432556756272342151545076411956132389217805472604221690864013707763682018315188952607119946758811062148170296556777942812437533627450340974634326975205472489671702387269156909914717782582977963643216463960975465090627229265120385884158666145053132529879199674915773930220784503882143864875273224940706693965405173279072485994435371203100135615211846813669839874064050008341057733642309562593482175302832142539877643154259022027570686612027858107329925902923992533804455918636701337810809181701161499325971154106538957803193456380395910615088491686184579554366213353862404529468229005466380181873403409584627731219911460708898848941094056348224778795961427666141965047354825879067952211675767220530116000295439261008669342189007742280071068070049356315167614419942532751651005774976056088498859079183494367859475921643977167294332870981630985883183324300422297953590981162371465213620389531664792862643382599634861925000395120572493802624931228823781014097594009428931662915167760327883521129852617756650413448593360913038295175844623203494974914165179908375706734492901224902529747574979742050002106663406003731866003308390615816816885072065325693182794964309658585406733281728826923008660251012331523873157425596492124889226549015883614419445399308078104363183239762732476535449006179002325229065282571464204281914919738887388806093573140020542097502020482802396957530453128838606753183180413618231714722120716858511620673458780848212762689022503174722516119261588243338767449952444434492732505531744736476097910021749893176437861458807350602081308059329158498808470348829171596127767256507414629365764148529834296644442209403194238593555813227361493776673378092377609835480829848834776365785714688656577506221151558342984932908100108088372100268085844151793490975148337058265267421349296237603497728123188032647729521086794670644515840940201571775430350624975038471658580078746878268495164463287848960878856056346450934896163169743105045165581323819513175905223706128682491544237639104590089628822641723836875903418320273003356617592635747925184879866743725876316742503710595986069001288762512476804118154783404812514751164897754250989522763124616991870608224785876468099785756699995690777785521839922485175041682536651172403481264582149129122640889832309992014062260099244291268883993005187894563801642518228414478270295351387046868187081518459838095851978514656128229212018856271178656781951865372510349741871729755268077300762982107262353653936518893638816222941960957234072662945228277096588212009569956941412021462076133412738736146790862165840981502021144402381041280424251250883937325527577117337986616772117322486188058793070661939091520797904347760947648229902630915645259852652351426082406577287674223134756799727233169989521419114425894731716176653550245770496344605597265572794815166192064124403378151092763885978383102009455257854519465550301246995381640601210343662742827682420934279626373395652395999817378249059327854481350431454370932564627625133649242512820576486994269314077980997512181283650077115840159571482838806660739273917501233904422474377532434136501025892293378909898783835997744621072578866963094511489842039592491140393655505817457506101458107717258837998857511634160292786691167461904365591738425550323512909380910134644272821236782228219560211903524789255642834093938631309207016144273343561768392015946096695071260787134006919955539723059270708621799610107543927526866927300423827447908075410338089761911335554236211607220959786761543017923621639938468989547957660767931657662555862328888341958281025006331151526846302872456080086024493507245030108230400783031595576151219819834046954989509826434061777922015202698717273136926158519899556374615974574751476743761878619405436331799448199218707421684180814768572994000075233007328760708771469685534860487027489184792709249535333983754626094433733032515199669313204947984860617843400446621737370155244778071837898583388336317051871475231701394053764483680409312689893186371509520310162182341717820195936661217314875571498709625015897265778525908426192975934981499327876012898297481801302513955401656740742216850342293182123512761948372907243591709809867936260493428885126511278718652820255574252494032278725612072481843951172165236478241369093618112853011844718845683244161791308969305441124717285732154355994917446499020686931075617421667334186609165302628815065613660124919531779983740755489097111398429642375934585615080318880945851714180064949364535973649030877678201116971542188813985546353470746080703026718628888167099094905487828127808372458317234986212227785960019744988804796058282310039384459545585269109729037178184648276479018986182113845519243079489398133256876630653378351331911274848188248662596501979226917582116118414287306394568957790733295371259982778148292520276396147454871187308323855969429534148144661681789463134733719964597750987783364244289405724721486331025051689631320360354172622130078192112932513759893682282761898438094232952668404869672405207574076058791075187428450213304735992945688679113077409644110920248046893065024931964522048240938556520005706710005859495886813562695510970268577213963715728820134124358408738944689728844164577395064088737288423942837489012346099566084287150267414187495425649479841848385871962820959477885446374521648256438103084109135495704911087255494677079761801565634611237266318594849791726944047395235607649191909852897356458928629738104459452802907338153775097668122498603398192996423582181648082577188518353374547684930803109595187299401366263822653454162234774772311308453961738397188217257178280423339056239809467587898119899705455896748544161972100059530059884503731622192443130376572006764511595596363774526764097092375628909773455008189308634710975487576532392383165983021315524343179231843380356936802680309074711077530643449857659333638389866129257243516335469244971824181245127687203135672398351564301811199850315776' ) ; +test( macro , '-1073741824' , 5678 , '28148898337860105994977487045818154315885187098857720123923019503536550068661096672354637598480165134022041984837084308868395452311053157640615896546050985553558586892645700423928507935726495168161698045415140497515602386527627319206488017355554288186119966734541348472345944365178980166309150611812365395806608007167010671798672218072170128957907439061754394300128594626814429645477396628406899347464530711061456854894379095840425674956808441653400041181506139011927908393244086335493121681302022622095101860620829845276309901056671871394201026397395171820873860291913878080280170380979892472296164150372296767377145551512657194585337453691634475382711660977481092241928982823053143625635560423178221937797712042117395219329456302241242041523769729459117196674726421874136677546084294826873902192894352596290458993633922997209073832114653500019746006542685067098597091796593235383026677957632827401939309333387666537839316094357314127534920705674404309028805143966637229018794907522055172849778130036761405770603918926933967928498088220730576083729725145992964744748428164200419463740275487586933626822729962824800560240761474558428430552602958126365583033236298214451648931511755996108094562356049299254807663118738845759260918867850503834415322452603653397365429159370357398957195114808416983753993622244836716555146831907033098694343145327951581021334647653286088313114479559741196437718942355964184601385362964266877652784804939052253222575619622416395426846679242522689602653790030499520892085577500725499201404182852867226125589028845844427853042309885329741850855526415975172436890910632693916719523636332471118794070682433535223602563287248795595868253883675189904726519119448801915261351526420699337492762857231988691678382926943587916545335155283702413750409505677924941689908432596377494319662783929468093868450608410231488451353317560659020100954006099204197631204922322164052615891958008133081819761014762487524836715828049458561031763108536694043217084348793653430411896364791299284106421121855831489687835195476115378899943269695006351002750960984964426672142770799033138424141023720291141340435508636127792984379054343612312021179919125313130082850457997100339188672577640528770106417201838870495993792046104170422555977835287298352499757882230600591394487250631375216854641145304444397854662472195749485109206617330733383898435103350307488437904097790795468490159665178407362104384319804361651012650220132889393331591715558188458831449467209968941910069520056730023723713589013657691484906132221013788386184219197754113246865122654385680123164873741763553852763331300981166654373006819001402186381647154946999554421873268375821628561307292124869782352332192908982894920263895011772173577732089662917292761688897717750366293629569204248484060863934466108937195948443800932184673102763342937824460121045896218443122360882698024688871403860910852370898051562718960418260546695613954738347691519692022893663002976632717861663007580356823097781646192222209252702435357691413104372734064147456843965665955652873096110765830684236182089087886565807972209217987226299585696168982138854941280194328335120626512261001331081248654357371396176501075032152655115462224365334172115688122152776903406306442312011439667376618560819888585728027310382981804901247107028140882078332241335878660689097272500434681089309886067525115434143986130726703706878433743992681042628744048964001570508077876948518135387246241479296880092162188798942915085422997374189631465329853471853984489176174861323479075234363120290867769013702739919612009426292832097099802965008680479851809369240814572285623180146280697670984531193650342503967101652478766807739947358226388629806728654389375296457819784548065774571293116718672409678564611844170365489608651048260596575158516893594390739121659741649999445353536303503061294401994598214548838049962733817701620624687363493549713852174836185700963467241090073849191740103227875513619343224494993071747822732607018496581774525356633102020037794640774098109121417106381829411247224212510736696706825452538654935037259956407630578146638429226378102600142256743099393349884190724617199388463752205790794440451940454605274720879574121263752007572801341506805655067825631941739793740936589208965150634092530408044204662895618653609322262359163887982449970383124228287512441583793977627962068395199273400344976325835945060297779883770211181669216457812349694314847337342309957623761533535923980598873005880875269599846465045392510668257169787436828598047252165951647190114307062027405441868359474835271630041202717715681530050858890904183091778324015733255757236109101580482580441967985828890176389397718041212941356619163330226370976268329734773630524413753494529257754781863229577908457569032718062086750844184472834347570239536056326155201810881038696860481717433476664625621082241586991225812173672952437197866259897373157784743844679729067516736518800101031672599250959815137720332161848205045025007611471141186707050967888154770682560924038751737207811193901992570725369435103201791686524505756647772640472180936813395743439078761800234463478180846516292693783004681080895964724137021083746991000603574423399483472642365997697739565793596648669477318614358267250383134596038860702874813526614432265002227880708968988988737493080405962374293053076826540765411717793130826541346297462776836630777435661531826481318792145062405811198530844655829858226912380798813160973881440163721569917634885574462693105998116146807054360746972666730885604323790569427284253076223964273715359978030815340692680006321945430455280199860142711370872816427712142263431097232719784998704069638989755157328661993441529401194894894909869599801115592481835323158814300011842131902588936147873994871847028405399169811064272549350520174591847212829792438106825404534383049157807382417071716548998177187833979248225968420666706416390190707768457675226123463626193995384720198209759936791376844052254490031460575054413862573529726918023653700705063568941702083630891996044965826722959248558923416329510449787545274111154340053470755669172749024818935495960038271562190088388398068258567446215438429638813416144469861387009096942616760208032476355018814040329680679835588802653484030011247737226987035720770688024054612187818344447061414642220551886870397419965104800759185726414865048332705445586347178339611571166805268460025130817411913319730985020314703929369141828244979458118746350794440972469365515773623521735815053404694400936400473790547133327308952286757212455297814986317480141532831981218157144776502263149001123086063793023408647358626440541879077132102385221082903921513070649860566861228278306927456359858970160082545255406851398044427390606896847739909856033659996912142151062203182419823681576029939545766232546225798544936003488100493795546219182495490312417078545669619133839724414087313221443223560772275469655787068013125130766170757522755288995196083208632760367504798374588838275982584188716625435557712975930208506356967363937122210773117642423759034688847074262569157860691733884420095472655868693804788798853460305074114676050174059869840188238249706756922707852403016294480987516418402809622158722332117912191322396344308046005168529470763240755288495911503467885568547110796443005962189288373077954193026536584426645858119360236884973893893358131236585957253729142968547596265350388138211504681166184873067638534159817198960647922530056737171392998222652344768890440903942958874497053450492657340534404950722261826476694600389620993991121412934627781512375531587430119694418600921042491946241808425609218148001707575278154030998716384895216667657329409014393641864525969281112155349965482510043869560234065512374117610382279304357796353832138535779361023572767566136655174688134341190085638519772716269105777397667544752112308407281551063186641110391181368268011784028035535033180997148034817583725977310854347328290703963033914233260949053078632664379976313477320469323833039980151301644772548530801510197665795747529811668583071320734297978242386191013538568847456151931045213697759408021294424885981327060102359352968094713641880316402184069434459849295665713894902493734764537578851014033582135990357328370745283459359873866508862907217949984436520976291123753201389817868962086019717213048013769401358081253749874316414733761110700403879731481327366128134414614015062028812312964841192776605772461602572237848579751596062846119891809475923058727329328606164325877380198476851130919034536367632484283364665496341548696606675798822283175208724674569561785917038686953070189275754779088627350245328334100342506484849574784279451309720531675563912478225243235012917746633631513142936777117922425886154614922105224375020527023628916774071542994620484847765716560515554737127344964768600124294594714592715001471003807303089010784319406981481509952504990850744144964515173603048334536187116309970688343136766612177268007668348523128350364138371524518071578343144952047467567938905941913593215582743180827679406961185115865886327377643057697587542832729089317101509237763970252435463768975389494971467359397430380888536860037432765702651569010253133830734119885207436369488914639018501744924571605683611573454465059643881519676195549227750953450440893566116496066519058403193663154983497437154203819963260242165229405208778700716060684766534758748916704009916082633385168020080405048885760694176577865460810820723540078488639369178154320241426505293354277745875660846622369288568123133292561261235256785531922213375332813363516492867281651918872071496312751377718845934838314667391677793894714490889453532680855202389134062406106528371557396680459568935062620695390268278489516786937751530412550577162465259150382716339278325770531171352930227692196632869620798522311181142960193953850924687498620070544338109430949277948159507329879155210160241450119748611369522285092212852813824570293032227779647026176189223572123084451190061745506256343264326562147424832561761153522386762221700802908370661822157393320044695725445229989991188431755677388407747966911115439215417944956153478651673184696643896949254524276369957021748106422271849652943735723075220056207411130072896924286451944171527022637264455020523596282445070630771934761579048221305568215457139994617211411085307850660300120371189812200827308583395539820589069061017861328862614076955537014856977190049697039330309651801348304720476087039640721882498623638587478814436784569169724978777030982272340221145046578552827191352546947143035275990939793413754422719012024556590240543018750125119716435776594606691472552962887122631806058400823255622524530384727573782908089505801222820975600456796411789607997183949633694399179379455469571927557602044778175978015388866388477893024649939309704230972907459714140113585529896807765412294459996359442449522528811461650087362667428633366378783346662514627715854569781388778149878012550900142410424032639113511075518363232906427235201384917342979688961765962102151375425532423292393037112830729746922825304316043663626837496782405688495899065655537216405612388901278198928051245924054604064320232470222166534446528962122067805923069489828996675843271638295113384222501506572543452808653339012061245181593399976731212745904191650313808438588548016446126120674226308029977326300360093713369252084641668517986682964017531891894972707847947894703397603382187246975964105692629345413266060528347071427038400660608705761598293765664181968080597125867912583308892435338706392483149232139991310577488003922853083026387762353546878968616781786702320683290245408076838623224983658193002922968799601420269991247101304606880493000638853120262969345837845575632652594203162116188047397369127024269086257206506049305152721408369249824397488170653226655559449775665832715337829296847540526548358288035657313921214610780153539347835226207976076946168876430114358524272233723646988855002094455275840302962666856844081766293291452137772048110790637266536704660807449519739327018721619044684676011960134044956848557708417750475836513642574721735576244762978717150713261667412716273664438107629604313094428969497371965141673202051915817445633979326940820989733688568069901109275117585286470786533583664247227757623461868123616550942380510328263064047797942151063136084100508835563648567547381317493212871351484118995384664462190866589013506449874230637279552571417457669151996916924270409859368135881488538365606716772030232698811184558469064636039865808366906057231656211951193116937650377253371722258540457313473237383533121791937083143459043495393649754643213866611930380243460376842178995100338772584518299046902703748625190488159098692582062884386819474282872980115522829156617371896871414855580179892864231619779226423289057203279126691229766046555328864768267364321578175263384079348441103395394618249025089795196954124821643685972538912223482310109199583464708899243992298931497078502095787511123559987214651034665741434614829428967428333802394306584477458469633359430987362811953453518400356509454058669839297226788372776367280158730642818372182875605917838630804855852420246178189659203437587382007313143987554772337361728272583250185719831437811387405182412368783988197961286391351624156213505940541094805465500164206288920572949611162162113050402038557325431333024558950631067367936611318153854810023507303764110973942973756954917700791836575148652033411756519651474800034591874142970228482783950150557217039469375536911748110596177461367744944289602462137274637274069720165611598466507748445243616769937369465337749866771841938628315536271843426900115553507410869477054081430287053781532316668174001761433261847823250273169400494042990324465308492795796008958697421991828212877366624163731089097149011406345956531300275914140023841183483485265586993192321555157485947797690816166469044557255832260658892615942710042684013595996265472441252752479660126933682227709014013002675508541470117652788250994783969626624171862885916722522793464173019418067898505345599496735174015977358875619968199716219533552738926637031051890494978338580207273924479022246491648620522810980430864243281885381172828258575698372088024439462447934958632586064921165575955786537269481483937723577490467737221720409666604585388204859474442997324805317238786488235195413838346371458154199153397286434670625395599277956221756084293733060481746683886469999967199808248860997598988465769993529406058206112180431991132713457015628241212019583216636957380809911503435447564199491276079636441647078944643232895303344668713941249744967791690209229128883799300994462500424955736495750871431874087322800538276593777301272661937240773237633293854544754939117218573431236413676044727898884777030673570034488739595200946297274238360844588881821427893674692289872719794617552712949171013259904704167278643987743105273334320443413659380726864695786527091362412670288650332875617283949480199386204263527209082186767929892326304543956845184355613429740397723016551419039154318260427281778819523773313505580722929854977110755322952416544942744038661223221183759746326498482668536001557277096914159111874312153517083375211013183593250726321533259140501285618966863802490518474254707070066879721010077181030496698210597599398932161175581512349806140123118157674998684530687977209656109669570842567739926631008487026917889091286956137809901880327742971892768270601951934752109320934869765144253043800750296293513146606452851069332013443570630554704382747449487485536496427956274784905893103873987768740604182379428000525642086938721704335210558279257980735181414966979314982367116027137599914079057701202907012346767620471172401133094852140947507709878927974690819147519376781258916641942410215263854181358354623399721795114283058445754664116386572155146227613060724837022655475289960130851827789796741182786701725436689175126115738951255328459283705735673792038332771275966384139356869886544157959423900159524818315186940605161679257955706740318466678645508179828694369147823415549800070451991820864586919375260489703149506500802123898113416334762997208596193606353010669216102269842389887094552624430998968131186451615404193377168588441373578538825728592377440448612020203066191898235515693843215931480135839738134274029581253133656093204899636776425859689995495873537309952309610072133005212939182414561325696226801098867717882906061991955075678342181331882095542089225604653021264291770836186590776579787363667069660002867694074402468427249988282181175359142889347493588450134025762040336381857980331092417620342654222801867511538594654519800002440876114049836951162662750192372554175899061991906290784393548297931360854697304660217388326454025385317464060515392460270735562634219706400179619734817004536958508273604064174329604012897892903752485301302318494759650641425275359084845658186671712160266483012379281979192335879671133821261746570768835599550683335228772226084199813244119457702012788644482031756025391901885339469726868198018085491130601667643050694626140156924968196367534431524629400571184798126488006430721476852350356305114701192180938078185596501406019121622406459154304979668159832955371593225491929291926247593357479974910111035479049436421729173094079651242582981533593842859642090017067207572422151856331378087765898272716477356116505494492527760323026755374093035374204268993047047278479131391553691647838872720204941034872333171803661000114147594995620657679606204475115479977905970944031101379807757313636918891924602682562733654982817525199083912568378542859662922923704736713241305728532013661459371953714893728644715593769353695924513479019412720277833400288463057686946226328790417273092172568136932546842785412317831005776620608067442091003848742510088030854918907472765326404312356309549410618389906172934527763348333129738356175599668898544090809612543931015042371463710234727490208128449271087498194070337397932790231655494664919249685556900070331820527927700923879904712981785622980056040860293852786608014416839444705794599237330395343625677231165730337929171123427679896358733212313404887778628928451238376200468283542093779290360409735166492249355597416078350393046779330842606201068250136256437582935384024422088122049514231186924987486386922255709770571686751402668463117086056087909722759647760111192263760999074221853531262551997916860630419344885774566813330605196726150306444911793623636315706197278750196545874376400639813558827027494733550174136896390860197943805543393966475454387001187325653165083037204644787454406449433808128377060422465144611339962742733002574791924410578469257487544550966959852204997217505241888127436816371252790120771208092431156862674023113879531236174297777218690854959431629046382150819392457019720688697146956554700635427875989653883984765265971447058319231040626981527727045895977255770905523050300664800936806107450054604610397698279501524594807393099512501267065236510023558743136424070008416804213522349576537960765214664370640100210453084611914479027691656864136391290070746628452999965623824867446732398214983818615825977108668636422441563513003831975312156804175525835009983723583171193533501782236576964961510324559549005090600262768394195823389119794969001830645368080861318691095973101919011548228483763812949239379397626324227241369442235711216350246757630159193695160367142155317905915084581982797609343509326821521911481105188403479863217823202421104691839244143919644602509537137465590142091458129871968626743829025365323860594221268369465152742323854658707635430807412874755583770885944383748932124569993895933658098650493753903580677968213439946116629845206367354440478040241152208147047847884378168346630550895572113154003279420848335567732550380587563785065372446579951171277007080376181880859588508139391302063701382117980942753440726346766393542850829543275168072355642671555135145516266084215524110054708924580833152698259832144444062702113296080126316162775848061402470651419774813974402257085656428945474157242235893836799387584558606751664927393493334857578593093025923033903249925802452928325559868490477635990253074330537697360009102142806389826773193350715830565814882983312166010168578638318113581909715614425901966904069916789058597977766919792967752743913284801516270290058840699327499070875081504588210302710253892626213023043634438957621385860258666727257127841683811540495720040171541891264342129606769050464645389966030356482089900989596777679522985065453229500095190697538100163379643439267150956032532346334280315920319424327896526362404605954432140230470878470882264003739306894517976684362812045551613042852192669772965726304705516783708137205632647644097851889002247751584331244400558203132964873335621281299717509879304619288476150109332057109283431502529001299150493028581031388664548216000769077942923394288901958119435090722574806233751271973249874552746532634460237024563407790213999716314923882457446186579151315812380783168745156472877906107226071419443707680584882191451197597628219448713650209673215406805360654332701478226078972457384732586255866424341772998013397576055716829423544245310237330356105227120287256517184974300181658805985949145921001482457911564043446049296375077517623765343452571128748736683475042340324486422980741771950961157672017460212375000343093255257855859277198951018128053837238080978550325407234199361789853768134577442527702115229975219525718789959045191073349653955820878281896398142889923003479767972076383190379298185808476922809215238314249626074164796021558425557210308754766801631838440222800550783465777015428522380797710835404996664778131573332303144318415473153348891859475225796874442481044462069842108821743637445608331048146899622744287339341798591369054634267513173964115613718772637770100806267461469864702974890809600842718955909073251470396524319777099477171768967587473664352749169748604394124828227185348843004451978265273237048553782545156365567001316028448768834710532422641102380518061679205162015773801588206664244457180510418277261829269152549407626154892937631258492719033672820382433466745502235228363223303303588498621164057491411472890847331713440771748363429011212793517034275378352451698293411530204186563333810558260562682373432930496010859284665817691922432863011084933699996961786462463745048747116470391194990030628015332701370191200450760857094229809065249035739502022559141983819390742711457191605178020143282612262800696462461845326859864102767722533666771388582815245205576926226742350534264234612616163494445478555919018674566723039443492562381116590300549213807725226129072939143803666847794403804034573197127632276495815673691688391776493042924568568460383396331869780349811708739849417094527914268223170364569506352973511214621114908992490959875119891914002201928543340360020016065452018805546551793704705117911784155214540116673803430547871133266630619513912440304683435504710983133680288052313077803153090031854465575440001750060605408581808515948034989770356122583873261823440265390089426304521951729320287328409207700383100123151876966524323583031388935239745236968350327632037316230013986711095983640286158845854503322070918325810361899675959053468566534714906108407864581052288055415062268431577178677164927351157974624449718170551912415953093539272615139170040559982269069144788537260760097258745113985468798064087385257717936930463104173511481167429308423462459460962543960069832104794421579983837186447051182599950438328122680458288337425520120137574451732030637289392014736022854027545044245408438033635786397265945453723332808703182454632061130743471916259007228432728541803309270197500946096444605584853072197436724505877621601824420511356681513957999452264448682983769699343994225768926072658063255358146106163505098999696551897853532925142643283744909834395865851620590128292004057571404777642678387685668703868806130918608461650915274491926100585166495256709407294941727457418325940432516141904359150294292748288413140787948986359366462074746713836604803390213998570822968145438813731705421355204337496672010739199285545674998128780178114493708777570231591229449657604145369857370727860129063567167048674305858866375066717347101711427057387739505853397158515841254093617246606188397586238440372102294736076889840979753873898793143249127390280808824855731104585046537769857330026521552755052259518063241611856641516275156726512986189523254888151278812592686063111446785816181415218227445732930445311585144011106096911480434585749527586559521968949018049836045512020729497009550286634399863511982953971128118927749655951377838933784252855345681378774160557470438174481259093651353914975509617330930104363369097847558011805545516823230152705422673827213285554606402424177535395875396349439257879147269990316570555566363631107873583908853302109598741956597344312363552802425107351220022316890426842094449146094093908848454232919398697089400054268720672186047939476318363153358024503206934420826394819801998769864748411198961176921530138349929123130568849437161791761185855627806231398428339981489989031517554700169925879901481360164293541370512956624760397990743413674286804847840458699624232365464488482648339370331099527120400687180993305421299234942550487704295774851922811662380580543940934664708380776764694636606791934436854233668907969931816983166891497973095943662588130142677860603610047337982454343702508574417771555874499100448295382819121831778816886809637030681464951442852987045658744822323017354193015398929135356947939839140306698866302482879187121853214437761579840307617080110522099185105281184531897202070221182174780155244891343031372681720259990267379551766505422208965641261232230697112205687652134593678103177579970271087834049239379072209949397401559634057001243257514833108769363888955683621052565237599125728261239118022575912894175987408009344745117251993238187747886278888586407900202408943623153890915214818002421838815923966958787049692850878031566893781773464813916368968542781397442084762131956466252849726966494397504673443856343004132647844309750841983656463183520640918053128194362601997214048354393807871873141019891406717655832279814142519576502831792032213339668060138693124678086147323694655541522077131244528253802212257686660195802890422055107005242552590674759212912277749904354621960351337529800061117715230093493340418671330565674438486174036271062712551650355860019081761842688678384695345181209344993751433013590249265630411818871254942665247341590902374863056013659912681932484952788985051121820811227358115551518694832616404366490062429428314767614403471928494311323127965060377740115015320155059011183773686991112928134219938238861942579094187368578097611857130108971701774055507254283957072531780780052063471633303056993180268811324636908498651379339810544455043184362168932560296467858789354987134340096423851366091213584971916411716002520202011394261611806506910717102336647860845390923567597373075328613344631519251210849547351316195902683921154170420914315410594227945953667999824864089646190094752335728668593487864038958074636801121239687073243551314746481125760217832551027923488199932464686665557283280854081782932546169494512387423905425853523327120893410410728807263709579745414874034347298836164872219912390950976376370657059966587673786130299383959548096535839326684422935261597602533478601891806412747416883653296136723782138835982528170764256084886875777597602961751140496094774423625070287438285325047835576946313794396636877736116310029692958421411875762799468941694906926445604500237069120930529645136448763546020507845697850054138785172342116922512128840514349291988431425294645753905990244686733733410385281678970312606729383537299554607797672907990394591796359202264492486835738568186180945133516707434961240365199176036679479430505970223502962244183781380913196804818441600413779120622805317818799661043554644440443705675483765184690435438142246744131509594661229983124492357221608279423279364533295157372659250705441584344308292111187384818184306257974181607894350319552740374868519341191483135283763350477192196383786427703966689423831363409240725954775713154895328593988160732590160054997239929414823714727974826024035217860503862168944433455274636864484104518503915125790030638481521747050177942348449246957290358941785218596751364264136325302012127514536979011995360578526074657060450670609980645092613668861127834866905147761396712739540375500705135160407800946104520181528985815263489926159911880084213321212768952431725838938601672188812651102720142982130177098645113732975494219793752073889227065759762609687893651335914924691660042543013159140121403093465609000857166311112970382917214818048185101582696684107408042143042945014390810480019118356949537099663818754715059209366691270390106111853299655506660134809491448878987832685380104145003045774887739416422218687559783784403589016023706079260754932303246949584114360114089506475306440896925694575031099223891967798964042809303692120072723649900326855730217433709980256225249076797838874125035531112686624813374295588750086023037138555024936706002261539102751472102701168353855022613318138841001365460254229596701129402640443828649877042750795516229713646589327314125732074265431844531268182493212072736085146019842646560868628969743149933436726067266230293919685332063288083684098369674426608064526187772953954892826318674314993417979569039823495888917128289051117477198054203719038275454185022748040457767103249901035731885373830510569953185345260681492090178619428435327767997448105824239005042284690390909455119903699725245439425773459997919739647511506450037183108134359259135471444850889646470849065205304395614092274471027676451130301998192579884981980383331004755985458519740718112147812962705310617555010259274607985705228893551463836617686124231748426817936045494654384933976330192421266623131254582148198369659191509650211552964003305770959771233149223935846202962723117218456932567654472669816733803847092639735772223976250554596127643265710435182191800068647592743527104298607516812775387380003886771219532565745981432787326595836968342349008462815121251789385562875463614831060974949395788692980727720786032761748572416672895325498419331366014371448904732847968285929375551256672205371236319010761607531035489389025830582442491033340311783200278400330573275229324139285691959682207033048166845240280073722049031522270750064451502205702838802314453492907125113196867357626343878692666709910893945062710386453480965984908868928331852364750709250772228522623061255781933618377709440518884675617168771208213362028807000568991336640250325843144807507365386167323430530383757386514877678566741578803351624259009223626044690394968507237740190193077024096179943106691946391713265839010095279092109535492123342892233114535396448888859072578357724845567858023341418639436957064116245382812764104096389861125288235620089839796959708844667271837724791853923155783350300837209697417124820469598763421016230556944144273578255047209140685603269167269642662464781417402044138800193094975708451596078152422131206951630446037496865433989208174418961047669463435692646401380865304211042807149992732461476622644253291650530746199877456840901162470871578154957110644808251440332624321213214254142116691052442993385768448482702905034603814208635913143936488381755746324155738630413306167461255699186732545319102104515653378661263778599973833109965924889965578020478609385756785428483645146480030473312941683848824619427905074772081786032588682913441577171034065769355232243310095044798628461790230246155642424833564029628986053338033122509288271156493098356126356548508541821956447282864237858810739664866039796867178105481303341995681155609103956708352541385258044674233021538488882256047867864755689487264233200251948632434367557411696985908027963208271722356561030717196004391383906360151985343954617673570213543813895091001157665808641175774156333012362213294444222039514585400935738306777816189406291014204426171617177142780096988819473458459887462124401026378144063946634234937478266777216707400466276855252285387625315985860983345555708831049494034215551909856922269254608364369447708759473754568912693844211940774320914411502602340550200223765229096489309938496752456919270003385668591424974211318904032650304107631242385298382914407054967999534142551977432253069569518207821850880260921220586532594795739409805616209429954329604196061909860469006839106493724703640208556506345365382655886368345271812409551029573250054776291206004935504682461872164043783174653715005083196118181680022375451553428281102240058446959296955227821993514685348539842528436786789259135360096841258032925547689013177486729459318947085055431774319351281557368747716393992737693541108230965435660525692480717964031924241664724388845193264670242141356326509471299306016413454162671571381531753658371397956451669887495352630248631157664761965740380082152914081452732415621628375282370868233950168887184531780269004718739099708910660900090201255053397723188285495192828542314394947620483330304687649237120551521237832434525777447953092911201834715259217245519280176880179885337857732604864405057483694102485505256429471768330406332418310295400408419432432940963470934061812695129941627390018523946146290853393677169776503143927133001591974399819542958121940959619409121036386106497029519948200613092346225268222984335952952211870862507812271819553684431413604081858429624556100379315289298469968791166103454024434690367788140204407001004669551371707738311759495150757612726027877731029702306303481073738582347882595922394576946021621186829772467105355572710477124514971906584017529758090618910480942805666401277004037346463984772905375809948144463853491825056157101189240572959686371293182284160480818545596306440473897493917768183499944319205900645179847295735484551449225229261645269968906429508149998138016622129015857135775809846587750617782253958791389940037001143544832241065010658361305409557331037342515976928994199426578267553413249193592307251067458813978078291350669052525953950112448480003624625092254818432528874435095079342421604083110240934432048412320452642368267544141594660095901465974593532827701312505826582575011497446990637441740616567155660949020249228616684830320354314707270016757257201734175571113012610174151094479944413698938350396910278103547991209738636261259356477694949886515282971734718664058449032335352583037449070952755124611382023143401658303667877578519296296527334023449638130475844470991345333618511394777165597830452951636561490737471919475646861928324359374967832521186421053437409487480470461954966554705773855950738645971740817037823241512416093275245345820788368984925734262305322634441156380026457447197182213483013402950350246138649304465256498219312777160525099167726998120704957725403800575045490582281116114994378718817183032439438208226746360325766986720916774835054649560456316259175632867603045141112409889552612372622765216331693789078480741915298207295555848306263838407170482811223590205255671667422964415870641962144241361255726603720198161298973619057586912427934170325155184902616599199143436064767051953442782556327831427853713857411098088989225849680427893366785692117780023838758363675203567047751767933295657237755027185531691483903456972232893961200648229859233228579781125136864313569508852945160079164443773633476981446295403950535828103167719751726784350601629663178850550389728335502140195564260831725188380387307159781158911038797569919167004945795140577149749170901864075423619030300911182620763077511907189012876305215130787412613925421216160360751332520310931569700798283937005333531483817004253266974122408656002783119309246945216360789948717449837131577677922669864583629782440739388630470181967026233829667565773873102079102987908580164142215769036178315875089633501680791005716918960107298151922455023391131279507844863316483788898011992028922935242614044660187284736254085622682834529882590617733762378374747202648059522912576707100472276664571181081828497963723051983320823361890551873317486588183597041968899647405888812769324885665206175649824784331136051942330320955997813290150374169555690598341682414758358005345032263076159951017735855589303019820663937187166738223420643133072273883753060709742405287892650826450075887658352906610591407918098029363694819236430463321771822021175150958737396912367945520530338753965695796553479705539515710152369148055346684802318377472296952509107769076222779644096906583067893946837767792663232669048207226484434581284994990609048194589647870843829686890438595763980976771026423557663089024892131001305788227380520948975891163833166047675665100986690807244435880890604269549826217825523138658314976275936944089547382635813595490748259777205666498345149897846304836074875260873003896477439834091090867636750095043118229481634887286877880618142748512183455056884216089061037969239651354971148328982756655369145281624013806819439797157064508394810115585016956024709722310092594188732446592100117958881002635994259708482658147888287467568985217077229723202214489094759132716574769640290873606782618033552995230016319587100167955339887968922205047010011389063615635451818872082020951265796370440182994059107927214391413065859873935945939866806647249901995379512541102421318646178957796346016199498645184725987268058320037711898529749988840623868356343243014613790813886854385271790938818469590098025543064598325239352259049625770848587072012496241155997192163530260660709931448706553743372471711358996628745306173083673087048269342745699715075360398067471245252833958545215646060059000665959497705967713122400751567337815731755845116818658270900111989799269094832164568929732353735566608022923214255026340432900765571233256796055879631067021720614281128969644791733928937006346217595371531877564139995663256573848449072798997910083484619753891994751816910829518221088342707669386410746832407567737548811686421700767615090296347645343686568901979295358016279996388099431659129877979491614467543895195928365541638941655634949364961607403740873577172023120167622227906175594503905136634860440145452083845427286042679614121738077233331267751337860968115995259442772881335900849426085481298429404772477164459261951878223611738672150293049444078426200516395163393367687521048654041265810615151381063263935652729823202648067856665037222449646098366399836365825764298326138044202049679510635928460540367467980830027780617634593554463824431146300071372144602579306617234168891833603527083083269873328058909495444334975114655549063249720495617631057572031874245243997961001300513101362881251642646541467566216418471740031857891367923431107308911790203560135760701742446161244397707823612390132206932904487297474667708365158321867415005381327784224688971310518664331206516637603593863201168061905577055537633677360364992716387876270201457406093693672211367026066251359512820184684258506560590497065152819145724007871945726278627820342047898093019876389613692251293554098133528921703415241378403497988370527212999054917321986991814063285400208883044316721908821428731628645291282887066115443721552877170570604616124348447368192516248043205025944481980530204535986716383404018559523989983031812399260867758441326518650885918827088514421998934133330104671880369209347348081232645725979472839249731922910513395615257747541668539314925713185740795246049806364284790354471628315103815173988609118640232034770300847089190756094694855291947481048264317280061195943077860015918935087735267314720428607580533653591482200744245764521762708826753820707439580086465928632736043303848285308853903855332348614871305843065583952661440745127334275983316524983354636338311850616828793114631386447872731549903896191810618225811994194258543856474840852403622495390802298101905113183569217747553051194324637039769564669265685730461935387485745474548531803797420197881185660590162228866272412460152679622021094012535010728078962481494326411253419325936549782831143489394327333139421162015929032280145593875719333520986496480401015368469256210183619123828239613847237761325489122341426463456792867754427053754130540233036035263170583560480037008121865434631069654336463838256630571872029280200897225456315873962517477987515356054666388335880482803738335843281234886361107822104373467807207148152456587769815724600397786335996139383096925464081053403190812702627052226018164361018089519728465893624253132229741126080320799891756070655845964271557907548948044677077363863257868119670264756034808085525933006104325450582318119445844371631130489034386859999641254958672328012330708972446485735538272452812683116142324976642281414157806727682979925482140939388726958044973071808687704736117992808583199418428491405610310555841404113412524512607651482794741704104508555513921174117909699949944138077122359611486542282513706246826158111267704327564719834230477914342600808913796656021750262931585150361150826736050413848790484905133275593843111446885863249713473516993295032625202150709018861820843089366420307862925612315011763286059087359702646725316162907318251933248352262736009240653208822499846306085714364841289204210934994061604517285057191437038278296329720531577065146776291030097029355798319414150197610941914453739920532379971545817364964168876652813969275610223555143453902384109425782195979757650614340946753732503697778300949396933922189195629933830643427842357993425928608221704765171398421314049866443720720332523788140277791693319134495238776754114249069486675919919115524635059068477480012114318640538800382974854180294512160755863961496844546963247293230634774004814278524154396815808981949969899661609677131701008847067152145047651867360230416267953917241882452727879680761316075541059208603633056503562463652855050253493849478608019628492062758037223414401417765687997128882287982851856003322488026022040865006856147528873435385875797540153930164571391471671391160042539309854941702496529294867154798015788742502152230116550540162661693692539273155844284794665714954330600878709559778016078241522501246825227935293632552928387677803748341379225975660508623451899520006550271647002585568931118574545455659515660038345490294841747607977013620826761777237291808944805985937922773779602164771924014259621421398152048641717356805328377078270519526709847397617420484043908676504757819931941243041177123618041199834460478895183606359631910158614297021460961506443641195117499315571630596201425150181128388605065882437056059202356631642243208507714451165052845415067097808080851672441966218691001993587878740388639996683623023734138001598565353767664950990981120035086276433367022305016868201908444769762114808566372599134247909095865960176282379704629611831845169982707258625668463208361346123275876520219495822276097730472791775307022937656401471570150603123068394019432703602830427629891416112019683710380141408360658819167165008669555364748658228361388799129393430801106411036742406503306803992584318621042791299946447585114169600357210438157957095528391813802687194266709630039430263970789169155406821880784658555589183142366431661016710970043339646209991971708490052667399949393124645885563312313000565256168576816471242098741078655616401684618105443606700332167319459199324804559567998844314002622600802628881188006088161891775688908776969324799915484922813295198723011775033753773984506158063112672102525281790176367584254556349673906995336472433972094889433283905354468728810249741810297092250546619901076403998845317693420655635133057775389193863669306991834605425655868705164472180005264501435736678480521635938716050416503207778590785511538467619550627020032108893492813556129597923638223179897023498575923081788821088015804957415400699801583142361538757925647242388065271363797533919781055008828224632453178217449526824788604797672702208962436493342699356518705273202494331071951221069318730689993098592688654567904468057095325225333473423398110323034834929517178574105226269026108740903170496491984283872607251986315802385098293436390674754854459924659801591397981418582800158623004657928930499141495824770952134245875818682387530291630027075762725947865821227819368622145724985158466580099763293854618850180801176478217411245219876559766971294143696106113612302343864027910528445943043133916663267112690598511400033628218370711265166997699353177108131047643498369142260604016608498278071054060236977815657846742243817272015351033515462368642825223680361745623868563711420294182888855363490410712215539677378212792938504001171148596659381275262256682730800334574549206704438125823923904766613486206013683813771293988827994751308475891995988301215387152574419412381447476226068834648858706639617162206593451235290457471618073014725679837379893842150101611995440452298353244439201356304245337965099464541409401494998025031536565597836490234188808696463603490112721627711519596821915331825959575551885212518211442269003344859271286227913506007307492776291453029668960179359667440503179328412171436131912330530510150770695249381710538279056954140700591999368475200255875436698833909225866367218550888340455501359261125896501916510656688648535225387182212843221884399211433135403492193025160357801967177079276486051857093141011025001336496825522387474808295736361392021889554180981081598463622614232871932724282534643030508717884192962595416173373901132147755094503249975052901677902751297694205366921037547465221635547109834317374178362148899395469037802172487094585186770930012509897916799608892358494351340358146933481155823397177111871069488870844726702308338279055819352376060712105984288779181524985526892916898169771532756305479326497428699889380770355624262738057395122369955283094631409213654957473184032227153342629154545066740409513258489251745894951453040542909925854317157799562581760030422099105501627694451657079935138142010860784796990853862871522191280775790778371590639687771159316980947819357536812939905863927717243432556756272342151545076411956132389217805472604221690864013707763682018315188952607119946758811062148170296556777942812437533627450340974634326975205472489671702387269156909914717782582977963643216463960975465090627229265120385884158666145053132529879199674915773930220784503882143864875273224940706693965405173279072485994435371203100135615211846813669839874064050008341057733642309562593482175302832142539877643154259022027570686612027858107329925902923992533804455918636701337810809181701161499325971154106538957803193456380395910615088491686184579554366213353862404529468229005466380181873403409584627731219911460708898848941094056348224778795961427666141965047354825879067952211675767220530116000295439261008669342189007742280071068070049356315167614419942532751651005774976056088498859079183494367859475921643977167294332870981630985883183324300422297953590981162371465213620389531664792862643382599634861925000395120572493802624931228823781014097594009428931662915167760327883521129852617756650413448593360913038295175844623203494974914165179908375706734492901224902529747574979742050002106663406003731866003308390615816816885072065325693182794964309658585406733281728826923008660251012331523873157425596492124889226549015883614419445399308078104363183239762732476535449006179002325229065282571464204281914919738887388806093573140020542097502020482802396957530453128838606753183180413618231714722120716858511620673458780848212762689022503174722516119261588243338767449952444434492732505531744736476097910021749893176437861458807350602081308059329158498808470348829171596127767256507414629365764148529834296644442209403194238593555813227361493776673378092377609835480829848834776365785714688656577506221151558342984932908100108088372100268085844151793490975148337058265267421349296237603497728123188032647729521086794670644515840940201571775430350624975038471658580078746878268495164463287848960878856056346450934896163169743105045165581323819513175905223706128682491544237639104590089628822641723836875903418320273003356617592635747925184879866743725876316742503710595986069001288762512476804118154783404812514751164897754250989522763124616991870608224785876468099785756699995690777785521839922485175041682536651172403481264582149129122640889832309992014062260099244291268883993005187894563801642518228414478270295351387046868187081518459838095851978514656128229212018856271178656781951865372510349741871729755268077300762982107262353653936518893638816222941960957234072662945228277096588212009569956941412021462076133412738736146790862165840981502021144402381041280424251250883937325527577117337986616772117322486188058793070661939091520797904347760947648229902630915645259852652351426082406577287674223134756799727233169989521419114425894731716176653550245770496344605597265572794815166192064124403378151092763885978383102009455257854519465550301246995381640601210343662742827682420934279626373395652395999817378249059327854481350431454370932564627625133649242512820576486994269314077980997512181283650077115840159571482838806660739273917501233904422474377532434136501025892293378909898783835997744621072578866963094511489842039592491140393655505817457506101458107717258837998857511634160292786691167461904365591738425550323512909380910134644272821236782228219560211903524789255642834093938631309207016144273343561768392015946096695071260787134006919955539723059270708621799610107543927526866927300423827447908075410338089761911335554236211607220959786761543017923621639938468989547957660767931657662555862328888341958281025006331151526846302872456080086024493507245030108230400783031595576151219819834046954989509826434061777922015202698717273136926158519899556374615974574751476743761878619405436331799448199218707421684180814768572994000075233007328760708771469685534860487027489184792709249535333983754626094433733032515199669313204947984860617843400446621737370155244778071837898583388336317051871475231701394053764483680409312689893186371509520310162182341717820195936661217314875571498709625015897265778525908426192975934981499327876012898297481801302513955401656740742216850342293182123512761948372907243591709809867936260493428885126511278718652820255574252494032278725612072481843951172165236478241369093618112853011844718845683244161791308969305441124717285732154355994917446499020686931075617421667334186609165302628815065613660124919531779983740755489097111398429642375934585615080318880945851714180064949364535973649030877678201116971542188813985546353470746080703026718628888167099094905487828127808372458317234986212227785960019744988804796058282310039384459545585269109729037178184648276479018986182113845519243079489398133256876630653378351331911274848188248662596501979226917582116118414287306394568957790733295371259982778148292520276396147454871187308323855969429534148144661681789463134733719964597750987783364244289405724721486331025051689631320360354172622130078192112932513759893682282761898438094232952668404869672405207574076058791075187428450213304735992945688679113077409644110920248046893065024931964522048240938556520005706710005859495886813562695510970268577213963715728820134124358408738944689728844164577395064088737288423942837489012346099566084287150267414187495425649479841848385871962820959477885446374521648256438103084109135495704911087255494677079761801565634611237266318594849791726944047395235607649191909852897356458928629738104459452802907338153775097668122498603398192996423582181648082577188518353374547684930803109595187299401366263822653454162234774772311308453961738397188217257178280423339056239809467587898119899705455896748544161972100059530059884503731622192443130376572006764511595596363774526764097092375628909773455008189308634710975487576532392383165983021315524343179231843380356936802680309074711077530643449857659333638389866129257243516335469244971824181245127687203135672398351564301811199850315776' ) ; +test( macro , '51676101935731' , 0 , '1' ) ; +test( macro , '-51676101935731' , 0 , '1' ) ; +test( macro , '51676101935731' , 1 , '51676101935731' ) ; +test( macro , '-51676101935731' , 1 , '-51676101935731' ) ; +test( macro , '51676101935731' , 3 , '137996870875659993023030601717979081222891' ) ; +test( macro , '-51676101935731' , 3 , '-137996870875659993023030601717979081222891' ) ; +test( macro , '51676101935731' , 7 , '984075056308295134728924301613024127189711420386591471717924665943308236455086452620716372586011' ) ; +test( macro , '-51676101935731' , 7 , '-984075056308295134728924301613024127189711420386591471717924665943308236455086452620716372586011' ) ; +test( macro , '51676101935731' , 9 , '2627893230921823604806622170301238567075367550796577156262388588821361374710043228118573957775035487173592314570495647093971' ) ; +test( macro , '-51676101935731' , 9 , '-2627893230921823604806622170301238567075367550796577156262388588821361374710043228118573957775035487173592314570495647093971' ) ; +test( macro , '51676101935731' , 11 , '7017577357393414069660702103810709794111639796715410950809665871416156554402226865497006924403635139554341331701687118636537520158096482611987596307531' ) ; +test( macro , '-51676101935731' , 11 , '-7017577357393414069660702103810709794111639796715410950809665871416156554402226865497006924403635139554341331701687118636537520158096482611987596307531' ) ; +test( macro , '51676101935731' , 17 , '133636682614207953928748833850325980733386921434321011865528143804403832298431098135380464855882180500142250108938933037601304663280771463018430933459134652554649625077355814284452093494072216581175752265212265439075492239388118741811' ) ; +test( macro , '-51676101935731' , 17 , '-133636682614207953928748833850325980733386921434321011865528143804403832298431098135380464855882180500142250108938933037601304663280771463018430933459134652554649625077355814284452093494072216581175752265212265439075492239388118741811' ) ; +test( macro , '51676101935731' , 22 , '49246391967000732783507102143055596698062541496879424569521554617507032914914454137461679988278650797334594157775094696043090861230475376194375316521688783968615512922433798610465048085885649879473134467691860598529596944970613815754223330498710317737303087189649634312376508482500446153530865527315961' ) ; +test( macro , '-51676101935731' , 22 , '49246391967000732783507102143055596698062541496879424569521554617507032914914454137461679988278650797334594157775094696043090861230475376194375316521688783968615512922433798610465048085885649879473134467691860598529596944970613815754223330498710317737303087189649634312376508482500446153530865527315961' ) ; +test( macro , '51676101935731' , 24 , '131508525968430457729352665685966579498949401101062972415020772435432844742532822029053861945108891212811973673289631212054118103889130601356311755368990255559386038292351210647400499145803946225847945057201109848257891860310495954779113656786197608913596258321184172812660728137089758780590575321178923726688892590199481699405921' ) ; +test( macro , '-51676101935731' , 24 , '131508525968430457729352665685966579498949401101062972415020772435432844742532822029053861945108891212811973673289631212054118103889130601356311755368990255559386038292351210647400499145803946225847945057201109848257891860310495954779113656786197608913596258321184172812660728137089758780590575321178923726688892590199481699405921' ) ; +test( macro , '51676101935731' , 27 , '18147765077113876911302828311188973140568509988864514321318950227295742688037464926647103633287511191936183601316483196589434477469945433422640225075158236638385320220491900270340310290917462596573996639230442725247179360636496672307042746911978502976958429476017502296658675079086344867081673179346751656568649207060344721536870325119505423628920139126455081000886137611' ) ; +test( macro , '-51676101935731' , 27 , '-18147765077113876911302828311188973140568509988864514321318950227295742688037464926647103633287511191936183601316483196589434477469945433422640225075158236638385320220491900270340310290917462596573996639230442725247179360636496672307042746911978502976958429476017502296658675079086344867081673179346751656568649207060344721536870325119505423628920139126455081000886137611' ) ; +test( macro , '51676101935731' , 29 , '48462145947906619312350693780921922040423061718629753751200616100444307162466564390962728897898203939025561944853542772935543250149935950441420073115202129685015069493947975962419875285445358970303515733347425597885530386757928989657327135942306712537754584065199854414524879131878269249276451508346267360984001689290919795053747833808800804304207297975041606946075388009728565472578248141445621571' ) ; +test( macro , '-51676101935731' , 29 , '-48462145947906619312350693780921922040423061718629753751200616100444307162466564390962728897898203939025561944853542772935543250149935950441420073115202129685015069493947975962419875285445358970303515733347425597885530386757928989657327135942306712537754584065199854414524879131878269249276451508346267360984001689290919795053747833808800804304207297975041606946075388009728565472578248141445621571' ) ; +test( macro , '51676101935731' , 1234 , '158324042278377313925303658781524871614898748673989982468397056801513262659968003390685627949704258611320160536626820028889962136800384219988465148278031573450509106387239568116863743081510112367947744316933204800345240432247765898932280221777380025886378197115150023156888075592661959629600638394821303250632425654059380834813385429980578207356778680885151122557244823021413539337390766886386023683774012622502869673441546686299110751211243381992933447873142802156806866162053801684285033755846634081232710212999710106103508622919082329128210235683603138941762803368001142605648619008990425285579947768914521571612053244135664040468206471912029995462838737725025722037780961352097655556940963081046269689524507058695919021145649857025466601631832206335908714770892218847010797983061128886699295778458908026100799624592058868604507879625795059341788256071347226801293035257896677449812101619168410274645467937698072600485973695316558617078697826464067560685120905997944243512191651052772680067894809080799438615784588878741144055738313954890688400429893361117159935248693696396627137695916187850803885204391372040167551605832355933919492494203181745050697494649819656173693467296980021705890813609884785517604611253528819574733690077002295678785343609499106604869068180574890180024198538158171783307883610859971770618231149618665209136576442748277494550519027415619444394250603341387572991349015145136953473904476495181684188774626834750617818472938996987683214283309439924103189995535468277303822947364785117218431807701765196665481474819809014739483414625184823572545931155707708389629548395519118401609231979035135464875664607469901894710597734005254396315648601392217921679551086702353136339520705796471641431879666411557946264230276753464580691493861591875142232836387168105624036383384304939623273671227663421382364346405035511757097384178188343056871496957008430970719845337135563975023000121180003910787544177586770185372939136428614465285828597849364223527930973569574297409565906234014152140399051264908028037854285065695691516894764306741200445258651130079726633055035454707400264143396200125546607001935250751700196849819373198663005937089255142210331719097533030824267705354302579492394252054624819810635910772930818973501002381509037985751201262426338686073137167777790210884526513502529974672754561818929196841359487503116806374857279102032619499735463547437917873852231188627313193995709278200744560332235099781528906681845236757294232939540840501710793402651215365559223726732901232304332589555728463490815104762256836437378942770237781171541242665277050803400441103245698206078424116844542305855433985742997194723110120559706402361837255518215431654983113821256777518566578007246638117303300813282471059695780960937192471342720483093022397272639388862609111334563922759362521380716417092672083635856258692643635802385292897608203124530755925272475970099885482900647144339393451148660375139200420049453396533433237007433364495099843124339385777936467767832834097532992680258633382504023134945528051080162773976630522027388364871860673885601145463850278499705365785873574057496070902362590690329163430582931012722823339673749687448879341947128478168108948119496075857326371621272158040967590212259705607234109590371908430237962275467620195565091210074536958791316104893306127805978301999920209853998214358942944312450676988966603743669909381196873223441882204064076740792698565324619823892332131678341250397203399047128712276865053621353068705821363484016988865027435388961661676827059827201761588689945100159628259798636637114887843908407692866645165407556635346270470882762478678318748969509612841224405192451391751679491699159481451781132856593225478798461105500650078302736522399508859604061090018430782371103406780095793970327199466172644652070455424994736654900037878682536762730674188797509195743679412902718668219372565376042254451189328399930173247680691539750124735316777490200616789118915166628770213641217493993403209087930983866118739242363270739641673142095457606027878252411764298206871520866755170134693811548956683565065642028688637479006103660374113920609307215137832756503673451270374534771904030303590041498702749217222999004759003357602091152034722604948534571885348781516114248627593361371966083846505528180094830427733303359954633778102329930129088225944419675472344592340947633203426100068451070062748913329381430835928677944810202891752490896892126540425812163639252121628049481160408647454747378481685454865724857469700081698360897592285719829250458270700796398492146131941376976151305748227248367443062739785389412243719697174747793918305844429511703312893537458763839752259611393771379620065253777610623533134188428935625387641575540926717563311541862831476044794518109895950317069739650023453809779525953218406298837457049987396316333779299477763690386671808883206738746473461031527288187096362547392481733828192703691811275652684091878491782335647464304090599317117223713118270154362644379673966875526023251794033742058280817715606901272370694953811351940143399555738367916981834656631234106492867315013462578161451861851222727927484978513364472656866134489436147990440601567348247368143427992571647342689311925448855042244915814046156681924587686088299035248256687768173138305271776131448783660494290452155267493170780209088260573726810563594020164626876894543544776117725891695956937655222596747253562951739070430520784626532005865397891770599810947915766027843984225809506465099491726669647675836542704925940472862292458103317707001664851510631632483368333519166567495603149523436655902927352564469259379326902513957700266530203095978420437621994997883942015182535685373952581674954526368979534376580657019506688748132488994259649481602782027268796321496293234619922858621277867678825491370164615078298949196552511455124851536133799925473329405250474593913924912551804901403390831450711740501508314471344016110507593788337973582789067759260879539344607152262224215382333489330153894940009834586533901180095846730855291500939551837669345284373711184756405666180209071363312585030301685774779292178313316406602373255646327348281134955048336338727490454877812787617492427362023670761057324483134159661968729511955276617697409266496712072219753283729016198339234913450671856683431220026361896256233229763483100008432120294903953687352831503401656888244700073250811277269623445793796563405171676855616924791868998241051758600745245397052440394156686933344580101379617401437696817984459028218921041977399588148719347919096302390719921087960315851964586936208155974897770793714626502400010799023394074901830556484876564044019461148646704484745692998552151910298131789877533559303845220138187074792203552289300587811989652204054350569388609355366352079539773210398305281469358542324938107197041217218595947653381833043778081164511742732935680326233241131641428417476654793443376871059887960714321380031930204997295874730540407682218645410154547363569726463842192519870398072169036254497989626119475346195254734474880846366685010394270094459050207503355330015842707449098167167948112211428609169028462215066248890291708247636295839908593225052889285032180148515349175791108452276764174092593481970638911935180284154383805459092545680971655577656000718287895404174650864444487637275330486618588627887913198091137313600079403324248364944559239416972594744134017813214704259974060248545972845617599594908395004708799034010940349453335426733467851508855124434739037794790113915284799938282633515926124039300489403274166512016144314450767050504019696951073496152282334971591755531534918527658116356766005810018865387036502835277104484897521399845192578397217389066546258015343671781439530194484186424336132467982739290593716534087153430243415506786743021432802857971661907233602499902567387941782564166386342672410874812089691799529503443000488843767817702945159240603649832489196454539442081235188719658702765814391130506231315568011273524165094617918503831867012569022324402969461007866076655261544955353941677901200948344001405059672259174534803855786509381749106901797774448058734457124149367609992922544375497404889378084258630248150919968340293441413856717836345219286003180349374207341129088557493435423239964391016550727225456481162350628594289395184071310300179756589174536625319150383798785373066376691658528761564820534618453895379491843182268871603588369275077855410841475816916672608469381494765293579645251398504292250764825206147001031380918536905798997324364665442675157885496504116737588881183129820652811664336805124175412738167561167253417906013601281586840716605226757932860034772050966241473341886952885772364434302876604236880399216981777408544673261443252042495657687251968928902101306694702738065723310727043271924859335698667952366365883749591917139742105118753077931026478251365210693917236917159155967697763044367201149926693443948539699579913602708706722711432838021246855315885038460450756859122906583939756348652891700451630407133090901515174232078445554725093208016341426376158610309666955884603433032223065165852248565738599860177261970078536206931153975848971431287001632805433404957578207772941765098112799264026267445074698665059729145576674938934608054531809788773719961126616990316210326818453980080321988760982334379271531791369297582640574651520702873403331880456606970974892343433336446248718921846000086640006680764293893307983492389270379130633842798650803348158429980408513212973097444321318667389109611955924135884714672638284288772566998005211664934734547822982660638379730254204195834897865492728459422863551908452096176425627547324850175172784662840168613264736639310780854731722004175205456083684478275667370139311794044918888433282117891203786131932421524201946630405904103705604352951344094166243627023050380063835187325378976884921927883069821201742308833558695341662261151498959733037164633952848288492505505197499859566019268823236129754425893906449877905855504081397182635782376853937776733107007960687910397361651834577002303143087866448497366428780519572180278375369679225575668491891544012967905489645541044473614128660244742603437904495496004459121145000204660640788761369040236852666481807337266045681038338455762663801212249239773760849573135339910245942472057741897143798714888511942994856977741299663716890747044572844810556164536063761986767836402140711391146026318746472684683736517628592458110701485687350372867786408697530159165580262455780381579264667555447984957739182385760977780225061084004806106049112388374908757400568145385583888461889658540915335972493538978104321154519123769320702224831927212063777898343511469299130626487155185875277476235831577797403193411734525969805530291201270196761046479780099300862785898294670735985568048204412072182439508001601125949813004653714414454010147969834379658692070731355494945150892188648577526049837658909733330381505835664398796899002686901365148731947521928717964471059772305071463737374874406416651278356408918633301449776192835629215568915731374744480004571009884843731735476903477562446584279323243628329043070154171111030416954029897290949469967976161666719811003325138761099757410714225754805089491754951146648993331480859725730046281101542321018226211161218032808157377990274486574775247295293446271999216933362071677144037958846938035870357017121382946099997460180182187217217820316108638070949402341509021488404838623964004697749860791584971181351855741948571771355034517420282039098468418778809673122690363103723019689210278682644736222976118509622284207375261241784528558945409584782281603428222482076644739841708067658443152632760947992710970595496336571116020117920899681972595692145247586867390993275854296221489381933037318139292360281964291441764499495760508673368168379423816602792242572983422830229937308653522404847350290384106194221461480553536360110558204157177392001034747822538121785134044265222471502565785788526018168367500851854368644667069187608053339694123467967831636497181955436837184144618605482450617195904135269079047201637007435156663520051298601126128369945944529481020638321516198582623214543218826748293953436296165935049635820455993901167665818294125029492356440701038244166842363513621908344320848585686797979439878826598478637355993217261347336958935084397089381198078856022083300330117262456180993049915148012467532881768933263035840131555093550707791000541507741393303110968532024193273602133335942404611643551498070626757534418055263575760282736414364452938769778575091320674432871296496661879381856396240520797406048137637370857663757380205251562705321737487489618016878804542225487729084746708529820375811443132907266237938994474813800033631766739207459417966080119828341415764580961209459326665346025307463631064586254511715110933308682061703769489020980806855962724479591125787395163620658259594004092166562170516032834000268855499213998125944650816177533565867482786957117566835113604843003762380044014420897831990140335889989942967539299895614370850827546132043892135670514224732115622279448086834055661975850510059575409653558505225706327368788238605905950679120827356203968736553949603508567674941011900196065319763868748440255691811431275690300510418853466423120699880274299502906401428179717337224051460708185153900592946400931539055519213456766111907891650507124264750664276520240241037246834114060324514820797852416016033426385928748625138008254308550145235061493199996695892684482660951996875137704256478179472342925959911345035957714418554051230886742531878578912441446768201652221881141572325507385719459138517136751018669079028246205826509211255942319179978511691727159374093169411671988666216994674771387581235589884768273625075469787220620863887485675316340301843253576693265829584060863611223658502419013220705349254141879296678287934598990177839246206875955136263946160336147575157943154184876112942552766291737477532772806816444968335075758603052677831616530597162083339994792052192524435339516491271771018617304228747316364353881326364901896898510732593688984287402238373219422623300832304655724736690619601526746558520579969086684975110249886471858004298619330841151157594042888413560753001085286164089989253446994193592178607918900886160044643360093127301377281151260181516816234448235332218822653468714779419621593045561237278383012807110518306356320302829822203975624356719898344296257410860244073851008991224738267988788643891504893485173066765606602131746590564072891775528764778009114601909601715732204601099651995466171422428561778738906387340637322539207184732852648369340774890627245756174444189797920171705224195397835012801944668568199244460984454556749562726348626755008071045094089456543538334719344496279903285819785473638260950225191989064998217546604935254843644830354787903047294704085156710060314626981157703292007319217920772059875929487108231502602963313451208908800123467770051210962134514589094511232458059331648208202240238411255010578542406383889733905056465012899219382378659412932505825923945018151275013771662079650082951456689539196985442677624790938978370091323150932644989813926815926713764846502628535537778970161281065391987916405930855478432409513765364564416242604015243337740020591190036055281150381447998127901685806875751795496258487587782150231045731795366439544769654743511101346187573916565954617871601220556806571910322664035856441943067590583463139288226902843506064510903232434224397360091696338842373040990564260619541435411792673618388777689980307230201828335309818088702867877855077758454325070909742544384843822430367944236208743002020404743158305208417720634625853803097299728910140526037383656368066889205000542592984418496643069772107977370892309483087973050493056264411495806490399183836440009935339770300091372817892264236279135289290245333645902675314110412649989844978340728685671821112290828829269519229582863992855788155443525507663925117628911796188678980556041341513060132014775432709153262923597668710862496337413472675889360137051840453387185317746367448685333562536587961087795964381494602518709912953530990322369678697647756220485903298571233830750815526500393713347618692958695894950510589138728887035609091986740671003066902402415899517198377159897977346749717804687344625438051024990052589164200510168556411467500390153089322228903919050120669166638660142562191207450620162728156493213454482792702092126905050509757880809402415274410795695253751046401154902184294192597738198949251837113299325218278871891594334354748578529416161681277186999781125923908898170603590196546728188587904407695359656110397019078754943031963775608531765690045741190503521917787960634065347919180851301558862438424029407982357071724159087489759092692094168623631500220272025560981867388778272041688773757867813778995307938836220728347748425397447066334129722102586996109604827849770056592342207245854658461155777410922160788502132706011423014788196149318932156333527262500699228183533489815176386063167069054855402190127471059557044073327189922247461125984452832296717571418178543557996289436839762935964681924754366975350149396326998775147547939177889984004415721' ) ; +test( macro , '-51676101935731' , 1234 , '158324042278377313925303658781524871614898748673989982468397056801513262659968003390685627949704258611320160536626820028889962136800384219988465148278031573450509106387239568116863743081510112367947744316933204800345240432247765898932280221777380025886378197115150023156888075592661959629600638394821303250632425654059380834813385429980578207356778680885151122557244823021413539337390766886386023683774012622502869673441546686299110751211243381992933447873142802156806866162053801684285033755846634081232710212999710106103508622919082329128210235683603138941762803368001142605648619008990425285579947768914521571612053244135664040468206471912029995462838737725025722037780961352097655556940963081046269689524507058695919021145649857025466601631832206335908714770892218847010797983061128886699295778458908026100799624592058868604507879625795059341788256071347226801293035257896677449812101619168410274645467937698072600485973695316558617078697826464067560685120905997944243512191651052772680067894809080799438615784588878741144055738313954890688400429893361117159935248693696396627137695916187850803885204391372040167551605832355933919492494203181745050697494649819656173693467296980021705890813609884785517604611253528819574733690077002295678785343609499106604869068180574890180024198538158171783307883610859971770618231149618665209136576442748277494550519027415619444394250603341387572991349015145136953473904476495181684188774626834750617818472938996987683214283309439924103189995535468277303822947364785117218431807701765196665481474819809014739483414625184823572545931155707708389629548395519118401609231979035135464875664607469901894710597734005254396315648601392217921679551086702353136339520705796471641431879666411557946264230276753464580691493861591875142232836387168105624036383384304939623273671227663421382364346405035511757097384178188343056871496957008430970719845337135563975023000121180003910787544177586770185372939136428614465285828597849364223527930973569574297409565906234014152140399051264908028037854285065695691516894764306741200445258651130079726633055035454707400264143396200125546607001935250751700196849819373198663005937089255142210331719097533030824267705354302579492394252054624819810635910772930818973501002381509037985751201262426338686073137167777790210884526513502529974672754561818929196841359487503116806374857279102032619499735463547437917873852231188627313193995709278200744560332235099781528906681845236757294232939540840501710793402651215365559223726732901232304332589555728463490815104762256836437378942770237781171541242665277050803400441103245698206078424116844542305855433985742997194723110120559706402361837255518215431654983113821256777518566578007246638117303300813282471059695780960937192471342720483093022397272639388862609111334563922759362521380716417092672083635856258692643635802385292897608203124530755925272475970099885482900647144339393451148660375139200420049453396533433237007433364495099843124339385777936467767832834097532992680258633382504023134945528051080162773976630522027388364871860673885601145463850278499705365785873574057496070902362590690329163430582931012722823339673749687448879341947128478168108948119496075857326371621272158040967590212259705607234109590371908430237962275467620195565091210074536958791316104893306127805978301999920209853998214358942944312450676988966603743669909381196873223441882204064076740792698565324619823892332131678341250397203399047128712276865053621353068705821363484016988865027435388961661676827059827201761588689945100159628259798636637114887843908407692866645165407556635346270470882762478678318748969509612841224405192451391751679491699159481451781132856593225478798461105500650078302736522399508859604061090018430782371103406780095793970327199466172644652070455424994736654900037878682536762730674188797509195743679412902718668219372565376042254451189328399930173247680691539750124735316777490200616789118915166628770213641217493993403209087930983866118739242363270739641673142095457606027878252411764298206871520866755170134693811548956683565065642028688637479006103660374113920609307215137832756503673451270374534771904030303590041498702749217222999004759003357602091152034722604948534571885348781516114248627593361371966083846505528180094830427733303359954633778102329930129088225944419675472344592340947633203426100068451070062748913329381430835928677944810202891752490896892126540425812163639252121628049481160408647454747378481685454865724857469700081698360897592285719829250458270700796398492146131941376976151305748227248367443062739785389412243719697174747793918305844429511703312893537458763839752259611393771379620065253777610623533134188428935625387641575540926717563311541862831476044794518109895950317069739650023453809779525953218406298837457049987396316333779299477763690386671808883206738746473461031527288187096362547392481733828192703691811275652684091878491782335647464304090599317117223713118270154362644379673966875526023251794033742058280817715606901272370694953811351940143399555738367916981834656631234106492867315013462578161451861851222727927484978513364472656866134489436147990440601567348247368143427992571647342689311925448855042244915814046156681924587686088299035248256687768173138305271776131448783660494290452155267493170780209088260573726810563594020164626876894543544776117725891695956937655222596747253562951739070430520784626532005865397891770599810947915766027843984225809506465099491726669647675836542704925940472862292458103317707001664851510631632483368333519166567495603149523436655902927352564469259379326902513957700266530203095978420437621994997883942015182535685373952581674954526368979534376580657019506688748132488994259649481602782027268796321496293234619922858621277867678825491370164615078298949196552511455124851536133799925473329405250474593913924912551804901403390831450711740501508314471344016110507593788337973582789067759260879539344607152262224215382333489330153894940009834586533901180095846730855291500939551837669345284373711184756405666180209071363312585030301685774779292178313316406602373255646327348281134955048336338727490454877812787617492427362023670761057324483134159661968729511955276617697409266496712072219753283729016198339234913450671856683431220026361896256233229763483100008432120294903953687352831503401656888244700073250811277269623445793796563405171676855616924791868998241051758600745245397052440394156686933344580101379617401437696817984459028218921041977399588148719347919096302390719921087960315851964586936208155974897770793714626502400010799023394074901830556484876564044019461148646704484745692998552151910298131789877533559303845220138187074792203552289300587811989652204054350569388609355366352079539773210398305281469358542324938107197041217218595947653381833043778081164511742732935680326233241131641428417476654793443376871059887960714321380031930204997295874730540407682218645410154547363569726463842192519870398072169036254497989626119475346195254734474880846366685010394270094459050207503355330015842707449098167167948112211428609169028462215066248890291708247636295839908593225052889285032180148515349175791108452276764174092593481970638911935180284154383805459092545680971655577656000718287895404174650864444487637275330486618588627887913198091137313600079403324248364944559239416972594744134017813214704259974060248545972845617599594908395004708799034010940349453335426733467851508855124434739037794790113915284799938282633515926124039300489403274166512016144314450767050504019696951073496152282334971591755531534918527658116356766005810018865387036502835277104484897521399845192578397217389066546258015343671781439530194484186424336132467982739290593716534087153430243415506786743021432802857971661907233602499902567387941782564166386342672410874812089691799529503443000488843767817702945159240603649832489196454539442081235188719658702765814391130506231315568011273524165094617918503831867012569022324402969461007866076655261544955353941677901200948344001405059672259174534803855786509381749106901797774448058734457124149367609992922544375497404889378084258630248150919968340293441413856717836345219286003180349374207341129088557493435423239964391016550727225456481162350628594289395184071310300179756589174536625319150383798785373066376691658528761564820534618453895379491843182268871603588369275077855410841475816916672608469381494765293579645251398504292250764825206147001031380918536905798997324364665442675157885496504116737588881183129820652811664336805124175412738167561167253417906013601281586840716605226757932860034772050966241473341886952885772364434302876604236880399216981777408544673261443252042495657687251968928902101306694702738065723310727043271924859335698667952366365883749591917139742105118753077931026478251365210693917236917159155967697763044367201149926693443948539699579913602708706722711432838021246855315885038460450756859122906583939756348652891700451630407133090901515174232078445554725093208016341426376158610309666955884603433032223065165852248565738599860177261970078536206931153975848971431287001632805433404957578207772941765098112799264026267445074698665059729145576674938934608054531809788773719961126616990316210326818453980080321988760982334379271531791369297582640574651520702873403331880456606970974892343433336446248718921846000086640006680764293893307983492389270379130633842798650803348158429980408513212973097444321318667389109611955924135884714672638284288772566998005211664934734547822982660638379730254204195834897865492728459422863551908452096176425627547324850175172784662840168613264736639310780854731722004175205456083684478275667370139311794044918888433282117891203786131932421524201946630405904103705604352951344094166243627023050380063835187325378976884921927883069821201742308833558695341662261151498959733037164633952848288492505505197499859566019268823236129754425893906449877905855504081397182635782376853937776733107007960687910397361651834577002303143087866448497366428780519572180278375369679225575668491891544012967905489645541044473614128660244742603437904495496004459121145000204660640788761369040236852666481807337266045681038338455762663801212249239773760849573135339910245942472057741897143798714888511942994856977741299663716890747044572844810556164536063761986767836402140711391146026318746472684683736517628592458110701485687350372867786408697530159165580262455780381579264667555447984957739182385760977780225061084004806106049112388374908757400568145385583888461889658540915335972493538978104321154519123769320702224831927212063777898343511469299130626487155185875277476235831577797403193411734525969805530291201270196761046479780099300862785898294670735985568048204412072182439508001601125949813004653714414454010147969834379658692070731355494945150892188648577526049837658909733330381505835664398796899002686901365148731947521928717964471059772305071463737374874406416651278356408918633301449776192835629215568915731374744480004571009884843731735476903477562446584279323243628329043070154171111030416954029897290949469967976161666719811003325138761099757410714225754805089491754951146648993331480859725730046281101542321018226211161218032808157377990274486574775247295293446271999216933362071677144037958846938035870357017121382946099997460180182187217217820316108638070949402341509021488404838623964004697749860791584971181351855741948571771355034517420282039098468418778809673122690363103723019689210278682644736222976118509622284207375261241784528558945409584782281603428222482076644739841708067658443152632760947992710970595496336571116020117920899681972595692145247586867390993275854296221489381933037318139292360281964291441764499495760508673368168379423816602792242572983422830229937308653522404847350290384106194221461480553536360110558204157177392001034747822538121785134044265222471502565785788526018168367500851854368644667069187608053339694123467967831636497181955436837184144618605482450617195904135269079047201637007435156663520051298601126128369945944529481020638321516198582623214543218826748293953436296165935049635820455993901167665818294125029492356440701038244166842363513621908344320848585686797979439878826598478637355993217261347336958935084397089381198078856022083300330117262456180993049915148012467532881768933263035840131555093550707791000541507741393303110968532024193273602133335942404611643551498070626757534418055263575760282736414364452938769778575091320674432871296496661879381856396240520797406048137637370857663757380205251562705321737487489618016878804542225487729084746708529820375811443132907266237938994474813800033631766739207459417966080119828341415764580961209459326665346025307463631064586254511715110933308682061703769489020980806855962724479591125787395163620658259594004092166562170516032834000268855499213998125944650816177533565867482786957117566835113604843003762380044014420897831990140335889989942967539299895614370850827546132043892135670514224732115622279448086834055661975850510059575409653558505225706327368788238605905950679120827356203968736553949603508567674941011900196065319763868748440255691811431275690300510418853466423120699880274299502906401428179717337224051460708185153900592946400931539055519213456766111907891650507124264750664276520240241037246834114060324514820797852416016033426385928748625138008254308550145235061493199996695892684482660951996875137704256478179472342925959911345035957714418554051230886742531878578912441446768201652221881141572325507385719459138517136751018669079028246205826509211255942319179978511691727159374093169411671988666216994674771387581235589884768273625075469787220620863887485675316340301843253576693265829584060863611223658502419013220705349254141879296678287934598990177839246206875955136263946160336147575157943154184876112942552766291737477532772806816444968335075758603052677831616530597162083339994792052192524435339516491271771018617304228747316364353881326364901896898510732593688984287402238373219422623300832304655724736690619601526746558520579969086684975110249886471858004298619330841151157594042888413560753001085286164089989253446994193592178607918900886160044643360093127301377281151260181516816234448235332218822653468714779419621593045561237278383012807110518306356320302829822203975624356719898344296257410860244073851008991224738267988788643891504893485173066765606602131746590564072891775528764778009114601909601715732204601099651995466171422428561778738906387340637322539207184732852648369340774890627245756174444189797920171705224195397835012801944668568199244460984454556749562726348626755008071045094089456543538334719344496279903285819785473638260950225191989064998217546604935254843644830354787903047294704085156710060314626981157703292007319217920772059875929487108231502602963313451208908800123467770051210962134514589094511232458059331648208202240238411255010578542406383889733905056465012899219382378659412932505825923945018151275013771662079650082951456689539196985442677624790938978370091323150932644989813926815926713764846502628535537778970161281065391987916405930855478432409513765364564416242604015243337740020591190036055281150381447998127901685806875751795496258487587782150231045731795366439544769654743511101346187573916565954617871601220556806571910322664035856441943067590583463139288226902843506064510903232434224397360091696338842373040990564260619541435411792673618388777689980307230201828335309818088702867877855077758454325070909742544384843822430367944236208743002020404743158305208417720634625853803097299728910140526037383656368066889205000542592984418496643069772107977370892309483087973050493056264411495806490399183836440009935339770300091372817892264236279135289290245333645902675314110412649989844978340728685671821112290828829269519229582863992855788155443525507663925117628911796188678980556041341513060132014775432709153262923597668710862496337413472675889360137051840453387185317746367448685333562536587961087795964381494602518709912953530990322369678697647756220485903298571233830750815526500393713347618692958695894950510589138728887035609091986740671003066902402415899517198377159897977346749717804687344625438051024990052589164200510168556411467500390153089322228903919050120669166638660142562191207450620162728156493213454482792702092126905050509757880809402415274410795695253751046401154902184294192597738198949251837113299325218278871891594334354748578529416161681277186999781125923908898170603590196546728188587904407695359656110397019078754943031963775608531765690045741190503521917787960634065347919180851301558862438424029407982357071724159087489759092692094168623631500220272025560981867388778272041688773757867813778995307938836220728347748425397447066334129722102586996109604827849770056592342207245854658461155777410922160788502132706011423014788196149318932156333527262500699228183533489815176386063167069054855402190127471059557044073327189922247461125984452832296717571418178543557996289436839762935964681924754366975350149396326998775147547939177889984004415721' ) ; +test( macro , '51676101935731' , 5678 , '114598568890558892351277519655251349170512457301108169122918046980237508383487307624081510756564677550336178477302154205298849988621620086922824241203952845169587118918761676702275886803533985126048599159621880798222780212304246817740927997329598603522333259993676023070883723250177300932925278631685866750044996349161018487418710787156824698743699059007370890842841419231416436426583294134280327799008795618556337681789763639042135318458712688112601941846586049438371804926113126508996078777819094310659599757182791807946793330068376689258887811689995072195331087218152210579989587318167100041773383622122477291943850218476496927044272842237554951357422835645664516760841149829622887677523325405719345978782256416220091760753375551941881093250856520343277787117543740369641738849743550250267305042707228709682744788048246753481687183391246480490101912653586013524077299683599506874945043746289984496657526568247754108757916023746860823651106704947454023630829841108532968959604789557821034558282678387782274892400435740522133769190575725840235412871894976415960900858952703549298673487135436478720837173606603965003749202465844411925396601850697464037386444381718980799446621464654550821206321596000370929647608427450678602369409467488634567676260749990886237210425012278562172533337907188794399372225626872733254924000975445679212294865582779159284739536067574648674948637306603357526281158214867606477582551408107503527328338793768794019922917887582376894908153461450324195019808790951956266885107461973925559489970262966079308484289377245650607102408136209843678657317031621605407118233165024507780188477008776626376774732469991901945525053633560386998290497433245057356518070213620275700745654781100039839338506451450577013486892471483552928409289830016271158248107951963293890564868178813169793288638609421552999187733984144553406615257602536512368045676140620190929856992488533649322354718067519310329366233012095782513367770623099210385145306068882019668219811962909945944938303357412007436455159207921731034641005985972731076872404481351411053559046816512985501762256787820371273853296301441525251524961854980951466415757745095790408750111233498938399843328976884101167576106332111369898329073992906185716431137905217592404057225277504661400556077285374257237710751164948498254228336520906926692000699164318088485138209956632046211769172737818805518350576876409911238994857621609965737246540747228915599832803850235006646505920161663461782710578007459880127628658300436718162035702759857413264686037450843066618529962777161180564480610570194083990996868348589497339967832525631952114004244381394862686005465286457021469621822619867151692227701982207711240403754089139160258204655040380941387512320543125847873280531581254727837191059980870831091122923417959861596435814654220789276907248261882603123131749272763005899889970210586720440187361168097472073369327028087807891921073775186041480435653913681928394558065224090076679384591070891307475995293653429635959202548503686994214508788450093243004124213718944072946348546273490462900925735733454594192759136002496877104912413694566063277128709834235803795521599955020375102449787917179385948650401410782450535088196592336719230363010532216782360997264383385827672744353408971592600267691136637128647179666091641390767353626655629610767925329336924814212570169908132079298822259312790776336192539171954812142459076936946385158760440753962659197081868092892356974717649297318187816581273710002222637822422625907248946609177471022616696078166962638903351786881559353388016022793559059422611570772104441502159519678683680896440534678482697361220573057326321241467487140124612227021769519132788278891261578500937493023431494800715316974572061757711388338850673314696559686053949631600706217179936149359062760652855148968218517603478406764660079773518392515740066557654365463358812116383920109518376511927056859803872276659655935142427958378419267026204993883734671725916631060714088945987606306190400841739343960163767980632636951807150346899488246361701225858275512527213850024197265932454942520600005445974264278700061722886358112352180245501375011619481895903494024525948428278732709789878138429844599672738323876521649110855277792436882821166942741738868002576408435397753753580116182952236210916267829966145925028378437875898705477022525397608430772386789943421906088726337517286361167325374608638664447743003669920203279685500192102212678244500280945163720924806258942015670529098264965727843346426114488713290334508104318728502382771728945872501553223396187212916235118458655838036585541800475260873636577479118287025217430116350907433315459696137904514955307303089701947453368286386613774098275500676250943657017383834720061347722825211956235385743059349300184053076658159489552304525616565099968774334572359425467321345729237028949216589829910496148348266399952259506966453084807497614865786568010359718381755280552030450357482091573325492727231276923993244258612115652943501643076670607096916922788985244717748167425031600866371091539018747314619844176434458885344303041217826099156483212620631712885522804065144269853819342281878739269471469710167419263261298426536005724710899328976253518828717132656525336398408521558604682092666618949049723934689800847063844761671282296978918952554214898709123610631472079549040944065036271515445762211638184670207178784047672153843595557392899022269520772862968918684932700339559357972321385437515253951979000296108897236060608128673387896445773358382692008138068938089087965375939805087660261553154170365883140110004255362850999174312472258828659845801114248663995523535651080385407122403810220614699534394862199070170516370529573724426277383249873364882798357333666601674798052228774948816335992020369901620508453181317972153011582161807177844672456985443467954652113777013601630746866436183732233279064589871750135148960495813527709288884229866780850817394534670003825516127760071436525331020214654659944097612888206044199184355427079633744822550780458499778237357353947422296038656940932241020563615278249555508480330508674120678052089502789507188213274173100770916834969313508824784364056056402134407244119638598785990062688861144654163575302227468770905464187883181134822725915136640612107272892247282302709032318098895359710245013039285473099721463792717954735326941637258027020359449474131956608190956922971406645107469617185652049606430376373658432400056414731724407005001708692411063413271177513212657905468790370163043951258130982778875673922295809518571866979572550249035569072335930443175450876647946083312614092963535991789686984682545283358632371449413497269427928750522476008103850277182197862744717478903974777451339726925492684847344667201465331748104805481572363883196797787778153950751138898727728375184289353676704124928349416752637531102490310279351764714073405197836749014690395282266606472002997382187295402889448513435174099451342568509159453242120888320839737697049616714431772174331671258229322246266889685257316038839337528724509464509575560371587287218382144584572419703181295877602278221106570930586664027065311454892200273818659381311150404756262029418161040565111664447264252108585981706307591881047374954123445586938599411011096620619274323216164888259706949545584064116931697419880810232135950719390350713062967911958144149654637677624682217905237402682589189689936992002791828405957862158911334297099480655817390013698092780805866900709190383307511190456176470564094830491741371514412781382471608566016857542175626271815830825751173841300134557318244910059728166314923856198690466209098544666893459074761870150034083238014245526074209050076925214228138545561830243367680472907455390358950492305796631316420731434125187536810546887612854361525903826549660077385607201642040850831267699276814362171286190066768458981549632902853741404667094999899553250446338548089645534133891269993883172431804704263925215719942166060373843805638153594804487097561950457231382850176704556278355177741960834256932103041468108431421024565688930277277827204256767781041934083737995080790793709338041932760953129953324240749245316117068345243350389721646548464456799564122538803508302280206449283869830911336778221946967418555187670963441198271217790496259964780654563445592505556519078267175564184094236772289072470230033320640614537275025449633888698376301092731992965463666856043698716302806693885087426713749261988769556429463390046244837567904659070225420983410009710978888428520162826187731324371494738964988237894717677430862117281326863913479208553025891950712021033737482821762882285969238709814995624715621242460823465809517565513365312665098952226387532971101201851401611211767107556328808562154195909528062579532668678860849786353548436978596941540803973584469644923040177756384343881496136104278613378924581962143710807219315022833887527431763513942927784402594506818541221504288809623165972198540933669494785758163834650407164355749575134198337788610507044159766150241794499149571096051559220223878817602912552525929282957515181558545301005606558272154807998739024160863626434649314036466134847629318039975100093407373104577388406981878656175843258194717523909092875616040477453623785051493436611595002796440848161148666254022016142475461311658387441335732482745839024940608008050016971556249565896984096952364713943123112125591933258703693851493005494192677788993225349131525711396145903045479052901233399936977821783416065979989065328839546014013831203847910851373499087681269273873808794681827032455802487324933071462267161585550348497079770547563318071210788547323150873537668915925365865275006606032948938992420253484030285899801624037645490546643734003092212092762896778094831579400704783040331797648705647138803684988666221643282949518185294231209149700862655885675685742587977247470742881671606128975518282142621174602709267031158360580359120233235473997243785917055987801766020914435512416873713285800875063783960692674329948345063193713090346106430960233900220471049512359484540660252000207287048940904649627356855235310748631701290142334022573624657571685050543054539462593343925120666965564304346218619573761401243630815566172421336337019044921825132743027076074431860266381081919439461501518228192067428154599552061956522454587058878725629423271121973055948964177586675025613775553459402756099732937841164187693906160490012428728615553281749083877569856034002578003805619108603440019554292851568931421048023066958052204343883372931130679073105823557408875100214126784759475874110505599354169570696609784560599958215019928598013718187402289676120592754363058386217976480889644579627120147953445090187876503616327911008391800184735093377883625195033462470489375923507822652512086242908850264792687042789386655227831819214938281104644932640292609019834942621395608142214243559409841197661527772521605594271433534022197568992584336382425215293816118135415822763659169694051345319875623274091939751368133997813845916207449451701850545644437368283792955041875417825002650183812267921554071554148141810545261132326348765749042696757503149872630966032411848943742788719959766685423336348908720532382273782455044811025224688005258724128117375301877446615463103917254847301569577217661986908844517236064250159012321706048888909681124601158873187553237768719599661206118675972473809098983711387501122615038573963236084013215429847727184258992906237874964751406104681742937670985077393504140518585378445945934961441800684055554038233956351167210957484786967705794592308352175762541752214854817124986107384580167149061884866946918670005168162259392927744148326558953622056499756057865517495516987090419182627739373939985152189775038553115538646471075934221909696916621433427020321907211290750366847722032569885358324304825748519823761695735069483610277833391784268305687555417321060681254063601376044472764727209479821068239831947119222642427588604524821548797463869612449236554848366936415329635310834448639523331032214535561193061625240491292472959421415693842751590387163835477828542899873873355067539845115993799752754206275423338217062076744831694087595991582736550683224860678822779524670167708708091493709146151122212285091313848566637581973054913102622054948327816252692080182215324465447499805634653027067312991605368041127365270645100770232874469104024167016075695806268258050422993127312933128697504418653934394765893583568834878949604860449521880438659616802122657499696711371950669696088698654540203231615696906652300496120780993861295366389568887602126999373711575248980111463126737434199999923186123228140458802135764964497499211839068795147064258579583962890520656631190772155927073711649314137404718303647113380977808317817846980386481066453326264620161085488324738434460460038866634635020866393862469381723564361661779993116516911788408702482058657042742027085322886734485737469665890653383965527251028179320635401480247183169549776451102905415564180956069929150480364980253864993561144620337603341026450280648329108363155941423746477676441226330763778143302558927254074511454873470596647216773968167693426794670205504808306963783432036244979681725783341795616208450760202661124160076951242290485270351100016293179519729579532961953093883990623843703845911016699084294413469034800124849706899721051849479889146370628964206263232509984714695180238067877770898591308982070720120248367443358203058594410980465031081259361282748294276045466637842578800793537425693971319078319720309483472991281827652766395632559627448449322724455935973458554816112349560437316476772468508305512367513982203113683319867051472957794682903830326933115041030819168485955295547194534592544854770444190167625774242882339856600323988117721872329621119307065210242378471925603855682602511342933926964022027574473668074767250277614350240898114804833628233917590283331643902799593247663848733995782588708639967040765878261594144333897235212151312166170400673009191876880782817897642797305674083214304116001846541558880139343876729547122660589815784784823845573389037426438950965231475933765920983976255357185318394294462939870923725191627253724661104724674152692069584822984507668895796308777450228162744501914688617738288423774855905509153854844523303840957562160021954437904572106375782764718235463296636952021626993854683250625366396838736958893686683145675963239492023700157535671554883718959215653559018684790556050406047348053882167970909777535677010769091602244371438842557331819164644414366880048931933080199464775719509620992644091954275270680288884109813652088838217429569522796724565190899510248605280475710488565214118916127660760240741412774854958523464875335791354333554221114105991785983393823020076734058183927249261932463022507518378417531613595367008713063568456526553921055526758039628801741635831559596552015920057728581873824235567176123583511244661921620535917294970250780006254560913313662765305807933366774232072453360650960008438817118037078045098657774617616105096015011390156583453754385678396291801322575711617682706241038506687001234836301806498523163010650449912433471614658213754184557683081702691883198005157762869533426985772871548066409461102566074482585186196172527568428897050456306066648582770036459460511184764057517774896339386592062506459252579461592560474665528416239792702809524368229823156443879848127098290936890568640344899841675398255520835326531345996368545121081712559676548972073976307843066272299578779899750067849171423314509815187548244077378329796193933542997364333804995452518983295374300579841041477430234285996531274115737469223410436044734098218596575261885585549688086844423068789246324166549747789727265524050455962780001580710226770900533745079189013929659478693513587745539578848213377469358275467176678200951122297705749503306698574297410712427125825591862363276134686251235055301972061105661224639007183964902695034424436437936253659197166818614429825626676264111882581783852335169138950280191270126993381055654149481441296522956835357856587690439122868336488948939918429473181311497573245935858058048846043815567877289011167331444931953925754671240134069623866836792786186011879777990158691547401988209088233436138946304596662211246080716963940999419458347032733075551690030530582476791228961785738428344668271954394260631144673445131619681560910288236163257493867850591921101601774216283724826035337528992934585854238509545972201306935022486046021526186153884783616668536070352766884410433501411997774544944294529752318683967218547747054919125920723787453768874396140732374376069661038491913390225584336932342777315761255948878551294079902768864779706744004767497971699010857817837320331732586562556917485670513125539936647354410777628785488698349835379591475098154799827267570479952391820096174179651670850574284042676840011853046780858800494312309921469703542619592726263073590976462669364922795234207666005686292826903212848877481605826947453296687451059719061958356539720636942722901955175023641714596609837815361932183405821894237560762724700527878714340752426908901818205438166928697623647899633610409766731686872645318577714032460894835086863906305213902132263709453953046543560314104677422693777305934218298526734878837051106284119542143667788585456657142746665427084921846682769309335227479860142774263718482271045462438363768361342074577613689416306245388036366588228918750297891553343601271116018104061166106299788463499404576467234680999408128685491495431444663757432415240164158488210900819745907723117930120695685024585064625587827493034169505631321361629073305032453650015121172416455507667013522455054423012824659556913170191784272134013229862167933357870440372597009868509136667331096909772244774497523425649971713882182557907497459362685468864499900443106554956344003403877683026526745408126870149084364211072799881433860076306106247851979718211066568293397639539451283955573658564108776175764110532523449193170074167594375276229899521780717952518583208904105756371686598266057406647087463129407379439591678526118563375375353708424759178126712588851088358543556455828259242229752207982655534691287505400579846562914613465114055818872346386918363454946173595045963724905520868541270473697264250446046089642748190999453356935960747546554692305385529475044104740895111094053981210797991140570926872891670773814468169522981197767273686316613791050298552624472953601064874491619431515581298483094974434200152544999972253615705670333910064258013397051190672327809649449512231521002044431168670777665701194943318920142732683570462533039523306263620225871545457775764770604929953997570625951936899909518438534435970611071611463871839879758260799824991623563429811928499039440771973070864273967278618870976632376075488071575461144561219935848976261991995743418626824010282377472581361028454622921441883252823380473535980635040675347266665813701114359254871281962513087998501938848746260785427396775049514168562612073137570353309933421182587431285208099490235882059772793358564991437202016800963518589761455026124188003465061263343783842908952238749299315855490241309786950824004062760976904187502795945035840704763791629996479207882802190639214588281672075545825412562820832491492193486742631064101780835395570244051743402738881730159768458032350492340983945389655058528481715594070179000970782625156057915320413986266019990172337946416918557063800133747641604183437713060443142402624891881249459030992935793527950409840201343706778667031036382270368309922120727685173156943536928765918297523291556499898745165164935596868942828843358938043957961029987646769997740718353298902113509786945580718208991358463177836638025806577481206139581029605232343390118748079783839195843230044920030000293609262840245610181309358224141510030238251805707053062432073731984040628183721390347726139606685474826304883630174052769377584217789247910727483325946473633314792666461326212634921565119552168762472730204002086252124424937891781185484626212876955436221477165360031020231430386214870054108295007899715254119071513260472470230202533983791307938408960011206611455326096801350655243853398472597807466586200601253211741913149771316966742972424796953362829778527691461619646698652901365907319538496395153314189223850326377266970571724729299225616643375250610943592593231827466075999846471798767809815413033084807935411432143738782707086800700249890892016781300755462774204025643372850935993536835930431474211275360661334909180169369108705004893833932685971810039967903674985151600881858004723253102936206563045825118090129751111068119272073957023228117535946104197559484455044224813743551400684035958704844910240433782794543523046179137502988175588334343929604010655262873143788409800103840149709367769678272389350632655653061526909944375166865821226676124073718040169866120459345622225584107723626981527594409083885799002170436455111357966813110193233521883524236223930189338177788877617266977925443568413998134839137304794431773484057275907471161083605792371548269896511232018878269590877998951467990708359705970388117405757636229559483770009754679879169950634139569036627493168743252032958240435946744381139249473095508589299567208080597578309780705860706366590038525752672682617991285144702659613402563158938705017883355247903759797019472262560188954212310667319942679244018502332473572330860141285275142567616352011441717389434820775671752035498192835097210704346762871785843394366619830754655068315068021943501597109761283722605580646118265029950836645428880355482809418017207519930746525482467660956501946286248673803148678778320154527985484392151772657071003568822396992334569447439518931797472794360893625913323930637936123592307936959744134660419379541520223856359015281561124867120268443532762202836358157067397969523277941814805842994278790015196862449348685333746940835406048087120468705315737810814851006986239662973395622981892417635797361552255577200093154926399160041205233526050099942113585424767102462092543693848903032320176365611859456909911464662553394222492702361972492589328743134628042819438985147526265136537852840491772207661691558509954371067469519662258250666590165226871146827599529979187274127942586949484821499948977145043677342942737229631023377843981185400933835831423767351371476191843662990866109519730716132126804072070640870780628344547744782396291260010070383315973397408134147633405837121702299828479485082965001168058308660534087429710071643832112134185681191355797031035640660674171124608581811772720944526748929882880981531600483484334329258782080131950152990379792064594496526209604646130807483497903997981366660814109367081501493013317987778423970445235345262451162417303194219408843842138074967028470582769901836866713822445861935378961772248421345450181825317803057793865331808243999032870740776976064805740571853847337064834310551096634478336669042763136704807586517365797136211624710257953267355206084531695186978286706442628626395149607414222118992574163280333685823680906473269108560879550907146951083501973652650163620691173614434376022074343663278172616794365354028350879611668170977299413329242853102242731460245981931645393086566419168095714547735636341109457537424127013466092829987029469225005609148935719219627886553517060926819156103842061184103249786722102357857380363966877195050686029417164805540813780785634440605334896258106006438094052913691329158675367290141201254618676773332219794175088755775479718673883939486154200593603203954816323103020616423867397093710839615897871898114553682658447075458783118190023366087506978374367440207438924966819405213686487476793825253259734471325657957108673156552118127808366008364042860528540535034950176612182005881123405988511608306144849231503055132715499943836726775291396811671741107037864808220275570128503090451498085660993674239141408137294509508916040084880385126052374726220832131130118877249390053885190862016620304127338330822376885177520007162660545308168910551027048206864259306643403258146047122775364888620470370521404458837255123240697440311548296630455328683555320575028845668660604051631191978861891344050450146706574218145025744150912515431643639763471496084616921691588906643318094161772942444267813744245201380387655455570994259537781139991672727963630401572633729986361556875282295744688790419550042115325815066901167830915280249317272239032336428833326465165088029450553351265755331884109528200193953474902952152924946185562536338925534826199411100653632718279533909714213316643228976513653756607679272611930525331509533360676882289504637968260788530354999017751472236832783844855905587554729452514767314824700008649155270346776891167316609312798908304391728180382885705826358462049930067611387677311125159653938052767644809094689360554558540305110248935812740648171186350593122648008331898865084081910232912772214306873277181550887217911939282490833562582253824958566304651212513938680716752798136384903060676496603824306844521424474974798402169651179277198301900928835877874551786318031213157816266052352420958386807745919890178528945692073978829824318254828803767836945769264370965570278955420236563465318633087533589358061430931666035989509802975402163642667940061694906307745403336415888401856273908779094219374541395289779919505811512398727811277052044628889676576204347887155453152137381991361998780634451422237710883316724087265275331735893833197129258839234716392342611646952816033259950054307629463527993424446629554718055401467323011537168845330459671616005062986429892433717372769708986976311304603813694466876866558852113339228482279288771725065980107614730689732508546319518769065056680957782914367866215918590112732510471009325001837807792226514983632349787121937850873634795369167442047937893608233634609666703704587131733723929085811244615783860405178507877859666805690049528538712275243036223309707838878743093968440740186365488240924198311296922550429467362803938321202544305084030232602891812533837834720169281029831388109862088373636124595410033526477352125408960443495710872004466944740504181430539375974997235191384764262912442475167562557149784655839519095519656973612676149775555468394211684073546313305136429488931374979941004482067517955299494545191338214275004688648850080625425657255697031851628472826812878438128524708409359692881087063253264481220907184058301090967458080899506347453532002995200234316121374098161410900539135981863658581370995732911051446451138998982787447971905437800015184192194998890428219996377737564767442914336298428740825412724669981656100409516386221832151219625497417581073077338087294189592180026420910118672014596652061567734369839911877944565035730463100962767041999720431147498003871428186236484743508773318443952371300988256662194348824041466733754460943324754187692906063468991068425866078952725816706806990970194721942596702352590797837064926809786719427373172154689565613653917663261933894602724198203854026358029130198575484449317765398657516813791597967078843130547339469073783524497382496877243498441684162650928487855937959542776542381517702580219111410239373945791463335216468817891797159897821504141336134011961229585863213744116868341898479921270173994357042490280766042368231306294592305816034402114190442648210070915119128632526643207927399206403270502196136290923785508894091611892797999732479898770027343898906937912932694388260729491337611804903421576030209232881941209677305990236485778758568570909511203847749727139447140750017842138051158739164470079822994287470311711455580863809119499634431231542924995363573544534166199416944524373140000391672173343392584556167540657516390123765234814227550308964579212558077778186821292704585207362004093356520798803551721188807088087772466898440741018646115406804612936758076828507023774182209672664449988128724902414993501219401001765370672317191401925997949428670713449531376719892790107292559315329271665439517184073930078672355080717529913180235718999452728793715874798090520042529997304171394608223665519403070588265928559013346665409955899514815287087015895503845612331949334663867288844709249699760870154746576067740617109411671360905733205915721144812868914282146396418963599623786016511558301453135637971753217719122740923575115844689612181585533098056418282958853896584799967463642188879073429673984966106974767322904274930921304431241275791867912140260586098638979591977302253507591795249943499668854219091401728091291240324419097106670936334674554710470587846998580373319693822832186125663563662227300196033318571309952940878063796339388257833300085483835132481959803926226375922877243938995147684343099551037900344498227926589430544888103232468580078181742899166208452521226468017225770159292796370494628221608659705311860880457610945893698767024912686130786102451619763311388742213622180967440266735615377707064630432362851346787104938266503146626301826386009911001332410273267944348625003805191824863507525729321246269404084347151934903222130472688695181142909993054528914728385212132736819895913661164653395636100392775995046821116359166052147490259673545652512579506858292074086966566678148092233349090670531856554153436180220853767903100802098585062424675371471614926784976597351943926464759004842764683915776120276735116378854746819555607095002547606392301607456201613727812460712017149291083250455836242558225613747332670029560146313664626625184108408526435551075760616558918639998468694149252839714828173433759651731790585540238768981676874286013596872690278563046650509425213768568600827027602310874261454666959825912534982207381304504165906647669730083754622626706293980961379228599568320787109947615111949624856762702790577996604294851650710262744819536909560241872405354015195815901368973088718316821955357398270458847336192054118678494760800661846422575105028339264471032443221584848296622560987616922442031578568960816859233700095456702725652471996634621805360039904773049493081061117890447026080993179208164914084001561137279717964474457910822698800571370948730739574958519456023949553713352403879552609629342711187222946890885571493932420920963889812746152759211771233710658321471894667865836881256359416902697886305637566565270511589302949804123378578009588741245234061360202559864224187793107140310370774238991415782896268860247160087221743398632360201329490179060521461387097002495616922113269135683217341549840373435949057182322394943783472872058473593126858273723016989321497958715693848778260916053432892608850153974019086350180056263354802687994169752296797729166187979142462997664638545934162928193655800594073599868087694021711982073641040542199591089911339670166122773835431930957664741772458832249655277342309784943306925485650386363310465509184262852528967556488981679969063781668502292160178629319257109918089175245793016717386236635810518592787953993726687773744355504320944066168920405278890106620954397703842075409790585293639502140471672275176364054469159930595251498121123000632836929940035415174800963695560911591519351305097536056757497122738733247223334299439795964416272756974788281452938919543919179780495830578105176873022791010237618749182041436120814538747344362413981166492880532981408473122438956024899704764414827372680888359069383203084252482710559799658759140471216458496005546408675587772142479513233766094809931909320095433919996718551768358151589619518928107632509757299346855803242881198506144473507763036827161335579895814696687756797267492473907511129330448610059311031697081944370716803795577518487360501045579868709621241757229741722143091970632237708849516805918096189012758100919518522581134272755075309636666228932838080599671285408828093511202116961319849653073610668505654418211025373854469615185587420505700575888261495326807192713148159720874106763838858514416282535260626452514445199386144279460790374332488395321942092245696971633409779711403667148196791467370350138794216664252879537117245964416540374786812119366723571213640039312537831206990870490421854920889257491088284125753811729442672269609411252776690642554159109624124410614773690847589962809481591267437473683970316925645103066449528952833136986667526561057302938060806717705640347372758940854559438090824022934117904362128241289781935585414469223058188520370422811243860774239667131292667503614480954661643166021094263565562954650536478763836171348484291106790718789951482491353812912872996022446709005369204478525205413817559888660494002070759867343020833304262695786258762182090471108517478008062047916158342858928375981008630590361530730991533337103005007767024431048399846363323604547570763844498393678827412313502948266613097046593733067129592808782764829082779540513431895899823748129703286439371900576065601753249715130145551395611158446136282331860450878473803949375391163105048460542796053348711044126190850489694720890621885113977651566300965967733708467656571181095189043634361442938460620424892828907311518705548399259321673290854432989232402033427695505537391672297800738391325014683049620765825976502001490715724896015980764535931939727448433948695121642423627605318724132757699110767075442641487063525797598420578507881625322631258275225375353312907827229233991901973469958877318300954825891826980150082560409853023435179352929576326184297304876469260675852353214336752697472278921785590185472893192209568387192363535612736411827177789230687431274148917049359515220791900149954463891144855694570764248287491511795465355571647974077067810042898359708679406723077456168802915159985106685165278844446272185418039624433414989676529360733224196806303027701699401813246007448367635711560091194638564196215462750260469722895057683130186655197563435087042456745552261726792507936708788382778795714813046436130676422706429620437824366040216140317789120666296561961817276627472468337572371444709160465057566385526105800512406353089397311243525990809771719833722278531018522388436675146455281597431804631523542433155277652876622739675563673188640006742892639445098465242739506308240042149149884627632749060858136523029010127328467486160496136970964099609404485275485587599287991078550382891153951255006778605902787210807236763823509705570383045418472207043091603551691808413012509993628114628175790641442073599128028234496708954756607086944124895421408720862402696781696349037884497396953950073338348468396830752927901597524196430868111165262332019170855492271790130827789573109557139053285109689778332545958693287355659898640515042491550628028917049986801903913280115785942913725572192146862247809512151632511954616445305241282672393782775249991259990268401573895663033422145829424653742257468572830795144571447217172170344390171558138444299290663385049414552445567639181283014510290419785983701505834195674761038613042562189128641343318579288380854262613061171426518448419053079528551126733990801837900708461500681574188884795165426161291709564074295450881956626201918302402436945381093124745577171671312225963759197527876184346331791160454187021677119481282452140937671112699410475067112269611894574476316058950214818972540215691086743676782333339834793090049695579827352673705992602098532938745690406929370454895121406852644336817988310511018606485003687435377377880357687101549923752753870842331086890020957072110482921078203892582825430743853678938678845171550824421056075012746445684719777935620199933697201020688921671515732288023709159460020579281422206200660770662136186411119039464511246972567849083853953974560152919983727889703872145059312940206651954534823197197456037124574320069154489362428152384518561176908584188017896443196497458965211081852296712793505164224540578823521427317961999439433840947679261853070347008183355600509419881301091737467053884095017880299752423221585377626802533750299111687354685486159204618103044084872599593910681436894070175869895284548114007698177881132942381244912110629421844127353550884486951712261822154242410334674508400867284003116207597789041715421899510712174705598161680472160639854366218120520371025267080822589762082721234822899143897023722519527191182967187424707516302075467248142839624551051489916072253973677889265488627584976956960720624875569085896430625668405496389507310955276293395519901278703982054295957616190481642061914557057918641411590376116837069898283627310675729905679075315341752230316326873798944842338809064711121830318844994995728478247554519759647479833188840882272330805936564717875937759645466235877959356774680757359186747964855850779950002190153225827761646716858046423788030255771497227479049063699882556523239832981578690856832572914858098641904135700095112492548076201483334658215008902573568715728628589777880228112444674918240096125221488915805020859677852091654966635145651388632847300280396301961059638194991615057652714347324569091348372183877979671140165075401908204991585820352573960135268809787675490861799359172749390316567281411205233112473050152264568898538213889610052662413601412411722965122929820314537969307515359259003169193350947717065852529386538881686267170773291846400688708486999155003104663586382344290816318064759978010654953537866623711446364570626969502173544423423074929404208942616624720195343641583097741467031833905383231234374060924479894152342878888888587110637396276339544946001358888192005723471164751936785560384570786894012343324076324959874814196843505410918926079285183879707107430170210495856306080442455608822862122117572876456630741312672784076158322593594055019414285422443235678980565689755317999308802910505961137210498567710018536735289083212063487672806707334546206404814261141369706196328862821461886994687577175390043169221020130498162026839862458973943014519368318441838195560100295968496734198518495996314945289548715598718870583552621401683863581183106851205684154635910380524563847117217821212106128722162524253763046827147151974918777923681784807700970624766909477312166760595507462337125669968044357089923070482883709634106122062070766308810712735710624862438926613157497959226806833188459480017662980172063360634178971275611314406393895211433271861436947760659023345158492960047345295499295662853340265551685535599800744092303711269544719828803680436916119091632263364533324661266862974434455516831152632639373435575795104537875888710518410020589958339879959822445451353658029443025792509752253551525308255741984775779270729019138683637750829888081844708006890211552146344622614088468708319389319850769307851285942767252474785352358559267431807815209013706262561029595478897605034763527896789052350336340918526657057958081872287341591904736173950725836194473696707391163580393299902911848791441413850082003693596935427471422729646162077763129389201152696915172964938281148555040979580355711393742641390964747263809506784813646753925737960500015999521599040534422500550634111212967036120707920863177566166569229503234057262633077041307108981897403699595707664375223053442154801646621952674073998016018204114207792322619912823001873411899291943544289433976296710950251614937569204757779765928995747738757818760854802038762304982286305288261345463881107741394409631520373874750233139799838650413255743318875470620818472533845161123753583328874495241216906348859022307736592331867789432771689184631548324581181882547915784645287665908939251778029107639157159289196176127518723121751560070469290085609343869257334092947393223315517614003002467048702184847384690761234900833286623358455281883757151812237381345516686955628191314036123519539678665398336254286303408505084714763392222044018726750547293413234050365413766358316654410953551281819431995257295975108311779909520303889212337450841246936324792672921730951765343962514538205080555856311467242150053436496567701001851431642012883560394627048117888153808553859689392563362831101945847612823435569999360628749362849396263121141428978393706694610773760753498445233988754224335605409426064724465150571453306140168263830877100622522054887364455754048830624591098148199844437954318671983054725473714673721746781284214097106750134651020281137856143339404661336097397401255849460415338500002693898912492847012546892053061780546003055285372933509996259190318553322495887219489025100141803027682285498654701158621266627181173588718688738389808332699617026792423659913858117693296106288197971001919395880629554677187346338125838160292486198360147729979871273120571322032028504575690735750011778046083231651989085708906682400875964848727543577767320694907469192930438894927009743546491436041357955549348300042338360759281377236265892227047663620196806664771980284507347099402902967733697999621184233818138249990684015970535495278317959125975524991795957531505015611136002871680310533093786875108515066706678620823077849432976257275439747172137699295045174649617946011443989552460583705965135899024689374640564101925298778186797415025378969912635036062934209463477387146111182074864014263939109691429255035354418183096283089143643718609144817465350868728368487526110304341902202363658329806583404243426301929038999413811963719928900533075863880385638026377355762024440421846082611952343954020299294254318741900205024128317877368328956627168050002516703106370642969704283772358296461093955291187494644342390316988195849776128675653911509104542124861217280772932996221537953310962029452657975182251689107870392012504852892547316032463597681300089847160255250462914104176616050444245028613939373851574524967337186933259018554428928015559462061881262235852459856089108099770130466183985887436588873773243601088860550229426153384432008657567689985229925644560273502542282381742604579927654137058837459574794972575192961456785170540640531904771432931209781137337286211239818317844041106915878514399961654100374566986719879295231727712111771772229486027185802483882395198074790128622402561348121667919956756920273231028898988580958707002246439749981244065925735360676364733954118132106641155299199544857249592009103053430934913609249297653361487158248749289098935130229734152531034647060511392685477854761239602786254479061019382441139667288410559126176759142054940087896465268370081054931187899275164499441058030518288371926823323313797222058155222896466033422597096415435116962085378815549492184638325958401951721290473197241670371516491881467203347875585007359331254528344449459950467758875267278189820752127439854852566552803870490438503143232653957782922118685816688148722781734903296936610500471173522177161064283024894888579788472305995091180282414062431445897622125893030305492825543169066044111330888912781754024348338736557326750833574402747013630048297404805583748083230530028596408741040030162350741781079342392865246051725408625341045214944667618371021284914091497257188761924767939637028534628334759882175770670772289957481292738316309937728650022513231422234754422579929841855985946451468684350390314845273621075639131390824319325380971724618039332427557919436402942528867210146505840229198062530002639445641553444719681044247172959043190866680070064196331063863914130249071095131248563606711066426848149947420902504927075034868938069205285471610210028557331474791661084008529287736898562988280474609439222101768158060840395982029394044056801641541171538945243610104322534200730204315260865284828953604535787727385628812968114791370986014951254706844185451923929072881468774586758820306110885474794911532141074138864914763733541384283976740191875378571118515523438069807588777000827782446489266182050245346558837361947434377809680600377844482788019840369988901856492040146378437457195604765771763497148753529247674438388594397093126205511452264943420149474713408497012302647389453439359384872233770236640360026013633256865164883566645637992031106481526435623633931034222232355213509370961371765010288817762179693552242379775216656260241135497573014130795564397554787053584387187656853711857623431937857471939579985035081848718829777316272176681052612968630380592713032967004361608181691291430592912818088530249261471767125961629681696763811424116391066373303384993152768280740948118781184558104319987675542498579919858166065158389793255707776743744116436672753184816598112104831674522931550279998771106215597545399479437343520773636597563675211447481439779932609623982600338971268883683768790803057118303171340769493891379059633504014432705976380151918797310743478564409243233539718255459610193420711760557630156927018163410042030919328901263062660290810416055096762283837210531454115711704392214764971534200239720890924410613605239216073127851967270391325506751978212863009614699353698989489629129966825662563519386134716961129383146386288035146250197315211925553022512173302931962094722039477374774504846268505683930350343868458784422880640500784492844169201589431927903016379662303396527872095562568156390966362645360971925681857871968341995483947410283964766743270092620340260322997257237091573993613689320984290367200247030533720027280038417097783212839273035096338938542591727622575162362022599685496500554429222347884038006453190248400027743775341348801335215989938742326080054254247170602001952079080816650302245176710604093355842163642360723052540350943441654273802237051128416322439426475234583967057527446258480482041840231234842602058417412378587528062618463131988655226053150118765238820025342051914431270624521243139110536045516721557341224477691444072542250943379523540914610979701581620559268793412031737790984636977046879757487332724442490312397606565039366925463662967999702808542773925468580692839991293056392310917374429934951347005612307226284322964209030221618750098429366099194983439477136694496857689442264881224914039910670322116288372730289047738573108522450033816672394101565965048622910696973855813020101016596778492150524524163597858951412311844796147364899117621449468760602813472330721658608635506930727103404682194935368589333167590774588214751222713377251630553526943871411102693132298087279434996411605103626921829523837922181308665640485185328298412378683376130991261907022373866335460773339455678784703129263634716537532090282547777127534019418852120934212233684269568396133976431366342292873151938449479967788561358899533463702974267094796359284987637751201598974404152475871775040728557820818028482149140963098586410453529806961657287735738138755712151598174425380024951275335199558910669206209576113284903353418478945780694878129790034895748753362050781539824584920892084749347087235642519520452342493927793799776786136198617469969693126983224168201909587877154725998407004749212713544394340278146389166186340477628969995703328593195001704673717058025352438357468612946242018587325606773986648467186870072551528951891526255461310771157406650956757785133396326012890387635813591423184033135516070805571730845080137132045429491261012978403015641430817512666681469843066257060720964098086648402611312090715751833710679060879766494555066896257649913350023260836668751637428823100349524601403601892419159189925922959275820633937990644299249271169988339019515965180613573895432999894831577608592304848155696364198541694025900829134781366210991417472495148139315405572913400497872095116583163635740301688579861226084476006780263453790933289131487409161550962668826089637489553038837859879843790532691421980575061315224117692153481092599586056471601215629186621130434664996556516932298784329307022398027011414332176083277481254566740985113591763468957331875643736921355329794098131053487627474682120881562550550881428255655602726301461818701211939805917586146895437388795911816068375606614039394049767168461259001949273538210144048916666534903327280258028482616623798309398413700586176634115625829647911232227507375334923375588614078459209835676422299267049663923396700676273951091983057302624288416865668362779855525365118686744053391254580621393591196711448438077488551738236403307762952589858684493455657463478117126363062783121291423235729455410918637867035685633113782220139687642412165249598360509878714727491849673012334378180463831584187354582895646400179807708658382550667724914138565820039682009987745157792741850123714960764039841065734298623591290702110380779922504349890524389320347890308828719589040376100679017864219311467557598930026491189345663675214233027772264878374490381972865809240289051249348258334250741010764402699448241367513588990261100526633287903176928198197677117933055092254550168988385755711184604062724032969041641602920344983239296376314963817502741923901882100981471281443446703980599875657083621988880973620719138197772524100421922113549246894114245414372112090493791692600291606869049421927806267868540149608572744342888343192125058473363971742076638014712200975997813876869820888826654477230072783335769094726343439363924451093740799160365246814221521418251509165560016088242931176476666040166149409617751387959304000667838298475779617451435521971107542909535756971647840211114967059219572740619358273317825413217697042690085081762346191097822496311788562562031626726216116215298679994354658456828777010935958029126216060917819707341303406969946319555176649237050902062556966761241375058739571292436871898013175671381669805507508696910381959470264039318613075638568464398580077833659887720496385166104378193365458881086843156468468523490854549529450710965680147266392003581831969193933659362316072852675420800357125522249098898054570353965505168107882852864529840652677935931955087124815626428567901773577880059003707684993021595642820310207853594456286754132723969857923337469252202259735727997751116848764487235601899102596111514927141978064206334037406646670461524244267294399389563489619484717324536636445719285643430736881017478756148754273773852289888136125549801175894395271495950395640707601607104562785797592351715554623869028246265577155348990843423689483732331337719099850118433499218006218421240299027208453829439559447186342420117431465432792072288988488740343057267417723708067738577852233243672319230819937439683915440649582059516544561598623280971773789120893086121672269536624083598033868209624720281605641588278852741452020860395156344376951038233934553306218241725396467724828107444994633708693546367123495314361476105770109803860472148239644683473596101653816933207579295804239795231250209707489881769264862491580478053842336543358337010193843107143139943833585292436929169794827683225645488250493758065708204332690153429283252246824483410972045997105029219491200004356064388873493046364077650981091839516620395962650712687713049420813661020164790060026130112716818875580888149422706314230708204130100772098049184062203228041362580051800921206280742731510572822623376036459787961780882292249221002031736456366826421727834687640584814053632480791830200948413810861443283626261692032040972578925220311877455650049930685081104107394628130349553352694618261578823385706710078304466022726537115509158412710129375703385879757237284539292895988728180490390220496139617988669206437315385861127520716472864870732451423836516235084903022716386874198709556735053670824221685660220728278626961642949943462735737024852061880916852346905339456156753923289238892045090888056432159120268216479709411830925161705073727852182241843774144994444796800812422381396128011433956107925125566938292728894518495205656479288798467478295768971565046605743380817683675039276816505508751212423949926029841364819217401250701049413854705548216151519699389827283019852789171293382302732747354572335967904262121679778835809536307205684993347760735860485162352359870983946965085935681532501893160966722375508805057199214927917795853333092263437505359039352967087492413012955087698529172665198805420638824693085516459299213503601188841365820793247308338096862952405825957815923600207308796364681882565126559078649360912095932577475791841991368526488425858095470521872452183848155746479635949126054100759873565047420408657908196467861088860745823440200596937137469726554619440021533471197651802029945746028546114454400341137146234850866902640999835474619226352406181906965593958219260459751945218547186010136586725824330239183847055787095688060314095111184685688138832308190665361771520893357047382326528633906357935617076387165550366027262811769099959556389802647692621844549401990735569529998624105286253926755935055719547875890932694340554447107616689228089562066086569944905859544518038840788528630069102190204691632172591973746465885214629803758001818354722671577554377946458675180639189931170900056297193465314174724380797003889515935304761631926385152267377564862725712122407042606969044731545405432011544768262989326191733481446407893297863327714256422001628622845256022926722039032858852550966980793417370766719350671793803838423609435455646884754065033709502751899071375163169890856762230034353248802768786910964565926739703092124666704198303948460691736963253713870119591703313690617965257847769243951364137415307103859326650169756472734611428216414046385745227023184773573317555077165126936736741629792481292498743205155835997683268172359371347012456091212295887484642867877578646795751622965835785463864395557880638259410281317519825410588466995700288346083450655637106260214808311406178732561340081016232526189760751886271379564740782676263559705973541667456189291443581212424404676011914816089260905831619643542553993402039798670408163878137967461241701829503692199517679672763486035252098113450580438489510602779967538406778194913724886699243032503589895316658938365078639346817966446042366971598315102456226149656515684119923736039138700680083951001771224019777161575827820297993227494571953532246936982900599366416589787251517727463895146269431106027269854190552230633092628014821482309609635823553388474087969696520047538050162437487064672959995402543841470139970706134643073875937981889199695346910796106300932889981171735045657785459463379515938396509980647441968924682241853711106019941292568600206670508573236766497716210397782410983939914467015508129203700417353471801331728912556922317624644415889241609181001149181985321743941473620491460989210711065194784149182976559106558188134333708873913801535240126355571162155611895528080568951526554987444334536731499537753528195430833779794624656681766785270140096283044140898051247012255419499146558168259139756529674323772834587323355629868317816780292113528663119722680719024978280040818470547128362669379424806012577422038887191868631883448040020015452134369307399895551088373207616043579965759272959559449403269879855598910900010706024392636484042799046911831117069348975342142583017574911456602802451624070688915906429274072763654290623835166951367071267497654861627881666298541483065726588427718084629534053816735134742365841971731795029103239286268275708328610899135163422402889934113026131852180686527150505983759002779807773566223011788941689719454712179344607326254690287120395766024482256671418388078554228023784784496201187429256077058990150435615351155216101657438309215090638315321592936537200580321910657657215666815341247654573083731344740394722638474346512544521661792980002338816800181577838361703000507770721899400195844878004251805255464724701063911083619487594713834381627924257067711581105282570735802353540652641183829634997288735297250112282208477996416073074851093528870765045321232820222921439911099170191434612580973635919820391541809473112124075733876951153040686421981760730940392248786343513079856829965044538757787037942418740284997136502228750221662928279924265870962201635314064803827203966095428887928130337192039410759247169242739168498523247197273121591784250520458251462557288339313896397732661534729027052493515404201580059981956608905079272892706164790429218771081619749768508639849339364643058661360212160610191272076371006352322980097730083536900596908930188252920677441148336565335213544052062940677350237569694340838070570449158815512736492862139779132213211843388066176862669989419112198876291824452684702959605871999341982491423024679580081630979799600019718579349756991631102855467872079017699044841433689138792070082691245858860091100747333527615921285623074522312582760989162946865573374037829302178739225575289042659045727978291390647109321424303936944279972788242891964130377157310772605953533486292992603361085012572105175885943335595705321341456889458117518989992036681091968371021602143621382567898278967201088486661538826229576844449884230327889089656416829054301277201456616051237734474662164978054102538036494621644430726212087953103526033051131027386921359383088225533719150606934884972757665515341103897402690521343519506346008077717938429482549626794547576980199283223676534407717065157853712801659521185640516453515871565192484321804442962765733972699330046829989406888341627015358639514826801677079021155478293962619923778866000228101968771938334162366469804573202014667190358534377215482330962923275262634963671825984637003914633619143396330500521755888969843386922843589872134400996113166528653861650963770197465796117647298541079103250256973646631652580593033941058305941438443670583302078961092385000096028004387250797639227058729182855207638716095753795885220489180587608501087576665670950961102068748473102397688480068745397125317899151900803171836227422289946173194639475472087332607221032204172993718739866807063991965434685529724874290316386815414750536825089647609755324478912829208542640630837182428790314967707466436030120046677693513719304754091874591925748831794738661935209325972784637836372417065832634101495661541702552237720067651495419730409007777535110394473910436455762333458257497687020560780560125766474028996604483310845299656108458520836187635944075062965164082259016665860024741824447869072154938884824126520956717610359345956570059031363334002503160837760160190522749970822199550294007333039256459130986258366814988498652039570467430857270936255566922917138875176546035640770701881537448577626102002317298447304080275355918518719943682484835725447927289531637629163866387981244986227932821777092957191598008618007108755043196577493390795743913791435300045489842318803840629056604453508622889454329052961581308249435966212373719648882667006349214657094779879673766929203239990406226893937690672818422017388165317029813987140416820890222156353954178254095413385973580442456560445558499420284582912636669611387427404451225546415356155838383066957787260635657953616728518750757252485659572480629089199805995107320554322842323926689320663451184520268687258689886344606068388694479162354509096941490038433598847203104301976611951445601852362544266638679678290075412941302729162013553313728522646010957992606699109069616544863135068561276755095781547242671190932783722064505309964908887877840158912914910105346231151775487613772792899879678519963830591786250997836698271218528501056595898076691114631296567610559849673121473718916782416581126344147631655121086933981180869415987776601838722614534041581254100451763340221780549086746753938766610289735053241990894606197687789239665605165716452187952517064149162738755920000811374455502914943892262459729586085538415828908694331245193074260696566568387741004970586046250406779678496790295648201386486985620162529677519187045200318621917855086482423481330608007219543743506802384438536607353392218691697424857241893460152387618386782325153321432760552484142145781862136735387766492081605376589501268788700420050453317070218115339201229440765302660291694287227700950440380765107112761096963572158992801291875003909086676778623232366690994533299491222168137364267573039455654289904047646814229327801683590630142563153751747079457858925522910205111288353935603204598220411265610249301465496049605100661153637159888807908902323782288115917266030548928229073591717694655741521631460966838791102199409138425309485441867582737071365301751525547942825571779776968661573074132570848279551828767121886018701878619280272422103259889312657193875315049837541388659071098765055026282156387486107899591956053135772784100496825157507016394803644582281562465844931202245768097460360009083034532364442320183540873202417639221501463884395812838717474792815470457888288508076821945174144028105860328866061726727674515030087857289847427613927570162848467465868388369591904690837471560863827694337872032073339132310877824074716599328692954368440290176778939622098606562704309952427724800739407743083724696349092602202149637692306858199125713600548864386864010917928499351492615039593355117890366131905372145092198636688161883816483303851872238717415106454350355132051773548989777552757443255371566372474534435441848412809716879074979241665690375961387244267989469704939164542096816857631992943353367922943450974577981735513285980794037989658748077626750133198955052583318759656463244526191339847597578899938757558196148864075073244250467261088756301070340776077937405119970413498591233848696140017565253179511771575795275131945857256304538740165986955527162558693404651982237870681250364694679537863190584566503257017428760056979496904352580609209111103053294614675377385059624280899965796306324467850909780831489026318753391745970785291441580820547774726329434556660527022852038096530229629083381153469692319673185432212788337117250065774907249107252485740348419082835779774814914168825271376969001094340761377648487418731698243293622743693716904170881810872101742928109037100000977309557903344136643273367808231025012640831073700517532261466072965558652756539975841935786806116867047742157426598876286995997384905698693761028030005126905217313490141907445119240485586174004947125072513293761190201760157186724092851713785477603552145995848354307689575140731563893520272232436224697297570996577403366115446408204985059861276880231146593632332116664047060124406837360322379955207563026996917043872020612169132773506149751543096030902910862068818208029741138639192386867608762741997860087946363183791825619263211533747157596191757134157369834295405013020010499759058170439698811648143980733751968237686573164454534211394206136959587926718539689642312494935570859665860568612537475919659068040072420100618936747953737753705749383127291409003383837688855841053309435892404414955527379658360309647135313289366129538476897703162917189354281206164435348255552192776966124707287270272355902245433955885751207009741227994192134495378305063561634794407295832195458144059625112222238732508215922805408792621363851812950739715101715283572373388069309775291979566994423956314498349376967149231461962778062765502443563061034611737001968423504862603967799669087117588804859019639157112753414649335925988454052986607957770870482923146856099244325494894435569370404603972409346620158075409396512099348903782562196646067345376443663877635728814318418090231549113721533373625163581574526840997161673119389664334579356556456354401159515864788956168788481450985197215201467974181561001940631241149619657961920795580250374263473722428593232378725810430245637202518132904531251551627240821059617789024316527079137041828262423203999027718050493278416463558083739015666535614730630528564883352138943172947828201962484672894006650945217851258824311228840838756059704734974004156889921429014908926432337401389537678225680966329782263719847506238362967059541391051250329777158461686302483375117714795942380458251770588312881492313634727768589869682161697321291504228940601873619348996292388777724630285389255078462577634963779959329989151426153404562174906613363783607243267517210079578320766293154362152207280832251485579899573303194771526628078798007578233062417352061348072159821545393566054519332770028296707118564344742106657936278687268732675617734737178056510690046607762220209746122648008510436643666435541902320142352415694782992027493364828745928747851672282706320889132159909846882540327746849007379809382050344297894224907120550708900023237802233950487712523780018161507312354618054223609497536035163494093928091032767640336242711088275287685948003533785270118743240118979225026796544540327468208658559416238357927216565224536669218251472645443651889081645564816245005362169954201386198950135410692688457725430323102706392241999820836165265276591679465060858160505568568712438796347024605304900308450966553605733042168429732916370172195896437974642297090857585959129744911909686268599809774528624601994610190665878857027337811884181381233078873788158373359983366672234669655911799888726805731249876450737363254821569278028649052801255401131062341913855820271583117070719273865683054999663069013111249121297160457447041240423061246140642426490959698720730873511722072350750404737742430572024048268685119133667530568425561907620950064557291163632179554525056907363270277399640559645834440273363853661188000047234146519397763559239145260412600704968936012028106894549688440479900267973574869188916898200795990111065008878815333729179214937996646495852784883698591027255166736443038004395574418572899294370967551529143179055369802934328561669594406191593608936964899070486635648836640763029576597160034720166645043990534279613912479497024231544925793613084992394121484803964852738532840786244112636713504212176390740168740010064318423771759800182571206639184134636335947786714976994584189825206727396176883875524645479643946415113644023798932248203117158653341801005086972304051184189910711151723320637594773150678911124405222765005192822545537671036184314807662167004590802562833162356684840697492521011525880952899271472039977820122616771265024357322419282091459744940443106332422973501916691938329374288973886386034592918524051364182398592764975688780001997803671401869838010577270717330444418407603271989346719916686888680593245148354943447462721033986270080485900155124951082963992792987842114837857821508811758170325737210523836242819698681325151023148163454095321894993683800138795128096101389801313982043237028325779746911915430218574372464407978667515942327600656822134915485630059582718562671520698991302473350312566427091102259532338314893989689756822401425548363478786325343080669902177859287335109626530228527804055908960006937280662896796945405843803882948848124047942281965182397536936457929889578255794210593948378679524919234465908033421164868438416051929819069131125432441300566879775210550054157419483806784214653243093753518480506741715472803332755990227351462034161722520909347730060870649660727422118067613395865270827693082504392270738618254811116949038529595723094576904555387646766194045214126185045174967881222625225420294995105078164391170749628652025184869718810057932904459780474128600044356721564987537843310493494303165385746459512014483412377153293124606805820556680644340261399666836315845102022850213187298338640077707077917127911385849411484173150612304233608674207467083445888214784873006838124326048603420520398039994672066938235732542051375164474479235433550682373983123832947238416282024613236150041949833072908669815550674617589673248615861702017780769184080195436695753443836861503161723295315725658560497271219460777837509040504799004521018029935893811387189517865310399566336628995254428616900954602946642481835104052723177763215261081807631624720322398654828944688261281379543513838399159096503176110145561673340859375841223007298962049354231684731456119013370627451653372101952784150843366485718683154707759266001380413461198030059470241851889381598790912932175523398760753164627792920260871619044331651516812323419790246774100510382849642369445921137356415332559100571402192386504324237600586223716858020906861290616574468722975254000616033200134525382789948233703766721713913420053378522189534440356774167756989838340371683053339160303712468122195094451323769643603060107933336317574884600660754013122975875644836292687447653875456366671633406699749727233770775602930171119873713327502029649301339157436902586985805804661850651842865010512710599579744907900725568864758808468315496153957143231085273655909832339900927873362328571917762632399121621719422136842073993822309314300099352877919729663183063706089857543103711226019781257589533875565388292807852373328379571498654743595708116126805997489585227762613411374287400898540454081729983600454020975504859445623078574230082737441934713309411334435977095406278491948107490251001075326160260816166141665828764940536675366409103075438140950942363295087616474038594568300076749067398262609892149434246290522082284867369996747369036618212558758764999033240531377456820933035653514739288807506785309262157018155354164246038618753605910751171596544451629138375154996561231768056352944122861796274432731602355764359001440423701221314110232709724507824830537580539309136187075390125804621374052404104186962215577145031687226391307500214048177954438873320863455884008371509806523844996560156955171721235083443685969318160004631899389556155154887502954567874337030723431693153231859698126685897895105095148228879264170688790144046095670747756454596689425959992788755978477536636909986217025002679023725302120269168121827137745844016745136986531559713305374725826662884442853078675832269357444922580319812405402267749674742781956841448786497782251691834976002692470785895021703704858388868515265760165621177267080605919982230358195653707487049616510340265334858744325169430110779016508192911580225932171227930158137898121057272065802163804143176177861748042060613560746270301387882517734888125466322091023046199189071897531864764481596203251883661383342557380251629906535720631765398761130171689454545284542849138949012752571883712193005628020569517371873637657312815325305329151583778151502917902733190305271744684958622121010306471264222608732792916887491000707158866999254047913786054611810141366817747429490945735777114365311619138196776056638249387208249599690279274158972264263533482913699417066232424301052566108557105882321860415953995261011470246610385777123349945013365720795738329033328267790338461440694253915947579607200765511873466671258279119860920470033646635678259287228565899281046026195224102321794080074560857019502214981683804045378001236533286039783959384004974440166902266486137702679291194779601542349226685477920055280270194687371379891364308309741325341794454848006333434887621180433722346253849620431677039433650809755697980501277777113845268685091187424823340812151151597036955214920274705302810590187488774145471376334439641472564400585203279952036644952915857362994275837591364735007137899752917263254850243740999519067606448557348572716000678300808919766778877206053237007230414810898261174192999230284869838903138569158526989803738366062311867394482801934669491046627645436363276196627877141926295125717141746847349260139498229621952941926164899210479487462540920845674239802557539445478424605466878288948565437238163965174286067026364536764787585857086934460845630429301475483163588819083876568053843919529815202317165149427461863268394120150501380274794164226549074722497966714770269857429653319371853947557581888330894630187929986442821810999712432279880515190220225825103925627914262396261528127570244033580516736900703944157759769468332776781478170997801067263584947564578699956407063202560483281763769954234650000264770866320237533750709170825618178829121555348484981912976077434644897683103996518259302203185739168355670343119920701453229307854524542846194775780342354148147108371829689841186079764946697999961540609342917861302618236089580266302442813911419612144783451058076754515595931540231562270809029227064151150119300956423560999465999653837045524948746983692965835699733590149297182040483811117450935081926236794221159650071490425720958495747811724299488339537170111127932294679341722267132041146536871343639598304001759956917134651127380387343487435851780856522271135939193895628494326974660699269244961652914573600667083355775273620390457210060853612580746188269631693582473145445281407145308991224674238036221680829298174220621860798197137043727200723464659535963188623974496505669454742056367794214902540739842325758539378897401139581409478646694538433617227363033864822552034428500528123827744206093078356383899501146590774355751444444996321829960061275708179358728977432374068967803416414619266061210292307970707626315000351235693107429383685067164757433404492504794750614444438344268104672144761836840853236978233062403887482344558895359341454623603202631096561293380806547311399902028110050717415339231618537126224678146138703245509801626065686426890214790932004293128602116907695945906954418031458955572518471438409956497985277462584714340876550751083482988783963757153324906662143577507370210340928704211200056560771784033654183722097707039082998185723278388513255915407843806226096942825934133693270436473297298053131414410673096167498440524501223865224580163159731941779290670475905774711449587324396052040903560867749633607269786383362511207050385233066787151038662750888189396417820848864094163550696516989046092304161178546471108800040333177562861096097669402728598019472317127433242097596374209926949769666919449022650020469268773013778291584111777734801678122336199306707466885245484440238800072649836711310342917062136424156843313918053232383983078468123706545170731937525394324743353102231318881796761219340335058271096924509959581007125101692341639032718526132731465816895432810824251550267187134476525004805214087356728063163982776436973281937480367061490759085981747339946738833819701910602521740453589700326016152713271589647731441404281010739627169860256321696918143984628976348066263640404724742103943068890300262217919407490294185056643193778672788621514872444857040570417491743083668801820211916799180279149123365031855739327527333088498161734020418254440569737292101091210357772958736197407944977294083500388828156900799618885648926774368028577963627085062949536784319273455247935719907179765485929514896555210085742609479677331538755145823312735881427161972974752998566400151194369472948682330746237551435896015230533986496331433897402923227963168267620139539062424101002664413774030587496049713880031234957424411170400692461605233008783471512801605298659812776385852174133626209981186918938358345653057146829280758503052663152684412143145572569203330345681676854169401128235623310323455220016266200412727026684927816836926266791942439320137398200185642991418955464718939675339859727226028984577768619596135554459532721055935991298244358265061294663738057242475692460861527669477565237601695691691877575077509877316632375206719112645395824232996123929118615660776830180353162751919847202804452994454045882395557025233387374545070083797953533868365884599308144877121224106120864464121937933917213846371733319958318928844743660588628753216510072394367819660276153579065026923320200465135622260332133326790916912968206896304595976989601528304064458567050884821874068569327242388967568172502936668476374070466511317019575209348088040354641188892289787348206240433877593443377351012788990782745082720418094253843066182615519009334935552955266684858475485494938494967552976557793389120050509603720244080853334662123762719793723288604484467147679471941170534997419483368784944658587229478672681938138968282221403428105437551913127361355898698289624008368882129842599996702944503383544658955991070462640172667935141602759653551368815776369942044583995137647829628663131001221231534965839399461463026651772976511526811468953158755101980388687271069507127424565908828648868313976235679953426838583195080029733092861157150407331246858177025938607115915623640069410010572713698395553642613995001507855911638582456822041072917198751686674415946936002316231579585375014210379780938502025242931562025826376153063786386677390155167472847163910141829719442198145128316851168493735526463730798576431768575701484236408740789352058681668788075735862455978596131420928977008662021317085139495607926794154839643638696960646064044825882368579418247614851405354060662705787252435746949859486068833695557311397454945200620586897382572493191047700347322661176946901552848619336843851237375520485128070259328150932433696874607136164590619330725124114051944408510453107152694912451523749776692224397142477111739160271001055661493257893822390736623648614862400268263497424561751004005831896928283068703198441436303294281620983292409389164251515600756093175861284494043497224235994824226709698917461917863787094372023594255212399834252267422936777442893986231106470680422080051493723415218391429320112757538538152722308570014027075530844822501991820874404857371262082276060042328948543302599518455335980198371870313013246335949291371848114991467063678242040592349751000085649630969728832751513083136617133164475700823575348532001183443076306074233894249336445788755808856138636225218959783400429992989436381421511961005832721133631275549113641226868484408007284898058005197058362236770869886182300061523332360237274414046733500673667538411330822614792668451105454556192218178234854687567453892043600237068992115945877699734273688549462432595826857808760858752097166448743979126536642225144766853882164897991219139703135886522295432375281686953025665774373025556138491930286406006798907600465458206946206559399603295541764326024991786904949110480071204024813493511561562807263177679249625023722645669629485182963500555510003335448887796367378236138310691157566684115092107052582867873880273394459968866636536467871590867185180009580075210563577153824342282110770314631151974145511413151112232582017775144045997964536000603811954043472225003066247455557263394762082853850116658090037261991247692211882538771190182621125886615683314903791497925118251236601408921425321372440272474308166026376566103285492314773620130839791355348313991833920577761293186161487443714546368334266843700926550269914013363603933096481736261401808646916666943053625645047277738712426916089523675260346358278950869126866196618323149946519669426092399385520071822088538968327620951347854373933736478358464833341988758379440954439546160099695643379929492941368487698245794174994884303415895408845403336262531882986477376183597159377008643623592744228955744851179963996057437998203792488734880620325546390780235577360282627691738879284350348303931706658969021190228577090613214548879403331887319146436620250981113501638403068994314100847127956423998146619152481508119331358228736762915421760355153676599027887866998088313007968660592865811707769576845589411213031205772873869932186264820028102066026067911651743403664004162278364920630216801991357759335718017897355535376875992900410463543711577972110530813339952464979263630750562505388948802268679332820101592290211794529137334659869207531837711768969445037532706728557894994806768360107989358484976663557718022193801196136210942917405780671537338138341560189293146145018854550800490363261289124650531215691866178661123946688832836387910091158318626391704067701909442417173700506691173895530421379380710863913241518828902128499464067152291584149084550831801244343608041746464087808753602870085445324097573012361069010422206760722613567966626449015641' ) ; +test( macro , '-51676101935731' , 5678 , '114598568890558892351277519655251349170512457301108169122918046980237508383487307624081510756564677550336178477302154205298849988621620086922824241203952845169587118918761676702275886803533985126048599159621880798222780212304246817740927997329598603522333259993676023070883723250177300932925278631685866750044996349161018487418710787156824698743699059007370890842841419231416436426583294134280327799008795618556337681789763639042135318458712688112601941846586049438371804926113126508996078777819094310659599757182791807946793330068376689258887811689995072195331087218152210579989587318167100041773383622122477291943850218476496927044272842237554951357422835645664516760841149829622887677523325405719345978782256416220091760753375551941881093250856520343277787117543740369641738849743550250267305042707228709682744788048246753481687183391246480490101912653586013524077299683599506874945043746289984496657526568247754108757916023746860823651106704947454023630829841108532968959604789557821034558282678387782274892400435740522133769190575725840235412871894976415960900858952703549298673487135436478720837173606603965003749202465844411925396601850697464037386444381718980799446621464654550821206321596000370929647608427450678602369409467488634567676260749990886237210425012278562172533337907188794399372225626872733254924000975445679212294865582779159284739536067574648674948637306603357526281158214867606477582551408107503527328338793768794019922917887582376894908153461450324195019808790951956266885107461973925559489970262966079308484289377245650607102408136209843678657317031621605407118233165024507780188477008776626376774732469991901945525053633560386998290497433245057356518070213620275700745654781100039839338506451450577013486892471483552928409289830016271158248107951963293890564868178813169793288638609421552999187733984144553406615257602536512368045676140620190929856992488533649322354718067519310329366233012095782513367770623099210385145306068882019668219811962909945944938303357412007436455159207921731034641005985972731076872404481351411053559046816512985501762256787820371273853296301441525251524961854980951466415757745095790408750111233498938399843328976884101167576106332111369898329073992906185716431137905217592404057225277504661400556077285374257237710751164948498254228336520906926692000699164318088485138209956632046211769172737818805518350576876409911238994857621609965737246540747228915599832803850235006646505920161663461782710578007459880127628658300436718162035702759857413264686037450843066618529962777161180564480610570194083990996868348589497339967832525631952114004244381394862686005465286457021469621822619867151692227701982207711240403754089139160258204655040380941387512320543125847873280531581254727837191059980870831091122923417959861596435814654220789276907248261882603123131749272763005899889970210586720440187361168097472073369327028087807891921073775186041480435653913681928394558065224090076679384591070891307475995293653429635959202548503686994214508788450093243004124213718944072946348546273490462900925735733454594192759136002496877104912413694566063277128709834235803795521599955020375102449787917179385948650401410782450535088196592336719230363010532216782360997264383385827672744353408971592600267691136637128647179666091641390767353626655629610767925329336924814212570169908132079298822259312790776336192539171954812142459076936946385158760440753962659197081868092892356974717649297318187816581273710002222637822422625907248946609177471022616696078166962638903351786881559353388016022793559059422611570772104441502159519678683680896440534678482697361220573057326321241467487140124612227021769519132788278891261578500937493023431494800715316974572061757711388338850673314696559686053949631600706217179936149359062760652855148968218517603478406764660079773518392515740066557654365463358812116383920109518376511927056859803872276659655935142427958378419267026204993883734671725916631060714088945987606306190400841739343960163767980632636951807150346899488246361701225858275512527213850024197265932454942520600005445974264278700061722886358112352180245501375011619481895903494024525948428278732709789878138429844599672738323876521649110855277792436882821166942741738868002576408435397753753580116182952236210916267829966145925028378437875898705477022525397608430772386789943421906088726337517286361167325374608638664447743003669920203279685500192102212678244500280945163720924806258942015670529098264965727843346426114488713290334508104318728502382771728945872501553223396187212916235118458655838036585541800475260873636577479118287025217430116350907433315459696137904514955307303089701947453368286386613774098275500676250943657017383834720061347722825211956235385743059349300184053076658159489552304525616565099968774334572359425467321345729237028949216589829910496148348266399952259506966453084807497614865786568010359718381755280552030450357482091573325492727231276923993244258612115652943501643076670607096916922788985244717748167425031600866371091539018747314619844176434458885344303041217826099156483212620631712885522804065144269853819342281878739269471469710167419263261298426536005724710899328976253518828717132656525336398408521558604682092666618949049723934689800847063844761671282296978918952554214898709123610631472079549040944065036271515445762211638184670207178784047672153843595557392899022269520772862968918684932700339559357972321385437515253951979000296108897236060608128673387896445773358382692008138068938089087965375939805087660261553154170365883140110004255362850999174312472258828659845801114248663995523535651080385407122403810220614699534394862199070170516370529573724426277383249873364882798357333666601674798052228774948816335992020369901620508453181317972153011582161807177844672456985443467954652113777013601630746866436183732233279064589871750135148960495813527709288884229866780850817394534670003825516127760071436525331020214654659944097612888206044199184355427079633744822550780458499778237357353947422296038656940932241020563615278249555508480330508674120678052089502789507188213274173100770916834969313508824784364056056402134407244119638598785990062688861144654163575302227468770905464187883181134822725915136640612107272892247282302709032318098895359710245013039285473099721463792717954735326941637258027020359449474131956608190956922971406645107469617185652049606430376373658432400056414731724407005001708692411063413271177513212657905468790370163043951258130982778875673922295809518571866979572550249035569072335930443175450876647946083312614092963535991789686984682545283358632371449413497269427928750522476008103850277182197862744717478903974777451339726925492684847344667201465331748104805481572363883196797787778153950751138898727728375184289353676704124928349416752637531102490310279351764714073405197836749014690395282266606472002997382187295402889448513435174099451342568509159453242120888320839737697049616714431772174331671258229322246266889685257316038839337528724509464509575560371587287218382144584572419703181295877602278221106570930586664027065311454892200273818659381311150404756262029418161040565111664447264252108585981706307591881047374954123445586938599411011096620619274323216164888259706949545584064116931697419880810232135950719390350713062967911958144149654637677624682217905237402682589189689936992002791828405957862158911334297099480655817390013698092780805866900709190383307511190456176470564094830491741371514412781382471608566016857542175626271815830825751173841300134557318244910059728166314923856198690466209098544666893459074761870150034083238014245526074209050076925214228138545561830243367680472907455390358950492305796631316420731434125187536810546887612854361525903826549660077385607201642040850831267699276814362171286190066768458981549632902853741404667094999899553250446338548089645534133891269993883172431804704263925215719942166060373843805638153594804487097561950457231382850176704556278355177741960834256932103041468108431421024565688930277277827204256767781041934083737995080790793709338041932760953129953324240749245316117068345243350389721646548464456799564122538803508302280206449283869830911336778221946967418555187670963441198271217790496259964780654563445592505556519078267175564184094236772289072470230033320640614537275025449633888698376301092731992965463666856043698716302806693885087426713749261988769556429463390046244837567904659070225420983410009710978888428520162826187731324371494738964988237894717677430862117281326863913479208553025891950712021033737482821762882285969238709814995624715621242460823465809517565513365312665098952226387532971101201851401611211767107556328808562154195909528062579532668678860849786353548436978596941540803973584469644923040177756384343881496136104278613378924581962143710807219315022833887527431763513942927784402594506818541221504288809623165972198540933669494785758163834650407164355749575134198337788610507044159766150241794499149571096051559220223878817602912552525929282957515181558545301005606558272154807998739024160863626434649314036466134847629318039975100093407373104577388406981878656175843258194717523909092875616040477453623785051493436611595002796440848161148666254022016142475461311658387441335732482745839024940608008050016971556249565896984096952364713943123112125591933258703693851493005494192677788993225349131525711396145903045479052901233399936977821783416065979989065328839546014013831203847910851373499087681269273873808794681827032455802487324933071462267161585550348497079770547563318071210788547323150873537668915925365865275006606032948938992420253484030285899801624037645490546643734003092212092762896778094831579400704783040331797648705647138803684988666221643282949518185294231209149700862655885675685742587977247470742881671606128975518282142621174602709267031158360580359120233235473997243785917055987801766020914435512416873713285800875063783960692674329948345063193713090346106430960233900220471049512359484540660252000207287048940904649627356855235310748631701290142334022573624657571685050543054539462593343925120666965564304346218619573761401243630815566172421336337019044921825132743027076074431860266381081919439461501518228192067428154599552061956522454587058878725629423271121973055948964177586675025613775553459402756099732937841164187693906160490012428728615553281749083877569856034002578003805619108603440019554292851568931421048023066958052204343883372931130679073105823557408875100214126784759475874110505599354169570696609784560599958215019928598013718187402289676120592754363058386217976480889644579627120147953445090187876503616327911008391800184735093377883625195033462470489375923507822652512086242908850264792687042789386655227831819214938281104644932640292609019834942621395608142214243559409841197661527772521605594271433534022197568992584336382425215293816118135415822763659169694051345319875623274091939751368133997813845916207449451701850545644437368283792955041875417825002650183812267921554071554148141810545261132326348765749042696757503149872630966032411848943742788719959766685423336348908720532382273782455044811025224688005258724128117375301877446615463103917254847301569577217661986908844517236064250159012321706048888909681124601158873187553237768719599661206118675972473809098983711387501122615038573963236084013215429847727184258992906237874964751406104681742937670985077393504140518585378445945934961441800684055554038233956351167210957484786967705794592308352175762541752214854817124986107384580167149061884866946918670005168162259392927744148326558953622056499756057865517495516987090419182627739373939985152189775038553115538646471075934221909696916621433427020321907211290750366847722032569885358324304825748519823761695735069483610277833391784268305687555417321060681254063601376044472764727209479821068239831947119222642427588604524821548797463869612449236554848366936415329635310834448639523331032214535561193061625240491292472959421415693842751590387163835477828542899873873355067539845115993799752754206275423338217062076744831694087595991582736550683224860678822779524670167708708091493709146151122212285091313848566637581973054913102622054948327816252692080182215324465447499805634653027067312991605368041127365270645100770232874469104024167016075695806268258050422993127312933128697504418653934394765893583568834878949604860449521880438659616802122657499696711371950669696088698654540203231615696906652300496120780993861295366389568887602126999373711575248980111463126737434199999923186123228140458802135764964497499211839068795147064258579583962890520656631190772155927073711649314137404718303647113380977808317817846980386481066453326264620161085488324738434460460038866634635020866393862469381723564361661779993116516911788408702482058657042742027085322886734485737469665890653383965527251028179320635401480247183169549776451102905415564180956069929150480364980253864993561144620337603341026450280648329108363155941423746477676441226330763778143302558927254074511454873470596647216773968167693426794670205504808306963783432036244979681725783341795616208450760202661124160076951242290485270351100016293179519729579532961953093883990623843703845911016699084294413469034800124849706899721051849479889146370628964206263232509984714695180238067877770898591308982070720120248367443358203058594410980465031081259361282748294276045466637842578800793537425693971319078319720309483472991281827652766395632559627448449322724455935973458554816112349560437316476772468508305512367513982203113683319867051472957794682903830326933115041030819168485955295547194534592544854770444190167625774242882339856600323988117721872329621119307065210242378471925603855682602511342933926964022027574473668074767250277614350240898114804833628233917590283331643902799593247663848733995782588708639967040765878261594144333897235212151312166170400673009191876880782817897642797305674083214304116001846541558880139343876729547122660589815784784823845573389037426438950965231475933765920983976255357185318394294462939870923725191627253724661104724674152692069584822984507668895796308777450228162744501914688617738288423774855905509153854844523303840957562160021954437904572106375782764718235463296636952021626993854683250625366396838736958893686683145675963239492023700157535671554883718959215653559018684790556050406047348053882167970909777535677010769091602244371438842557331819164644414366880048931933080199464775719509620992644091954275270680288884109813652088838217429569522796724565190899510248605280475710488565214118916127660760240741412774854958523464875335791354333554221114105991785983393823020076734058183927249261932463022507518378417531613595367008713063568456526553921055526758039628801741635831559596552015920057728581873824235567176123583511244661921620535917294970250780006254560913313662765305807933366774232072453360650960008438817118037078045098657774617616105096015011390156583453754385678396291801322575711617682706241038506687001234836301806498523163010650449912433471614658213754184557683081702691883198005157762869533426985772871548066409461102566074482585186196172527568428897050456306066648582770036459460511184764057517774896339386592062506459252579461592560474665528416239792702809524368229823156443879848127098290936890568640344899841675398255520835326531345996368545121081712559676548972073976307843066272299578779899750067849171423314509815187548244077378329796193933542997364333804995452518983295374300579841041477430234285996531274115737469223410436044734098218596575261885585549688086844423068789246324166549747789727265524050455962780001580710226770900533745079189013929659478693513587745539578848213377469358275467176678200951122297705749503306698574297410712427125825591862363276134686251235055301972061105661224639007183964902695034424436437936253659197166818614429825626676264111882581783852335169138950280191270126993381055654149481441296522956835357856587690439122868336488948939918429473181311497573245935858058048846043815567877289011167331444931953925754671240134069623866836792786186011879777990158691547401988209088233436138946304596662211246080716963940999419458347032733075551690030530582476791228961785738428344668271954394260631144673445131619681560910288236163257493867850591921101601774216283724826035337528992934585854238509545972201306935022486046021526186153884783616668536070352766884410433501411997774544944294529752318683967218547747054919125920723787453768874396140732374376069661038491913390225584336932342777315761255948878551294079902768864779706744004767497971699010857817837320331732586562556917485670513125539936647354410777628785488698349835379591475098154799827267570479952391820096174179651670850574284042676840011853046780858800494312309921469703542619592726263073590976462669364922795234207666005686292826903212848877481605826947453296687451059719061958356539720636942722901955175023641714596609837815361932183405821894237560762724700527878714340752426908901818205438166928697623647899633610409766731686872645318577714032460894835086863906305213902132263709453953046543560314104677422693777305934218298526734878837051106284119542143667788585456657142746665427084921846682769309335227479860142774263718482271045462438363768361342074577613689416306245388036366588228918750297891553343601271116018104061166106299788463499404576467234680999408128685491495431444663757432415240164158488210900819745907723117930120695685024585064625587827493034169505631321361629073305032453650015121172416455507667013522455054423012824659556913170191784272134013229862167933357870440372597009868509136667331096909772244774497523425649971713882182557907497459362685468864499900443106554956344003403877683026526745408126870149084364211072799881433860076306106247851979718211066568293397639539451283955573658564108776175764110532523449193170074167594375276229899521780717952518583208904105756371686598266057406647087463129407379439591678526118563375375353708424759178126712588851088358543556455828259242229752207982655534691287505400579846562914613465114055818872346386918363454946173595045963724905520868541270473697264250446046089642748190999453356935960747546554692305385529475044104740895111094053981210797991140570926872891670773814468169522981197767273686316613791050298552624472953601064874491619431515581298483094974434200152544999972253615705670333910064258013397051190672327809649449512231521002044431168670777665701194943318920142732683570462533039523306263620225871545457775764770604929953997570625951936899909518438534435970611071611463871839879758260799824991623563429811928499039440771973070864273967278618870976632376075488071575461144561219935848976261991995743418626824010282377472581361028454622921441883252823380473535980635040675347266665813701114359254871281962513087998501938848746260785427396775049514168562612073137570353309933421182587431285208099490235882059772793358564991437202016800963518589761455026124188003465061263343783842908952238749299315855490241309786950824004062760976904187502795945035840704763791629996479207882802190639214588281672075545825412562820832491492193486742631064101780835395570244051743402738881730159768458032350492340983945389655058528481715594070179000970782625156057915320413986266019990172337946416918557063800133747641604183437713060443142402624891881249459030992935793527950409840201343706778667031036382270368309922120727685173156943536928765918297523291556499898745165164935596868942828843358938043957961029987646769997740718353298902113509786945580718208991358463177836638025806577481206139581029605232343390118748079783839195843230044920030000293609262840245610181309358224141510030238251805707053062432073731984040628183721390347726139606685474826304883630174052769377584217789247910727483325946473633314792666461326212634921565119552168762472730204002086252124424937891781185484626212876955436221477165360031020231430386214870054108295007899715254119071513260472470230202533983791307938408960011206611455326096801350655243853398472597807466586200601253211741913149771316966742972424796953362829778527691461619646698652901365907319538496395153314189223850326377266970571724729299225616643375250610943592593231827466075999846471798767809815413033084807935411432143738782707086800700249890892016781300755462774204025643372850935993536835930431474211275360661334909180169369108705004893833932685971810039967903674985151600881858004723253102936206563045825118090129751111068119272073957023228117535946104197559484455044224813743551400684035958704844910240433782794543523046179137502988175588334343929604010655262873143788409800103840149709367769678272389350632655653061526909944375166865821226676124073718040169866120459345622225584107723626981527594409083885799002170436455111357966813110193233521883524236223930189338177788877617266977925443568413998134839137304794431773484057275907471161083605792371548269896511232018878269590877998951467990708359705970388117405757636229559483770009754679879169950634139569036627493168743252032958240435946744381139249473095508589299567208080597578309780705860706366590038525752672682617991285144702659613402563158938705017883355247903759797019472262560188954212310667319942679244018502332473572330860141285275142567616352011441717389434820775671752035498192835097210704346762871785843394366619830754655068315068021943501597109761283722605580646118265029950836645428880355482809418017207519930746525482467660956501946286248673803148678778320154527985484392151772657071003568822396992334569447439518931797472794360893625913323930637936123592307936959744134660419379541520223856359015281561124867120268443532762202836358157067397969523277941814805842994278790015196862449348685333746940835406048087120468705315737810814851006986239662973395622981892417635797361552255577200093154926399160041205233526050099942113585424767102462092543693848903032320176365611859456909911464662553394222492702361972492589328743134628042819438985147526265136537852840491772207661691558509954371067469519662258250666590165226871146827599529979187274127942586949484821499948977145043677342942737229631023377843981185400933835831423767351371476191843662990866109519730716132126804072070640870780628344547744782396291260010070383315973397408134147633405837121702299828479485082965001168058308660534087429710071643832112134185681191355797031035640660674171124608581811772720944526748929882880981531600483484334329258782080131950152990379792064594496526209604646130807483497903997981366660814109367081501493013317987778423970445235345262451162417303194219408843842138074967028470582769901836866713822445861935378961772248421345450181825317803057793865331808243999032870740776976064805740571853847337064834310551096634478336669042763136704807586517365797136211624710257953267355206084531695186978286706442628626395149607414222118992574163280333685823680906473269108560879550907146951083501973652650163620691173614434376022074343663278172616794365354028350879611668170977299413329242853102242731460245981931645393086566419168095714547735636341109457537424127013466092829987029469225005609148935719219627886553517060926819156103842061184103249786722102357857380363966877195050686029417164805540813780785634440605334896258106006438094052913691329158675367290141201254618676773332219794175088755775479718673883939486154200593603203954816323103020616423867397093710839615897871898114553682658447075458783118190023366087506978374367440207438924966819405213686487476793825253259734471325657957108673156552118127808366008364042860528540535034950176612182005881123405988511608306144849231503055132715499943836726775291396811671741107037864808220275570128503090451498085660993674239141408137294509508916040084880385126052374726220832131130118877249390053885190862016620304127338330822376885177520007162660545308168910551027048206864259306643403258146047122775364888620470370521404458837255123240697440311548296630455328683555320575028845668660604051631191978861891344050450146706574218145025744150912515431643639763471496084616921691588906643318094161772942444267813744245201380387655455570994259537781139991672727963630401572633729986361556875282295744688790419550042115325815066901167830915280249317272239032336428833326465165088029450553351265755331884109528200193953474902952152924946185562536338925534826199411100653632718279533909714213316643228976513653756607679272611930525331509533360676882289504637968260788530354999017751472236832783844855905587554729452514767314824700008649155270346776891167316609312798908304391728180382885705826358462049930067611387677311125159653938052767644809094689360554558540305110248935812740648171186350593122648008331898865084081910232912772214306873277181550887217911939282490833562582253824958566304651212513938680716752798136384903060676496603824306844521424474974798402169651179277198301900928835877874551786318031213157816266052352420958386807745919890178528945692073978829824318254828803767836945769264370965570278955420236563465318633087533589358061430931666035989509802975402163642667940061694906307745403336415888401856273908779094219374541395289779919505811512398727811277052044628889676576204347887155453152137381991361998780634451422237710883316724087265275331735893833197129258839234716392342611646952816033259950054307629463527993424446629554718055401467323011537168845330459671616005062986429892433717372769708986976311304603813694466876866558852113339228482279288771725065980107614730689732508546319518769065056680957782914367866215918590112732510471009325001837807792226514983632349787121937850873634795369167442047937893608233634609666703704587131733723929085811244615783860405178507877859666805690049528538712275243036223309707838878743093968440740186365488240924198311296922550429467362803938321202544305084030232602891812533837834720169281029831388109862088373636124595410033526477352125408960443495710872004466944740504181430539375974997235191384764262912442475167562557149784655839519095519656973612676149775555468394211684073546313305136429488931374979941004482067517955299494545191338214275004688648850080625425657255697031851628472826812878438128524708409359692881087063253264481220907184058301090967458080899506347453532002995200234316121374098161410900539135981863658581370995732911051446451138998982787447971905437800015184192194998890428219996377737564767442914336298428740825412724669981656100409516386221832151219625497417581073077338087294189592180026420910118672014596652061567734369839911877944565035730463100962767041999720431147498003871428186236484743508773318443952371300988256662194348824041466733754460943324754187692906063468991068425866078952725816706806990970194721942596702352590797837064926809786719427373172154689565613653917663261933894602724198203854026358029130198575484449317765398657516813791597967078843130547339469073783524497382496877243498441684162650928487855937959542776542381517702580219111410239373945791463335216468817891797159897821504141336134011961229585863213744116868341898479921270173994357042490280766042368231306294592305816034402114190442648210070915119128632526643207927399206403270502196136290923785508894091611892797999732479898770027343898906937912932694388260729491337611804903421576030209232881941209677305990236485778758568570909511203847749727139447140750017842138051158739164470079822994287470311711455580863809119499634431231542924995363573544534166199416944524373140000391672173343392584556167540657516390123765234814227550308964579212558077778186821292704585207362004093356520798803551721188807088087772466898440741018646115406804612936758076828507023774182209672664449988128724902414993501219401001765370672317191401925997949428670713449531376719892790107292559315329271665439517184073930078672355080717529913180235718999452728793715874798090520042529997304171394608223665519403070588265928559013346665409955899514815287087015895503845612331949334663867288844709249699760870154746576067740617109411671360905733205915721144812868914282146396418963599623786016511558301453135637971753217719122740923575115844689612181585533098056418282958853896584799967463642188879073429673984966106974767322904274930921304431241275791867912140260586098638979591977302253507591795249943499668854219091401728091291240324419097106670936334674554710470587846998580373319693822832186125663563662227300196033318571309952940878063796339388257833300085483835132481959803926226375922877243938995147684343099551037900344498227926589430544888103232468580078181742899166208452521226468017225770159292796370494628221608659705311860880457610945893698767024912686130786102451619763311388742213622180967440266735615377707064630432362851346787104938266503146626301826386009911001332410273267944348625003805191824863507525729321246269404084347151934903222130472688695181142909993054528914728385212132736819895913661164653395636100392775995046821116359166052147490259673545652512579506858292074086966566678148092233349090670531856554153436180220853767903100802098585062424675371471614926784976597351943926464759004842764683915776120276735116378854746819555607095002547606392301607456201613727812460712017149291083250455836242558225613747332670029560146313664626625184108408526435551075760616558918639998468694149252839714828173433759651731790585540238768981676874286013596872690278563046650509425213768568600827027602310874261454666959825912534982207381304504165906647669730083754622626706293980961379228599568320787109947615111949624856762702790577996604294851650710262744819536909560241872405354015195815901368973088718316821955357398270458847336192054118678494760800661846422575105028339264471032443221584848296622560987616922442031578568960816859233700095456702725652471996634621805360039904773049493081061117890447026080993179208164914084001561137279717964474457910822698800571370948730739574958519456023949553713352403879552609629342711187222946890885571493932420920963889812746152759211771233710658321471894667865836881256359416902697886305637566565270511589302949804123378578009588741245234061360202559864224187793107140310370774238991415782896268860247160087221743398632360201329490179060521461387097002495616922113269135683217341549840373435949057182322394943783472872058473593126858273723016989321497958715693848778260916053432892608850153974019086350180056263354802687994169752296797729166187979142462997664638545934162928193655800594073599868087694021711982073641040542199591089911339670166122773835431930957664741772458832249655277342309784943306925485650386363310465509184262852528967556488981679969063781668502292160178629319257109918089175245793016717386236635810518592787953993726687773744355504320944066168920405278890106620954397703842075409790585293639502140471672275176364054469159930595251498121123000632836929940035415174800963695560911591519351305097536056757497122738733247223334299439795964416272756974788281452938919543919179780495830578105176873022791010237618749182041436120814538747344362413981166492880532981408473122438956024899704764414827372680888359069383203084252482710559799658759140471216458496005546408675587772142479513233766094809931909320095433919996718551768358151589619518928107632509757299346855803242881198506144473507763036827161335579895814696687756797267492473907511129330448610059311031697081944370716803795577518487360501045579868709621241757229741722143091970632237708849516805918096189012758100919518522581134272755075309636666228932838080599671285408828093511202116961319849653073610668505654418211025373854469615185587420505700575888261495326807192713148159720874106763838858514416282535260626452514445199386144279460790374332488395321942092245696971633409779711403667148196791467370350138794216664252879537117245964416540374786812119366723571213640039312537831206990870490421854920889257491088284125753811729442672269609411252776690642554159109624124410614773690847589962809481591267437473683970316925645103066449528952833136986667526561057302938060806717705640347372758940854559438090824022934117904362128241289781935585414469223058188520370422811243860774239667131292667503614480954661643166021094263565562954650536478763836171348484291106790718789951482491353812912872996022446709005369204478525205413817559888660494002070759867343020833304262695786258762182090471108517478008062047916158342858928375981008630590361530730991533337103005007767024431048399846363323604547570763844498393678827412313502948266613097046593733067129592808782764829082779540513431895899823748129703286439371900576065601753249715130145551395611158446136282331860450878473803949375391163105048460542796053348711044126190850489694720890621885113977651566300965967733708467656571181095189043634361442938460620424892828907311518705548399259321673290854432989232402033427695505537391672297800738391325014683049620765825976502001490715724896015980764535931939727448433948695121642423627605318724132757699110767075442641487063525797598420578507881625322631258275225375353312907827229233991901973469958877318300954825891826980150082560409853023435179352929576326184297304876469260675852353214336752697472278921785590185472893192209568387192363535612736411827177789230687431274148917049359515220791900149954463891144855694570764248287491511795465355571647974077067810042898359708679406723077456168802915159985106685165278844446272185418039624433414989676529360733224196806303027701699401813246007448367635711560091194638564196215462750260469722895057683130186655197563435087042456745552261726792507936708788382778795714813046436130676422706429620437824366040216140317789120666296561961817276627472468337572371444709160465057566385526105800512406353089397311243525990809771719833722278531018522388436675146455281597431804631523542433155277652876622739675563673188640006742892639445098465242739506308240042149149884627632749060858136523029010127328467486160496136970964099609404485275485587599287991078550382891153951255006778605902787210807236763823509705570383045418472207043091603551691808413012509993628114628175790641442073599128028234496708954756607086944124895421408720862402696781696349037884497396953950073338348468396830752927901597524196430868111165262332019170855492271790130827789573109557139053285109689778332545958693287355659898640515042491550628028917049986801903913280115785942913725572192146862247809512151632511954616445305241282672393782775249991259990268401573895663033422145829424653742257468572830795144571447217172170344390171558138444299290663385049414552445567639181283014510290419785983701505834195674761038613042562189128641343318579288380854262613061171426518448419053079528551126733990801837900708461500681574188884795165426161291709564074295450881956626201918302402436945381093124745577171671312225963759197527876184346331791160454187021677119481282452140937671112699410475067112269611894574476316058950214818972540215691086743676782333339834793090049695579827352673705992602098532938745690406929370454895121406852644336817988310511018606485003687435377377880357687101549923752753870842331086890020957072110482921078203892582825430743853678938678845171550824421056075012746445684719777935620199933697201020688921671515732288023709159460020579281422206200660770662136186411119039464511246972567849083853953974560152919983727889703872145059312940206651954534823197197456037124574320069154489362428152384518561176908584188017896443196497458965211081852296712793505164224540578823521427317961999439433840947679261853070347008183355600509419881301091737467053884095017880299752423221585377626802533750299111687354685486159204618103044084872599593910681436894070175869895284548114007698177881132942381244912110629421844127353550884486951712261822154242410334674508400867284003116207597789041715421899510712174705598161680472160639854366218120520371025267080822589762082721234822899143897023722519527191182967187424707516302075467248142839624551051489916072253973677889265488627584976956960720624875569085896430625668405496389507310955276293395519901278703982054295957616190481642061914557057918641411590376116837069898283627310675729905679075315341752230316326873798944842338809064711121830318844994995728478247554519759647479833188840882272330805936564717875937759645466235877959356774680757359186747964855850779950002190153225827761646716858046423788030255771497227479049063699882556523239832981578690856832572914858098641904135700095112492548076201483334658215008902573568715728628589777880228112444674918240096125221488915805020859677852091654966635145651388632847300280396301961059638194991615057652714347324569091348372183877979671140165075401908204991585820352573960135268809787675490861799359172749390316567281411205233112473050152264568898538213889610052662413601412411722965122929820314537969307515359259003169193350947717065852529386538881686267170773291846400688708486999155003104663586382344290816318064759978010654953537866623711446364570626969502173544423423074929404208942616624720195343641583097741467031833905383231234374060924479894152342878888888587110637396276339544946001358888192005723471164751936785560384570786894012343324076324959874814196843505410918926079285183879707107430170210495856306080442455608822862122117572876456630741312672784076158322593594055019414285422443235678980565689755317999308802910505961137210498567710018536735289083212063487672806707334546206404814261141369706196328862821461886994687577175390043169221020130498162026839862458973943014519368318441838195560100295968496734198518495996314945289548715598718870583552621401683863581183106851205684154635910380524563847117217821212106128722162524253763046827147151974918777923681784807700970624766909477312166760595507462337125669968044357089923070482883709634106122062070766308810712735710624862438926613157497959226806833188459480017662980172063360634178971275611314406393895211433271861436947760659023345158492960047345295499295662853340265551685535599800744092303711269544719828803680436916119091632263364533324661266862974434455516831152632639373435575795104537875888710518410020589958339879959822445451353658029443025792509752253551525308255741984775779270729019138683637750829888081844708006890211552146344622614088468708319389319850769307851285942767252474785352358559267431807815209013706262561029595478897605034763527896789052350336340918526657057958081872287341591904736173950725836194473696707391163580393299902911848791441413850082003693596935427471422729646162077763129389201152696915172964938281148555040979580355711393742641390964747263809506784813646753925737960500015999521599040534422500550634111212967036120707920863177566166569229503234057262633077041307108981897403699595707664375223053442154801646621952674073998016018204114207792322619912823001873411899291943544289433976296710950251614937569204757779765928995747738757818760854802038762304982286305288261345463881107741394409631520373874750233139799838650413255743318875470620818472533845161123753583328874495241216906348859022307736592331867789432771689184631548324581181882547915784645287665908939251778029107639157159289196176127518723121751560070469290085609343869257334092947393223315517614003002467048702184847384690761234900833286623358455281883757151812237381345516686955628191314036123519539678665398336254286303408505084714763392222044018726750547293413234050365413766358316654410953551281819431995257295975108311779909520303889212337450841246936324792672921730951765343962514538205080555856311467242150053436496567701001851431642012883560394627048117888153808553859689392563362831101945847612823435569999360628749362849396263121141428978393706694610773760753498445233988754224335605409426064724465150571453306140168263830877100622522054887364455754048830624591098148199844437954318671983054725473714673721746781284214097106750134651020281137856143339404661336097397401255849460415338500002693898912492847012546892053061780546003055285372933509996259190318553322495887219489025100141803027682285498654701158621266627181173588718688738389808332699617026792423659913858117693296106288197971001919395880629554677187346338125838160292486198360147729979871273120571322032028504575690735750011778046083231651989085708906682400875964848727543577767320694907469192930438894927009743546491436041357955549348300042338360759281377236265892227047663620196806664771980284507347099402902967733697999621184233818138249990684015970535495278317959125975524991795957531505015611136002871680310533093786875108515066706678620823077849432976257275439747172137699295045174649617946011443989552460583705965135899024689374640564101925298778186797415025378969912635036062934209463477387146111182074864014263939109691429255035354418183096283089143643718609144817465350868728368487526110304341902202363658329806583404243426301929038999413811963719928900533075863880385638026377355762024440421846082611952343954020299294254318741900205024128317877368328956627168050002516703106370642969704283772358296461093955291187494644342390316988195849776128675653911509104542124861217280772932996221537953310962029452657975182251689107870392012504852892547316032463597681300089847160255250462914104176616050444245028613939373851574524967337186933259018554428928015559462061881262235852459856089108099770130466183985887436588873773243601088860550229426153384432008657567689985229925644560273502542282381742604579927654137058837459574794972575192961456785170540640531904771432931209781137337286211239818317844041106915878514399961654100374566986719879295231727712111771772229486027185802483882395198074790128622402561348121667919956756920273231028898988580958707002246439749981244065925735360676364733954118132106641155299199544857249592009103053430934913609249297653361487158248749289098935130229734152531034647060511392685477854761239602786254479061019382441139667288410559126176759142054940087896465268370081054931187899275164499441058030518288371926823323313797222058155222896466033422597096415435116962085378815549492184638325958401951721290473197241670371516491881467203347875585007359331254528344449459950467758875267278189820752127439854852566552803870490438503143232653957782922118685816688148722781734903296936610500471173522177161064283024894888579788472305995091180282414062431445897622125893030305492825543169066044111330888912781754024348338736557326750833574402747013630048297404805583748083230530028596408741040030162350741781079342392865246051725408625341045214944667618371021284914091497257188761924767939637028534628334759882175770670772289957481292738316309937728650022513231422234754422579929841855985946451468684350390314845273621075639131390824319325380971724618039332427557919436402942528867210146505840229198062530002639445641553444719681044247172959043190866680070064196331063863914130249071095131248563606711066426848149947420902504927075034868938069205285471610210028557331474791661084008529287736898562988280474609439222101768158060840395982029394044056801641541171538945243610104322534200730204315260865284828953604535787727385628812968114791370986014951254706844185451923929072881468774586758820306110885474794911532141074138864914763733541384283976740191875378571118515523438069807588777000827782446489266182050245346558837361947434377809680600377844482788019840369988901856492040146378437457195604765771763497148753529247674438388594397093126205511452264943420149474713408497012302647389453439359384872233770236640360026013633256865164883566645637992031106481526435623633931034222232355213509370961371765010288817762179693552242379775216656260241135497573014130795564397554787053584387187656853711857623431937857471939579985035081848718829777316272176681052612968630380592713032967004361608181691291430592912818088530249261471767125961629681696763811424116391066373303384993152768280740948118781184558104319987675542498579919858166065158389793255707776743744116436672753184816598112104831674522931550279998771106215597545399479437343520773636597563675211447481439779932609623982600338971268883683768790803057118303171340769493891379059633504014432705976380151918797310743478564409243233539718255459610193420711760557630156927018163410042030919328901263062660290810416055096762283837210531454115711704392214764971534200239720890924410613605239216073127851967270391325506751978212863009614699353698989489629129966825662563519386134716961129383146386288035146250197315211925553022512173302931962094722039477374774504846268505683930350343868458784422880640500784492844169201589431927903016379662303396527872095562568156390966362645360971925681857871968341995483947410283964766743270092620340260322997257237091573993613689320984290367200247030533720027280038417097783212839273035096338938542591727622575162362022599685496500554429222347884038006453190248400027743775341348801335215989938742326080054254247170602001952079080816650302245176710604093355842163642360723052540350943441654273802237051128416322439426475234583967057527446258480482041840231234842602058417412378587528062618463131988655226053150118765238820025342051914431270624521243139110536045516721557341224477691444072542250943379523540914610979701581620559268793412031737790984636977046879757487332724442490312397606565039366925463662967999702808542773925468580692839991293056392310917374429934951347005612307226284322964209030221618750098429366099194983439477136694496857689442264881224914039910670322116288372730289047738573108522450033816672394101565965048622910696973855813020101016596778492150524524163597858951412311844796147364899117621449468760602813472330721658608635506930727103404682194935368589333167590774588214751222713377251630553526943871411102693132298087279434996411605103626921829523837922181308665640485185328298412378683376130991261907022373866335460773339455678784703129263634716537532090282547777127534019418852120934212233684269568396133976431366342292873151938449479967788561358899533463702974267094796359284987637751201598974404152475871775040728557820818028482149140963098586410453529806961657287735738138755712151598174425380024951275335199558910669206209576113284903353418478945780694878129790034895748753362050781539824584920892084749347087235642519520452342493927793799776786136198617469969693126983224168201909587877154725998407004749212713544394340278146389166186340477628969995703328593195001704673717058025352438357468612946242018587325606773986648467186870072551528951891526255461310771157406650956757785133396326012890387635813591423184033135516070805571730845080137132045429491261012978403015641430817512666681469843066257060720964098086648402611312090715751833710679060879766494555066896257649913350023260836668751637428823100349524601403601892419159189925922959275820633937990644299249271169988339019515965180613573895432999894831577608592304848155696364198541694025900829134781366210991417472495148139315405572913400497872095116583163635740301688579861226084476006780263453790933289131487409161550962668826089637489553038837859879843790532691421980575061315224117692153481092599586056471601215629186621130434664996556516932298784329307022398027011414332176083277481254566740985113591763468957331875643736921355329794098131053487627474682120881562550550881428255655602726301461818701211939805917586146895437388795911816068375606614039394049767168461259001949273538210144048916666534903327280258028482616623798309398413700586176634115625829647911232227507375334923375588614078459209835676422299267049663923396700676273951091983057302624288416865668362779855525365118686744053391254580621393591196711448438077488551738236403307762952589858684493455657463478117126363062783121291423235729455410918637867035685633113782220139687642412165249598360509878714727491849673012334378180463831584187354582895646400179807708658382550667724914138565820039682009987745157792741850123714960764039841065734298623591290702110380779922504349890524389320347890308828719589040376100679017864219311467557598930026491189345663675214233027772264878374490381972865809240289051249348258334250741010764402699448241367513588990261100526633287903176928198197677117933055092254550168988385755711184604062724032969041641602920344983239296376314963817502741923901882100981471281443446703980599875657083621988880973620719138197772524100421922113549246894114245414372112090493791692600291606869049421927806267868540149608572744342888343192125058473363971742076638014712200975997813876869820888826654477230072783335769094726343439363924451093740799160365246814221521418251509165560016088242931176476666040166149409617751387959304000667838298475779617451435521971107542909535756971647840211114967059219572740619358273317825413217697042690085081762346191097822496311788562562031626726216116215298679994354658456828777010935958029126216060917819707341303406969946319555176649237050902062556966761241375058739571292436871898013175671381669805507508696910381959470264039318613075638568464398580077833659887720496385166104378193365458881086843156468468523490854549529450710965680147266392003581831969193933659362316072852675420800357125522249098898054570353965505168107882852864529840652677935931955087124815626428567901773577880059003707684993021595642820310207853594456286754132723969857923337469252202259735727997751116848764487235601899102596111514927141978064206334037406646670461524244267294399389563489619484717324536636445719285643430736881017478756148754273773852289888136125549801175894395271495950395640707601607104562785797592351715554623869028246265577155348990843423689483732331337719099850118433499218006218421240299027208453829439559447186342420117431465432792072288988488740343057267417723708067738577852233243672319230819937439683915440649582059516544561598623280971773789120893086121672269536624083598033868209624720281605641588278852741452020860395156344376951038233934553306218241725396467724828107444994633708693546367123495314361476105770109803860472148239644683473596101653816933207579295804239795231250209707489881769264862491580478053842336543358337010193843107143139943833585292436929169794827683225645488250493758065708204332690153429283252246824483410972045997105029219491200004356064388873493046364077650981091839516620395962650712687713049420813661020164790060026130112716818875580888149422706314230708204130100772098049184062203228041362580051800921206280742731510572822623376036459787961780882292249221002031736456366826421727834687640584814053632480791830200948413810861443283626261692032040972578925220311877455650049930685081104107394628130349553352694618261578823385706710078304466022726537115509158412710129375703385879757237284539292895988728180490390220496139617988669206437315385861127520716472864870732451423836516235084903022716386874198709556735053670824221685660220728278626961642949943462735737024852061880916852346905339456156753923289238892045090888056432159120268216479709411830925161705073727852182241843774144994444796800812422381396128011433956107925125566938292728894518495205656479288798467478295768971565046605743380817683675039276816505508751212423949926029841364819217401250701049413854705548216151519699389827283019852789171293382302732747354572335967904262121679778835809536307205684993347760735860485162352359870983946965085935681532501893160966722375508805057199214927917795853333092263437505359039352967087492413012955087698529172665198805420638824693085516459299213503601188841365820793247308338096862952405825957815923600207308796364681882565126559078649360912095932577475791841991368526488425858095470521872452183848155746479635949126054100759873565047420408657908196467861088860745823440200596937137469726554619440021533471197651802029945746028546114454400341137146234850866902640999835474619226352406181906965593958219260459751945218547186010136586725824330239183847055787095688060314095111184685688138832308190665361771520893357047382326528633906357935617076387165550366027262811769099959556389802647692621844549401990735569529998624105286253926755935055719547875890932694340554447107616689228089562066086569944905859544518038840788528630069102190204691632172591973746465885214629803758001818354722671577554377946458675180639189931170900056297193465314174724380797003889515935304761631926385152267377564862725712122407042606969044731545405432011544768262989326191733481446407893297863327714256422001628622845256022926722039032858852550966980793417370766719350671793803838423609435455646884754065033709502751899071375163169890856762230034353248802768786910964565926739703092124666704198303948460691736963253713870119591703313690617965257847769243951364137415307103859326650169756472734611428216414046385745227023184773573317555077165126936736741629792481292498743205155835997683268172359371347012456091212295887484642867877578646795751622965835785463864395557880638259410281317519825410588466995700288346083450655637106260214808311406178732561340081016232526189760751886271379564740782676263559705973541667456189291443581212424404676011914816089260905831619643542553993402039798670408163878137967461241701829503692199517679672763486035252098113450580438489510602779967538406778194913724886699243032503589895316658938365078639346817966446042366971598315102456226149656515684119923736039138700680083951001771224019777161575827820297993227494571953532246936982900599366416589787251517727463895146269431106027269854190552230633092628014821482309609635823553388474087969696520047538050162437487064672959995402543841470139970706134643073875937981889199695346910796106300932889981171735045657785459463379515938396509980647441968924682241853711106019941292568600206670508573236766497716210397782410983939914467015508129203700417353471801331728912556922317624644415889241609181001149181985321743941473620491460989210711065194784149182976559106558188134333708873913801535240126355571162155611895528080568951526554987444334536731499537753528195430833779794624656681766785270140096283044140898051247012255419499146558168259139756529674323772834587323355629868317816780292113528663119722680719024978280040818470547128362669379424806012577422038887191868631883448040020015452134369307399895551088373207616043579965759272959559449403269879855598910900010706024392636484042799046911831117069348975342142583017574911456602802451624070688915906429274072763654290623835166951367071267497654861627881666298541483065726588427718084629534053816735134742365841971731795029103239286268275708328610899135163422402889934113026131852180686527150505983759002779807773566223011788941689719454712179344607326254690287120395766024482256671418388078554228023784784496201187429256077058990150435615351155216101657438309215090638315321592936537200580321910657657215666815341247654573083731344740394722638474346512544521661792980002338816800181577838361703000507770721899400195844878004251805255464724701063911083619487594713834381627924257067711581105282570735802353540652641183829634997288735297250112282208477996416073074851093528870765045321232820222921439911099170191434612580973635919820391541809473112124075733876951153040686421981760730940392248786343513079856829965044538757787037942418740284997136502228750221662928279924265870962201635314064803827203966095428887928130337192039410759247169242739168498523247197273121591784250520458251462557288339313896397732661534729027052493515404201580059981956608905079272892706164790429218771081619749768508639849339364643058661360212160610191272076371006352322980097730083536900596908930188252920677441148336565335213544052062940677350237569694340838070570449158815512736492862139779132213211843388066176862669989419112198876291824452684702959605871999341982491423024679580081630979799600019718579349756991631102855467872079017699044841433689138792070082691245858860091100747333527615921285623074522312582760989162946865573374037829302178739225575289042659045727978291390647109321424303936944279972788242891964130377157310772605953533486292992603361085012572105175885943335595705321341456889458117518989992036681091968371021602143621382567898278967201088486661538826229576844449884230327889089656416829054301277201456616051237734474662164978054102538036494621644430726212087953103526033051131027386921359383088225533719150606934884972757665515341103897402690521343519506346008077717938429482549626794547576980199283223676534407717065157853712801659521185640516453515871565192484321804442962765733972699330046829989406888341627015358639514826801677079021155478293962619923778866000228101968771938334162366469804573202014667190358534377215482330962923275262634963671825984637003914633619143396330500521755888969843386922843589872134400996113166528653861650963770197465796117647298541079103250256973646631652580593033941058305941438443670583302078961092385000096028004387250797639227058729182855207638716095753795885220489180587608501087576665670950961102068748473102397688480068745397125317899151900803171836227422289946173194639475472087332607221032204172993718739866807063991965434685529724874290316386815414750536825089647609755324478912829208542640630837182428790314967707466436030120046677693513719304754091874591925748831794738661935209325972784637836372417065832634101495661541702552237720067651495419730409007777535110394473910436455762333458257497687020560780560125766474028996604483310845299656108458520836187635944075062965164082259016665860024741824447869072154938884824126520956717610359345956570059031363334002503160837760160190522749970822199550294007333039256459130986258366814988498652039570467430857270936255566922917138875176546035640770701881537448577626102002317298447304080275355918518719943682484835725447927289531637629163866387981244986227932821777092957191598008618007108755043196577493390795743913791435300045489842318803840629056604453508622889454329052961581308249435966212373719648882667006349214657094779879673766929203239990406226893937690672818422017388165317029813987140416820890222156353954178254095413385973580442456560445558499420284582912636669611387427404451225546415356155838383066957787260635657953616728518750757252485659572480629089199805995107320554322842323926689320663451184520268687258689886344606068388694479162354509096941490038433598847203104301976611951445601852362544266638679678290075412941302729162013553313728522646010957992606699109069616544863135068561276755095781547242671190932783722064505309964908887877840158912914910105346231151775487613772792899879678519963830591786250997836698271218528501056595898076691114631296567610559849673121473718916782416581126344147631655121086933981180869415987776601838722614534041581254100451763340221780549086746753938766610289735053241990894606197687789239665605165716452187952517064149162738755920000811374455502914943892262459729586085538415828908694331245193074260696566568387741004970586046250406779678496790295648201386486985620162529677519187045200318621917855086482423481330608007219543743506802384438536607353392218691697424857241893460152387618386782325153321432760552484142145781862136735387766492081605376589501268788700420050453317070218115339201229440765302660291694287227700950440380765107112761096963572158992801291875003909086676778623232366690994533299491222168137364267573039455654289904047646814229327801683590630142563153751747079457858925522910205111288353935603204598220411265610249301465496049605100661153637159888807908902323782288115917266030548928229073591717694655741521631460966838791102199409138425309485441867582737071365301751525547942825571779776968661573074132570848279551828767121886018701878619280272422103259889312657193875315049837541388659071098765055026282156387486107899591956053135772784100496825157507016394803644582281562465844931202245768097460360009083034532364442320183540873202417639221501463884395812838717474792815470457888288508076821945174144028105860328866061726727674515030087857289847427613927570162848467465868388369591904690837471560863827694337872032073339132310877824074716599328692954368440290176778939622098606562704309952427724800739407743083724696349092602202149637692306858199125713600548864386864010917928499351492615039593355117890366131905372145092198636688161883816483303851872238717415106454350355132051773548989777552757443255371566372474534435441848412809716879074979241665690375961387244267989469704939164542096816857631992943353367922943450974577981735513285980794037989658748077626750133198955052583318759656463244526191339847597578899938757558196148864075073244250467261088756301070340776077937405119970413498591233848696140017565253179511771575795275131945857256304538740165986955527162558693404651982237870681250364694679537863190584566503257017428760056979496904352580609209111103053294614675377385059624280899965796306324467850909780831489026318753391745970785291441580820547774726329434556660527022852038096530229629083381153469692319673185432212788337117250065774907249107252485740348419082835779774814914168825271376969001094340761377648487418731698243293622743693716904170881810872101742928109037100000977309557903344136643273367808231025012640831073700517532261466072965558652756539975841935786806116867047742157426598876286995997384905698693761028030005126905217313490141907445119240485586174004947125072513293761190201760157186724092851713785477603552145995848354307689575140731563893520272232436224697297570996577403366115446408204985059861276880231146593632332116664047060124406837360322379955207563026996917043872020612169132773506149751543096030902910862068818208029741138639192386867608762741997860087946363183791825619263211533747157596191757134157369834295405013020010499759058170439698811648143980733751968237686573164454534211394206136959587926718539689642312494935570859665860568612537475919659068040072420100618936747953737753705749383127291409003383837688855841053309435892404414955527379658360309647135313289366129538476897703162917189354281206164435348255552192776966124707287270272355902245433955885751207009741227994192134495378305063561634794407295832195458144059625112222238732508215922805408792621363851812950739715101715283572373388069309775291979566994423956314498349376967149231461962778062765502443563061034611737001968423504862603967799669087117588804859019639157112753414649335925988454052986607957770870482923146856099244325494894435569370404603972409346620158075409396512099348903782562196646067345376443663877635728814318418090231549113721533373625163581574526840997161673119389664334579356556456354401159515864788956168788481450985197215201467974181561001940631241149619657961920795580250374263473722428593232378725810430245637202518132904531251551627240821059617789024316527079137041828262423203999027718050493278416463558083739015666535614730630528564883352138943172947828201962484672894006650945217851258824311228840838756059704734974004156889921429014908926432337401389537678225680966329782263719847506238362967059541391051250329777158461686302483375117714795942380458251770588312881492313634727768589869682161697321291504228940601873619348996292388777724630285389255078462577634963779959329989151426153404562174906613363783607243267517210079578320766293154362152207280832251485579899573303194771526628078798007578233062417352061348072159821545393566054519332770028296707118564344742106657936278687268732675617734737178056510690046607762220209746122648008510436643666435541902320142352415694782992027493364828745928747851672282706320889132159909846882540327746849007379809382050344297894224907120550708900023237802233950487712523780018161507312354618054223609497536035163494093928091032767640336242711088275287685948003533785270118743240118979225026796544540327468208658559416238357927216565224536669218251472645443651889081645564816245005362169954201386198950135410692688457725430323102706392241999820836165265276591679465060858160505568568712438796347024605304900308450966553605733042168429732916370172195896437974642297090857585959129744911909686268599809774528624601994610190665878857027337811884181381233078873788158373359983366672234669655911799888726805731249876450737363254821569278028649052801255401131062341913855820271583117070719273865683054999663069013111249121297160457447041240423061246140642426490959698720730873511722072350750404737742430572024048268685119133667530568425561907620950064557291163632179554525056907363270277399640559645834440273363853661188000047234146519397763559239145260412600704968936012028106894549688440479900267973574869188916898200795990111065008878815333729179214937996646495852784883698591027255166736443038004395574418572899294370967551529143179055369802934328561669594406191593608936964899070486635648836640763029576597160034720166645043990534279613912479497024231544925793613084992394121484803964852738532840786244112636713504212176390740168740010064318423771759800182571206639184134636335947786714976994584189825206727396176883875524645479643946415113644023798932248203117158653341801005086972304051184189910711151723320637594773150678911124405222765005192822545537671036184314807662167004590802562833162356684840697492521011525880952899271472039977820122616771265024357322419282091459744940443106332422973501916691938329374288973886386034592918524051364182398592764975688780001997803671401869838010577270717330444418407603271989346719916686888680593245148354943447462721033986270080485900155124951082963992792987842114837857821508811758170325737210523836242819698681325151023148163454095321894993683800138795128096101389801313982043237028325779746911915430218574372464407978667515942327600656822134915485630059582718562671520698991302473350312566427091102259532338314893989689756822401425548363478786325343080669902177859287335109626530228527804055908960006937280662896796945405843803882948848124047942281965182397536936457929889578255794210593948378679524919234465908033421164868438416051929819069131125432441300566879775210550054157419483806784214653243093753518480506741715472803332755990227351462034161722520909347730060870649660727422118067613395865270827693082504392270738618254811116949038529595723094576904555387646766194045214126185045174967881222625225420294995105078164391170749628652025184869718810057932904459780474128600044356721564987537843310493494303165385746459512014483412377153293124606805820556680644340261399666836315845102022850213187298338640077707077917127911385849411484173150612304233608674207467083445888214784873006838124326048603420520398039994672066938235732542051375164474479235433550682373983123832947238416282024613236150041949833072908669815550674617589673248615861702017780769184080195436695753443836861503161723295315725658560497271219460777837509040504799004521018029935893811387189517865310399566336628995254428616900954602946642481835104052723177763215261081807631624720322398654828944688261281379543513838399159096503176110145561673340859375841223007298962049354231684731456119013370627451653372101952784150843366485718683154707759266001380413461198030059470241851889381598790912932175523398760753164627792920260871619044331651516812323419790246774100510382849642369445921137356415332559100571402192386504324237600586223716858020906861290616574468722975254000616033200134525382789948233703766721713913420053378522189534440356774167756989838340371683053339160303712468122195094451323769643603060107933336317574884600660754013122975875644836292687447653875456366671633406699749727233770775602930171119873713327502029649301339157436902586985805804661850651842865010512710599579744907900725568864758808468315496153957143231085273655909832339900927873362328571917762632399121621719422136842073993822309314300099352877919729663183063706089857543103711226019781257589533875565388292807852373328379571498654743595708116126805997489585227762613411374287400898540454081729983600454020975504859445623078574230082737441934713309411334435977095406278491948107490251001075326160260816166141665828764940536675366409103075438140950942363295087616474038594568300076749067398262609892149434246290522082284867369996747369036618212558758764999033240531377456820933035653514739288807506785309262157018155354164246038618753605910751171596544451629138375154996561231768056352944122861796274432731602355764359001440423701221314110232709724507824830537580539309136187075390125804621374052404104186962215577145031687226391307500214048177954438873320863455884008371509806523844996560156955171721235083443685969318160004631899389556155154887502954567874337030723431693153231859698126685897895105095148228879264170688790144046095670747756454596689425959992788755978477536636909986217025002679023725302120269168121827137745844016745136986531559713305374725826662884442853078675832269357444922580319812405402267749674742781956841448786497782251691834976002692470785895021703704858388868515265760165621177267080605919982230358195653707487049616510340265334858744325169430110779016508192911580225932171227930158137898121057272065802163804143176177861748042060613560746270301387882517734888125466322091023046199189071897531864764481596203251883661383342557380251629906535720631765398761130171689454545284542849138949012752571883712193005628020569517371873637657312815325305329151583778151502917902733190305271744684958622121010306471264222608732792916887491000707158866999254047913786054611810141366817747429490945735777114365311619138196776056638249387208249599690279274158972264263533482913699417066232424301052566108557105882321860415953995261011470246610385777123349945013365720795738329033328267790338461440694253915947579607200765511873466671258279119860920470033646635678259287228565899281046026195224102321794080074560857019502214981683804045378001236533286039783959384004974440166902266486137702679291194779601542349226685477920055280270194687371379891364308309741325341794454848006333434887621180433722346253849620431677039433650809755697980501277777113845268685091187424823340812151151597036955214920274705302810590187488774145471376334439641472564400585203279952036644952915857362994275837591364735007137899752917263254850243740999519067606448557348572716000678300808919766778877206053237007230414810898261174192999230284869838903138569158526989803738366062311867394482801934669491046627645436363276196627877141926295125717141746847349260139498229621952941926164899210479487462540920845674239802557539445478424605466878288948565437238163965174286067026364536764787585857086934460845630429301475483163588819083876568053843919529815202317165149427461863268394120150501380274794164226549074722497966714770269857429653319371853947557581888330894630187929986442821810999712432279880515190220225825103925627914262396261528127570244033580516736900703944157759769468332776781478170997801067263584947564578699956407063202560483281763769954234650000264770866320237533750709170825618178829121555348484981912976077434644897683103996518259302203185739168355670343119920701453229307854524542846194775780342354148147108371829689841186079764946697999961540609342917861302618236089580266302442813911419612144783451058076754515595931540231562270809029227064151150119300956423560999465999653837045524948746983692965835699733590149297182040483811117450935081926236794221159650071490425720958495747811724299488339537170111127932294679341722267132041146536871343639598304001759956917134651127380387343487435851780856522271135939193895628494326974660699269244961652914573600667083355775273620390457210060853612580746188269631693582473145445281407145308991224674238036221680829298174220621860798197137043727200723464659535963188623974496505669454742056367794214902540739842325758539378897401139581409478646694538433617227363033864822552034428500528123827744206093078356383899501146590774355751444444996321829960061275708179358728977432374068967803416414619266061210292307970707626315000351235693107429383685067164757433404492504794750614444438344268104672144761836840853236978233062403887482344558895359341454623603202631096561293380806547311399902028110050717415339231618537126224678146138703245509801626065686426890214790932004293128602116907695945906954418031458955572518471438409956497985277462584714340876550751083482988783963757153324906662143577507370210340928704211200056560771784033654183722097707039082998185723278388513255915407843806226096942825934133693270436473297298053131414410673096167498440524501223865224580163159731941779290670475905774711449587324396052040903560867749633607269786383362511207050385233066787151038662750888189396417820848864094163550696516989046092304161178546471108800040333177562861096097669402728598019472317127433242097596374209926949769666919449022650020469268773013778291584111777734801678122336199306707466885245484440238800072649836711310342917062136424156843313918053232383983078468123706545170731937525394324743353102231318881796761219340335058271096924509959581007125101692341639032718526132731465816895432810824251550267187134476525004805214087356728063163982776436973281937480367061490759085981747339946738833819701910602521740453589700326016152713271589647731441404281010739627169860256321696918143984628976348066263640404724742103943068890300262217919407490294185056643193778672788621514872444857040570417491743083668801820211916799180279149123365031855739327527333088498161734020418254440569737292101091210357772958736197407944977294083500388828156900799618885648926774368028577963627085062949536784319273455247935719907179765485929514896555210085742609479677331538755145823312735881427161972974752998566400151194369472948682330746237551435896015230533986496331433897402923227963168267620139539062424101002664413774030587496049713880031234957424411170400692461605233008783471512801605298659812776385852174133626209981186918938358345653057146829280758503052663152684412143145572569203330345681676854169401128235623310323455220016266200412727026684927816836926266791942439320137398200185642991418955464718939675339859727226028984577768619596135554459532721055935991298244358265061294663738057242475692460861527669477565237601695691691877575077509877316632375206719112645395824232996123929118615660776830180353162751919847202804452994454045882395557025233387374545070083797953533868365884599308144877121224106120864464121937933917213846371733319958318928844743660588628753216510072394367819660276153579065026923320200465135622260332133326790916912968206896304595976989601528304064458567050884821874068569327242388967568172502936668476374070466511317019575209348088040354641188892289787348206240433877593443377351012788990782745082720418094253843066182615519009334935552955266684858475485494938494967552976557793389120050509603720244080853334662123762719793723288604484467147679471941170534997419483368784944658587229478672681938138968282221403428105437551913127361355898698289624008368882129842599996702944503383544658955991070462640172667935141602759653551368815776369942044583995137647829628663131001221231534965839399461463026651772976511526811468953158755101980388687271069507127424565908828648868313976235679953426838583195080029733092861157150407331246858177025938607115915623640069410010572713698395553642613995001507855911638582456822041072917198751686674415946936002316231579585375014210379780938502025242931562025826376153063786386677390155167472847163910141829719442198145128316851168493735526463730798576431768575701484236408740789352058681668788075735862455978596131420928977008662021317085139495607926794154839643638696960646064044825882368579418247614851405354060662705787252435746949859486068833695557311397454945200620586897382572493191047700347322661176946901552848619336843851237375520485128070259328150932433696874607136164590619330725124114051944408510453107152694912451523749776692224397142477111739160271001055661493257893822390736623648614862400268263497424561751004005831896928283068703198441436303294281620983292409389164251515600756093175861284494043497224235994824226709698917461917863787094372023594255212399834252267422936777442893986231106470680422080051493723415218391429320112757538538152722308570014027075530844822501991820874404857371262082276060042328948543302599518455335980198371870313013246335949291371848114991467063678242040592349751000085649630969728832751513083136617133164475700823575348532001183443076306074233894249336445788755808856138636225218959783400429992989436381421511961005832721133631275549113641226868484408007284898058005197058362236770869886182300061523332360237274414046733500673667538411330822614792668451105454556192218178234854687567453892043600237068992115945877699734273688549462432595826857808760858752097166448743979126536642225144766853882164897991219139703135886522295432375281686953025665774373025556138491930286406006798907600465458206946206559399603295541764326024991786904949110480071204024813493511561562807263177679249625023722645669629485182963500555510003335448887796367378236138310691157566684115092107052582867873880273394459968866636536467871590867185180009580075210563577153824342282110770314631151974145511413151112232582017775144045997964536000603811954043472225003066247455557263394762082853850116658090037261991247692211882538771190182621125886615683314903791497925118251236601408921425321372440272474308166026376566103285492314773620130839791355348313991833920577761293186161487443714546368334266843700926550269914013363603933096481736261401808646916666943053625645047277738712426916089523675260346358278950869126866196618323149946519669426092399385520071822088538968327620951347854373933736478358464833341988758379440954439546160099695643379929492941368487698245794174994884303415895408845403336262531882986477376183597159377008643623592744228955744851179963996057437998203792488734880620325546390780235577360282627691738879284350348303931706658969021190228577090613214548879403331887319146436620250981113501638403068994314100847127956423998146619152481508119331358228736762915421760355153676599027887866998088313007968660592865811707769576845589411213031205772873869932186264820028102066026067911651743403664004162278364920630216801991357759335718017897355535376875992900410463543711577972110530813339952464979263630750562505388948802268679332820101592290211794529137334659869207531837711768969445037532706728557894994806768360107989358484976663557718022193801196136210942917405780671537338138341560189293146145018854550800490363261289124650531215691866178661123946688832836387910091158318626391704067701909442417173700506691173895530421379380710863913241518828902128499464067152291584149084550831801244343608041746464087808753602870085445324097573012361069010422206760722613567966626449015641' ) ; +test( macro , '717897987691852588770249' , 0 , '1' ) ; +test( macro , '-717897987691852588770249' , 0 , '1' ) ; +test( macro , '717897987691852588770249' , 1 , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , 3 , '369988485035126972924700782451696644186473100389722973815184405301748249' ) ; +test( macro , '-717897987691852588770249' , 3 , '-369988485035126972924700782451696644186473100389722973815184405301748249' ) ; +test( macro , '717897987691852588770249' , 7 , '98274117348321974353044780928022697503543794108996224149902690255438168118107927224939057895356483251830948245334782867413814443266637838233302304694183773324275704249' ) ; +test( macro , '-717897987691852588770249' , 7 , '-98274117348321974353044780928022697503543794108996224149902690255438168118107927224939057895356483251830948245334782867413814443266637838233302304694183773324275704249' ) ; +test( macro , '717897987691852588770249' , 9 , '50648270951104922750154368051586870571131493195253277558448154467572398239992609359412793847046346201052022004762903721738077206909720257557511103348958535839847634617934011064335949101435909492826285656394536682249' ) ; +test( macro , '-717897987691852588770249' , 9 , '-50648270951104922750154368051586870571131493195253277558448154467572398239992609359412793847046346201052022004762903721738077206909720257557511103348958535839847634617934011064335949101435909492826285656394536682249' ) ; +test( macro , '717897987691852588770249' , 11 , '26102980312143604580379781426139335779091260301758026221495303393196039344305009624874488017227324790317412920525253886011853217074287636537729904547128731845728160914486066244742089352609334182138245049106257642108402738856230144495829015803277090696341313660249' ) ; +test( macro , '-717897987691852588770249' , 11 , '-26102980312143604580379781426139335779091260301758026221495303393196039344305009624874488017227324790317412920525253886011853217074287636537729904547128731845728160914486066244742089352609334182138245049106257642108402738856230144495829015803277090696341313660249' ) ; +test( macro , '717897987691852588770249' , 17 , '3573275582766550916421412995798134382789703709314385104884818112662852238582986404829924618616654726489613490560634610856652852433199412781955936605818387336430363300497297843489165805533270350826963139013723342117143973258213022730407788251463239302985363622895194233407234360656339752537037204386160966863282760795179386609783329264325715584866656109211813856395434440166721187549981532749010960740594249' ) ; +test( macro , '-717897987691852588770249' , 17 , '-3573275582766550916421412995798134382789703709314385104884818112662852238582986404829924618616654726489613490560634610856652852433199412781955936605818387336430363300497297843489165805533270350826963139013723342117143973258213022730407788251463239302985363622895194233407234360656339752537037204386160966863282760795179386609783329264325715584866656109211813856395434440166721187549981532749010960740594249' ) ; +test( macro , '717897987691852588770249' , 22 , '681365581176156632412753534374262781125282012419825049087724194682872335055219639396310501297264530289064963157507569861612948673702326507540305843556830845144470742979453946547899015520738361534628988759199748641145113940154534539818775453262688963129311220968303038658465790258784846759677427047794151246302947777449489906933250186470399660798890218035218608642881019130459098257182422713814006185934129977355115289444874704561056766143547053999767907222964203241196702396756209771576441224761301925355900901280569802742001' ) ; +test( macro , '-717897987691852588770249' , 22 , '681365581176156632412753534374262781125282012419825049087724194682872335055219639396310501297264530289064963157507569861612948673702326507540305843556830845144470742979453946547899015520738361534628988759199748641145113940154534539818775453262688963129311220968303038658465790258784846759677427047794151246302947777449489906933250186470399660798890218035218608642881019130459098257182422713814006185934129977355115289444874704561056766143547053999767907222964203241196702396756209771576441224761301925355900901280569802742001' ) ; +test( macro , '717897987691852588770249' , 24 , '351160503938693614343626853747071562171016188034295260095490111881784318374960146045355120758560422119505624375491533176393589903573845466689382216842197981277867514717013259791763929689440964343969395781792087124646063583944648684169111729145300510135702655848244592583122673432949987979858826614906829469635537237525614665196540272658828569629679791428934101079072719564710584542576589075082850692588439679596816834818341802539921621995225917260921044846812391894365530686773081140839348912145464664288336497209664739248364322768319800659209785240272285297767697234264001' ) ; +test( macro , '-717897987691852588770249' , 24 , '351160503938693614343626853747071562171016188034295260095490111881784318374960146045355120758560422119505624375491533176393589903573845466689382216842197981277867514717013259791763929689440964343969395781792087124646063583944648684169111729145300510135702655848244592583122673432949987979858826614906829469635537237525614665196540272658828569629679791428934101079072719564710584542576589075082850692588439679596816834818341802539921621995225917260921044846812391894365530686773081140839348912145464664288336497209664739248364322768319800659209785240272285297767697234264001' ) ; +test( macro , '717897987691852588770249' , 27 , '129925342856448988764251542089065045786155911790890516647657119087489042404899060228369392822075223183739765014052360206502536732276242266222695367972367328452765284427361172142362321443004910207800039177476242301577150613859831776093328430566500496443594413224371824361420410550048411417760224137393585174427565041635390932623375118187728586008978789234310569306311929614122033949249592316841971560046372431039697669234018577505272948749285774218193495971402810317470288145379703055809020802321420732619980008200661347545521210303094880943536506460031092224160192777095197322219385161928995729071382072812239062743558406558464517305710105484249' ) ; +test( macro , '-717897987691852588770249' , 27 , '-129925342856448988764251542089065045786155911790890516647657119087489042404899060228369392822075223183739765014052360206502536732276242266222695367972367328452765284427361172142362321443004910207800039177476242301577150613859831776093328430566500496443594413224371824361420410550048411417760224137393585174427565041635390932623375118187728586008978789234310569306311929614122033949249592316841971560046372431039697669234018577505272948749285774218193495971402810317470288145379703055809020802321420732619980008200661347545521210303094880943536506460031092224160192777095197322219385161928995729071382072812239062743558406558464517305710105484249' ) ; +test( macro , '717897987691852588770249' , 29 , '66960601081613218995545615402693600374639583627057873894478996761235534940521876203825851640372285281121028022306706156922783036648760227593129124026972625933013798555768937762460772142044797003957960219229519539565564116948220691395428662251667454449762970671596782912888080349684772071024984546225188460055852555657228531306371662448557023517396895942248714935653633379580289509781187157995620922388883890668691615375469973820302219060616733583757178470584754927697520205194864258128911605585342110346435691476086856952623133602717988980966508297658793357400697431392332924229866368079543112854041068400435054566433206423406557876970185985505776428441038078323222858222598473938385526462249' ) ; +test( macro , '-717897987691852588770249' , 29 , '-66960601081613218995545615402693600374639583627057873894478996761235534940521876203825851640372285281121028022306706156922783036648760227593129124026972625933013798555768937762460772142044797003957960219229519539565564116948220691395428662251667454449762970671596782912888080349684772071024984546225188460055852555657228531306371662448557023517396895942248714935653633379580289509781187157995620922388883890668691615375469973820302219060616733583757178470584754927697520205194864258128911605585342110346435691476086856952623133602717988980966508297658793357400697431392332924229866368079543112854041068400435054566433206423406557876970185985505776428441038078323222858222598473938385526462249' ) ; +test( macro , '717897987691852588770249' , 1234 , '240666810925796631497300464125793793876153875629096662520743987128655138300518806793333863505002370424150325835897522997035758513508393749421313311380386678245885529902936330574270897824424068780701595312024191583797781168159472099893770860328570371993646844140203799118143686616439077080118602046330501107174223757814456182746333086177504034894868587120939461313455507702811247120286468199645215838215144781536578745753923838005482894245501661797497042343390617151204343021554518498735362447358070369090432988690834865403291509113944458407089222159417866640525805032080821319406442026747974929325112928921447323232212274973452975883062343094212146738595192633791120734889354763869347495932575155161944862722200405955280366430399276362677049013925041871227530264219143440107033389736110114624783260190579707152045014476353193813168715289380838132597179842738854542064339183902073367485289715584943627672587668112192162491400086760878390153498140343600949752356890781346460139220027272654766196351251998753435700609187724419282733374517073505387635776141937057086008339977487598351396266355557385114078610220987097361567756363195532914764004598634407992908600646589647778700597919884751054929681098369460031512377150901578312180257824087931889292083387179002094560172630492173743471238348161722683402811331621904068461649853237649098667186022410987655766907338482317060412259815938817187300402820360378490149991171370482329371650505043884192332467954232225473438096361196485730615702706338896803459544893784510590248023379843299267561024474106199710926586300140256218142748793677805122624858592543944305974549597571554026676016225109087448889480206990407910658105566060532854331549685512672824252906121631110818833232354043403137418311925998804066986754875440423240222092764003746250623404175411263344414954113517360947070716557546634100780648355973690014553189027477234402720353402501541699079073208241754265407813302554719501911786154879576504690648777330790234360752380718909924776795870591070461878764685781345393089291677007084060723076292423331888969906994889802559722805557544432185305096822014262735051471669354024897723343139333199330147964590265703488059466191857192410897868609291384108526636429139154008874646743040881795937998168293882623621583556584500036772108578773075747899050834512563302362032542587715210166387236382275419681547020073143476402676839032589356933008399060939093631291937107000000043323532799137849647405096232083364392703455257640562906669605316805575467472071569944146598547468221559924113348400144610716847685364347467929073894879899123491301645104075537984420168183636199226629624957989433534137128744185230344994592856898029628268331117744171243766865397230810342464227680605486409079213386036803957679866952104779315664126405241076356017313310476722815126991777729855840510871727519397893209033487330193378894526790670497601404262388611693537246084432220039998668497909914891728825779959838738394310285580938434539221810042937887451215631212371491462951157863268559393019049906492412696634901678674798328369463166268199126370427527431576741235550771195727247585539256417952853329478914515539806021976444112084626581019338193239617668568672517993467174255845823702683834750228698628538106052353376750716489661771727612994518487692989696065706319916267876683157185246663635313221904866416368381426519462074273529104434353847460205734702566140847713395645548499357551950806690743433954202058581687009317012817649884159064284249335591683480037524895848927954651846952405664224327697084573143825212146169786019851375852570935645324673501437526819689862546523710166522763874255457046134768878318504847569562740775920029079242062671507739909787305724552670012633097279820790400444955953186180036141498111027556284782611831968632960254971585279229009517389124640521071182508552930150093115185298823230740659868195268121798981841121508518238922062146832778512233130516701388382270437021078314304384358232872632935033731255504313450018207186652992855974803423357233611324893304082721355054709451741004386686923054310723261481499154665026674935888222845457736324171023246366147102994195305848085588996476494973007973902151008585594112156233214360569556745482837925015827621067498561246812344514749188513286706401554080345967322077722072126008109427433431070325726521163012868148649582784383995723396360310319509595957738338411942892357400728388524308685812413893999404967999249813865349937751377717926369301101787921984260122186159989136656801540380770978320766045936205592959488163833618604355519117056970124007977963289037930079739906574432060855963578944486246793175242282673514112660912407087562188397053739993885193130818225601480302627529684348527769410385079008546741019828845532655444621234451156249631617457720152180989156738006670404506338571918208165921758803413253593685587469101580701192606017766650438994704981870117413061535622136601016979952697317238276873256779729419028069631432675219491767318800339045855442030264560075159056776340091166641523596359578961807101748144945138318607039052076486075699577782685718970588115246184745849474239861848227033647872319200256588719967644217877454602724612457063846122996574940120482768446762101146242787977449369937867250832112867230692912468970042855717280755106531667961937332446742078258774278002352847604203619178315262206430766732415004556722421674647346648829974839968356832918027747760706008251337997576672550889603071310089578634747901944072670071985016123486885045817879153495396347705516599056944513760289619758242073133217108261158438678792867348399912643882264938522086425924074531699941057823129668543509614970599670225949760759593973290456515031451150061095408009491932533974765354150005121720734711745252878859000575558573436139695813170049848899622852245653141171375285116196880631468001421360473881187149476805269342296424485310215470494796178401944348619754324798206578015187379609260920882768561974442771209643829629212007051116346637625763873106848673476948458383017883010996340518563860345530523780019175023658557801658436627673907676975971882109751635784820139654624656191522441490775749907596367211611579452627181067685977845460985237049896675479606151704752856005151770161591738112961723993454693092539303522485285732895462643804740701516376964927670122135657823916458074535855817547513841507607015010962514867231406668733574660708546812140757605323461188423370665178218323843285796646737709047020502755313516962625148241570458025214707284812497971943815765595261077725596928727447148413360293693704268976245064190940961850889245136042407154085469838297857292187347035492359540055492227822512458140269037567546119976309595685267059328503097802601274596051953728897555043442182432638912118214086596792857025735173692744450906559633901069848611000152694981799908562674080212673483483714535683816021391478836663467848746594481778215255545090822995407416235269774848665232107297962031453869358953402040347982467139283098108055610285820589613275368865515242210501491361858362122708451547647239066214844062386833772040444917284525202881555120247439897055373293814403955325754500816079489668326796664509455821614956472480002144936394671934338050270783459361214210050599756870439116283220868124998006625761895550396584389321270476762755086709308051601531689562716830791751872883137993455070471233464948461931211369790177531373113631239997994291418256714478265196669753238257830553539691807842745455955136875773828554605336260805640377757640862870194935776092004134130289520896834858656317913097532957724133151945092000859020920237096913664009534675855229755344172129957141641791984538395100720317980525185769142781585509930975604069100811643163009360481907738801078884830886276286316858755498443168347068032348883021378746194698784811802339515331441830238719175466597762050420975691354490653471436861965025398816127746666639354864324232964949049300538005293308845940271700888627199662903120034287206034687813252949705816491402178398645719387809539644872118409461401883654312922279080211009210189799876128819902719937084606802972639337531957278291820852311932551591955350790335928152884811433450537315845604917323956883583239480347219971438941586085711934485815121967398164101784083619826265891401802416571741345090544188799381856839432343498457496360597455526238460117589115787753968612657150077978004530794321967803330389249425352563744925321708518378671586645666604614530902858059020840074105043307623670946950043194604176031013849727052783428735689851667778432798381033674827978887751236650974118849759189503239625343304532523005839417475498961072873029640889256489519703706344292253527801297251124450502273288023521577486079679697498402526688946738210589004011833446500132651961861200853340654900269802660034733678942996167533210265105504648979731317667399933165040919109758988751189548962159739945527299915654716346246041095050960741515495587998776985363865506374140224005340645853795347072152325663672271845064723399857372941894460100333264447275387920605177410030429482678126703784114018103844023345892034742213333395468046660012665242882251447818527188389084106839211601891516465629590896364692175169015105701572123182161899801710734441225139364024469426754491100056297212476895075865513734972712990677136692220035091504362225897411284355159962673082264518469172649285965322881981348609178818294743174542244219819932183490365756919330710479957613508601495497295676950329757448944977362883166111823279769434700959568955927643656859063742327008267599164937006804048910677286568538933031439840564237461535941197796390759052457284051017778672694027120426633268111056448896881308374127555545225553090822535510692077989067554686838662757792829768851773704480230259292642841141429771977100764471997993102274545765814837384547498350869645999651843659166200886176115555346289903469340446739207010577645167542297460407137062960215028382415884570633157792532691792641314278905490923087079766067798937780659109451731519734592939579025164926515523248807352103381305168229367358321432773551392789398713507962778942820119469523225162863178680183911570348027961700553229115316563272964376101119188825605514991804081027954389921141273219285131032169547368944389824308436381941175515798111830481000043636844809228835704445068305252750582078049987152297826581119584963878880864201441342341314647264252390676175707582693479476352854352886370525502607349886832362596404647139600857534060227964743860211405500060294329186630176879724051222152101141867575359408008501674175606199047463432213378831599134528934108281929480497040842200684432006775368915613194065693056672838195707429303679749464784054705434213357415294902116744802057352193718342238545126703326661042546563491168121691269341550977021406438785288342043569889077634089317033122541296230748114388665029044499469546397108299753200706114193470635536895967048169021873576306364846257373205822028138269759764442484817509279075026743603019509097159849066563284407999202539936119877761212471543147933987133791650432393675308321559611393751092509456575599446737432047081189236910050329727334141146991725988700140584975269036834508080148636316737184199462112708124889925362377529178344014590919552819769657577672702978011641143673156015114065926314546589192090878523676668017033871729579063980669673546335286849239147941679867288782496042348838505520661208416542384402601836938516863582808398758530009389050063886699985783925267497452701039388970042411071173551559121683897134217799905956381777617760035612136975496448360169358472611166991247066660361258257792717955895802886807621142240955311727190733860080248699104145339409596193747533219052958194006816842395395133815227958447183027408201887154248055155515252489593725880002915429087346780489686173993006485543412786317161927405570384085201230519902078033355645726810161924247926196020315576428292022629241922920330634879366713250236205513546588717366123436426532878032863695637071735051269224304497931038322951508526569846253683590423751042200651378810558188601895181845187598166177418938407685219535673829472096697071612870362277436920342738049215807079089141509386167010651751786772439419974350420945450780317330425760939076658378846814831229353170269675745570687143370733413098798744099031911520221044007327256897909622230050896081391104380973572938318409605238511264413423963577109959485446578175113776603615777667633293449071495602382745493460804765597670064823587149295646560929042625803334777303751883329502685780494009410515987822344496036156411290474009548223625232450188758230491801781290987433426377664288677071271225318178134265723090953908487368210301890173799337794414289839164334384499838476694064042562380923392170814007209797114936223969923288492450317383650369779029731134714434936391643766311336738629884184770965675076449262359336759950385687723231779915621937147640435620959355327348891883061403815008875737737458441613654230046515389312374996035407943181440498220354304355266414125515658969508581407533490313522890987856883087879602650008064327529989955508937331955239874722401238624800305487314538069958888480061378318398494570408743929545890698144755401436645575305635886766888309290821752239252465276109182753977002117165726763101082508643896734872331680782581238479701159334042497390606376542941582331808271248759018721187949059390620081627947668715490802983617888543466920624132979650708704245244736734577571335364024219584348266021595514151130896017976378599765662306270194051912298827281348333359149495872248207397081180112660679500488646194492335713944553578485524340274065812575443967506816413669283541021458439360404721464264498869630723885583385346819805722244341238149657763492548458459521747402931332148061021522859079768700468052335856043104242388423745990751764752080395046941015982884875151539581000878641435603583824562615084914225729901628394177372130985466208762313918008648944381048427957163858317218102829834343833633544901126931143569398807905684970202348964194612275298885061923925145525774876352222523781858372282001957198274173098329010279847291113009852613678253123199322917136025127117154756978089704874006129913373888341731677935563427208491533468982839070555222905600716758864558055015455443368534003989339266991496574749087456141207063618250411241902141164015442390891110956633395370303166431966298954503533779086717784121585666343471909838926386599682823714314774096149220614537617503626682222182615668880281733598355987215201453863347388340090921698878129884976286937514133684565405410347549261471700192037533086493793953508999824708254409983739425082813111045769624535087578645427477116700686622592971553298713236705554924227547844058030634294043977065066654988266829751374105278390824121371044031181008428048205223923243651098135005092948487395324912456217052331950187603567228183420265978222659169332375919592362911152011838702189535847577763714114425190514299564739774757564037598485982927812147173140747827430978393017504243724684098500167685714749941846120533181791178220367836024729909146669128836477415610531307171288054524223649506374655503312084693854015857030163886937766181098823169023181572231477404931598733389102380674704591127778547890467262756173574558080654790642471369332640892203135294330237246272074631760017202872694312963325722611729402358297429077465902624984852437593479190867737167006749083009854670384065327519801302083242691293439616132893416660268947919201637739258769771607084518793369204312869826490193716352930819450570212844033786667236068075375941453964216107149779664323628747272497685794971849040594638565097670630010455310220514277785818284186463200618441748478788591987616681646033755321959251953987293706031605827100615706433378711983560088154239750803537349035070283423517350889381534886372817293834165533055835445256823942303051891255521175486827650886133221071633589921707722114526609240665260264492305806982431844042679579783582551609283040246523428581845720374540737897789979786180180579009825935175015723992444590406056732840128165816199908483281974729283159640149821021618151095300252407271226953926728439712096665201813821962143089789720545389677608391629805852569311950851389264151131224953921752017840922075938093985062781184787646406285721393870539756657767030925030053022461302204093227393963491255643017235236360807076699601286868224950349231983608760919780584266842953210668067889511328397050532424837545546721403509681669483144282692231815703147470176852156718005759125673967988457229048839619145997585270368102435074595029990094324102493737818970275642575407600875588537013441673454455861497898836728065291478392070865090189959309947742444986923526745948057899128034232868017159368271694223700039666236730894705407231009389857561190687139334624948051152611495443371208819706799382667564652218904459544669746954713753183826624347921466724650586905939136598547335012617702607014113794591546834254696563524548343500981096958481191991323022742758572702244370470464413665803392605126994943740602380225661619992335366449312159389272554547255369597536289533017879667844179574297853538262473990737634615419535991688218597561417950967595509116168022993443293531295365421530990278428579503023488689022645550899786226625323338180515144059213727584521215321722089993299184212218054163465777614637889378688685803879328452385390951350548924489120271418100487678768868428228212387228503799518279495595264908243662176970443975028752029355061454695157141184819938299926947437018478957044395662391617808375468649007600370172940115843761412592237460566795143736348519450988859101853660296226210668299394693230720927858276964586740548558363904065214488088226818002415057852903743836014126022876012254536312345404960062753442098036019060443237049994545797682297235099797863438436593216207403158412477892107575374686442179451430350704320791891708254315536860892520182634206456725864813704568320562591782038671811141093425946482688159934297090882997856490197026962532578625837338928755211465291529523683918247460452910194710972484675179153177104097104259910518268539520304289744878391349554947980543388976876106090112798575825073980240911865137171222653996955929253877954855333315507869969643594964229605539468134884245036416894025484737992830203554155653978459691014928198149428959910752989307071317377965664300905553289327994588549850950284644007080706241112418494862133916539297959029131158062514264923394985650739154621700845808120916284537924609624030443114218948985698358239949762635499673659005627824880546112922811671183977198549908295009183673236341667156736650377361061056737332063403410177715559814144656394550604447538215779823278536104712565326761405690441339115296210030702222989203489845948281369398678770779363415632864910236794328437692624022552548328392842615492736782204301768665965365930746241254165608754964908497067499545759985298460945344650446835792542841082131510112938961881927693248231120221756864036707731726487325938077272576650743798183544800139162905157445216386915371613768879264078891644381253089581539609558090983181521395649500355526541811118635730569046931361684921810261207373485062516626873625896376115969793729107031511621422445382850451172374270682693053568648031104008891817274572963359437128249991844891468313131004074851541435190896882353764875480896554449408432067645595533709041759932190996007431454089967656531249566609171679862639011907239936167049017771581006836981063193553563613522749187290893357797646951653930745484252566662895227296365515537656517639786730623586151975310765480540289532531601949395336304927562830700960037825411985561643821347883034995939999815320371904489018486314948455952559263146409710068471713259502647267478001977847611896061825935753950424233795977832748562746151379388667659849662204204370582406208836832264614999774576849343391530101628342373099807709619251009982948420174200692400576186926512032915961194241973580587141742017725523177905799155980685544702998175691236820149021743148908860959473955326805004843786317283255788228027783973963775307044681831745418957729607897287660450576165731690039127804414511168095180765758455897687743007250305015608713824106966239837615772559788333446260389735144551194566097856159222619045281993121036130544888850748533209105902290817972040683491743672438537427407555076754103740470470519996488106893988963679893402926779777315510136748292964498716616387480928391333727613516511458687653975670170800714203116160576633121381876444223289818335512535646590900478008372238152919598466400554972447258395277820369798167170321756327919408066285581702239995204777287480387161536727459448442509762680258106041535327214632697312513497219121039425133532472242095253942361432227842877340347922588175651734262339738440446492272637919578131157514237627203984698773116783796765212222546280365874311759355831644675241116934493294688108999510961605213084570721687715849450396639049106141887860856148954550750471455629931627105000620532269066137825781316017603220973433261333991034567108467510498624962642488699169465874363399488868154638948242465984577292633553735556852420099382096738662832127104872725881996505036610995572650123609241043781086883738614012464955179446535377004978611118562176293167638027449612637695085975726247778121052711332364566219200112876185845464416120363602708440087210524126961712756204182189211477418943839212507448032291316566737926226650207942465800405168687099249273393069060646360798873617365864441322829730079901581793477840461467290903920089953743513557150545457465001493281676469801544541444627173505187869563691796834575745981341826378231855942604285683577230974772727095310465725871392788376171498988325165587658459242478209763818343931715246275249033847544355256625769712507232847344158590312425822454135201105768865080501413412277647350979797597165322409320114702032426981288520271353130012171484594553991124856728942246176555811779216453894275972582641573921036716718553318429096852951098778309232081644343337035691135410384601765183315931601762146264393426528312050751636769212945201832547953844492774251628393141343106226795356284876139469403273284444586014152400694986734961594079272858809061960949904448174959103909564433761703907276125412354892775335876415272646526126192989549857858930065881045254576136386486138517438556555308338685607210816131204906145887848650892144421256413442786428159719389978047391109134257790046140655520758094636923303925473166438103154754510983147606737926330885845999568999353851276202586739695128035976057952375907156376600975164048300965313860942704588148212587962879654957903805340177854247259711308541551603503567837780970461451995771047865665783511661730311276567901518165972850520986636796137347177492175264790310493561351654339295597668712467832251955744640272444007155359474048804304065788982945928352532307632627576930665303670890426050955025688528627309916477125616012512925234970728304675990574496468777227069085170298364495254489068034897491392933909636369331527636742699013284766902371352506091776350995292002731244023865757006858780469293597018620342571723772179977093125789699475496105523743724832176529540068144093345882387953940656084217900519955099464578748726508611651485516665622261135808230656113185935758123090731435124996047414425279597354359574378856570913306377601759010157157490619551740940998388274502844305091669547119876233489292751989516078837544062423667004292912251992330172087279616497346882233046859736081564275972335625958254887035338484716664189318473872485695845339136606272315059741608927734938768821670382249825317380542046557829438761966527834167384855716224439462405323266438326536377961771823507569459750423103138290848070089339750740358977330113970497456562209782789816756431729085281442325129945131381329920983439892601873489278892739994343671536564003094063601168102358102060511646184488836555280866265439572865577916493719868641514516664261116535122724396782278955528978764063014169535540654859120299172230842177436210545014476071475600058330214022044195137271228882609806962913480150447375885450575324750279251402851061941914287093134507336790423199888450218824466412490267199774666086468918833734387337497335144015840693004008549890781493464193192460097751739334161380017888359443004786038046374825235310856409598367802175188078401652900630883502414596986630872311085261238505708931003788068325087199867279768495262956883650359670743609352716895125122349956601558456299500231541599105539315180746997839621279353395686142155700423447977269222089468138684489318419154262504409821198761325705465328527695537157420782082354078175035903462010430134986159387812646272750962009925857083492829567970790332465325289206689049063764087436241829439763284627544144883357167770069639466367471860398862788075053410539365200406384307372970511564096399841314435051459484946899992507044444836354985269418541366246616097379154763081470481918007310765539689731840724466167823996718641044946480569623102013135147003272739284086213587006083417239308558779132947952435879189833909533561483821067431049890268359556509392353401539333788301678145208658937272723188794578112686709909491108016192828130703303524780820687044001344046854958188080136806595303293237463476504011920463204562731540166037081435695648333493988584792808470211132901764592133330530980096778425332932212735837577215893864016217901368345444882023496497506785629435246203379531538457462340173890359032774939687844147198184957025212849427638320378720167398909916718917724985900920192030214246493573397230398365110417352778733527631095124650992710118667623539554692566783429394136221716928121159143717386855853984409631021985053790618629812165917024946228153251349408767853192940114553370189242241369551007994010028856078603666746043453656590118761983375709654169884658816846754918144899815282484040063735003947309015844941305847294632029009712335365639096408778574091927109550299652681981479767150215206743081866358869114610816772333138477417708074433283279303532825808874057642839515755856791048739006988848065926839028819778433988669939558066650036824490486884666934262276513630175045822348774690095228540301868104997197326328212569850060274724529767914857676420841256961349265084840795236300841400994212367633572991161913691050780025455347823394988202788101768864502813390202856859126972599856839543990159365234030538827346354126800097285185924007284964690706128142631879645458992663766048427439769100788649351932617465546902567125707865370814068813860587244367746419075848390538678832569432671471062986454254204755506074801888029161552920066319891531957945773273477214975812022453730709392776469844678661783580960787047698418293376308118134867752848112612486402593064704496634807094220104296663754040709636340404817455410880891536467187831977983640996849951650389805873899168181319390054320789631028913388232046260307268390249991322854583613804193446810865918674501358892715568404694072865540886401726893184784714501860380117604550931574048136798023258513596201002070068810852653249151000051456727886861808962487581377647552163976398924881561622659417081146106665646072744668498044426052522804636851043773834785399184804744620318835737108437901882030516095623037578335280017150548691261342926746197516595593226496924022045173580598481046504353473187019615999528239277638114058438415735028254220037867803763085393466530484468108461280119649653140359265924176687880191882252356096667279055875924399802049955390469540917907333623282921659561338713671919571784854447264751582461161121608220632552535539574811239491907977080055351867435082725503419467499187011802283659752233542349669207811280081047966667824818523441274660618920625130919101015888482026053951969439894711895548441586107366790258898741612638693297959237922447608589158095992135723952461923994687823650465896764883667052137155194576002906847524103760645387180490146865124538922972372819826875923731390254431637342915817358546048808767134126047097505431381328118991195760134187889545091844395783645096128280496313025953970498006602276712809536127205652543720418045709969402565206329936420465311999349099261495766939883753463147455929093001269063984253071712863023553747896664603639453734132845027589712104259060427174009223665700657893713650553018587778453891754253151543028835750947685193000377825566600933648482508779760768199662372049766387638985631992100720003474151721375703211133912952407983355924232680111677587187241552829353741946423917448296404338549819202048685814597880693735805572741960307139515943152276365487150482922514045581253293812970267225644349179074560531877646062461313500613224648092931335926366379056886844623491593907009953911828052093623916145953431995773150699039217050325951921320241782503621522257361377451082489605564890402097866814491505081488150019983296575499211151451554027366425864934924114301930078755148355932268605394003602081353485970925801149654213968714040128138987924299507789192344817388231539104117379617054404077042219865132840948934920651343894411168095993753287475595036673571212995962900134686846347787877484062299240326083529798662229832353356661104190733708040289237334415143318464007457016765783370725688178760684007631997290723697308539152704845065598303686071945621892934023531809446634995403272958391058435649685487542623361855343322082521933633876027950702259029069185899906864695622617535870612593631958372152800863964775616329570345552185613467025464216600056930056849030169878244758163240995914072907600096163507820815348734058513665059114508068178367617804243332753749239571295040855080590873111579164335770288383740923440579367884707497712423043388562508100574697765074001' ) ; +test( macro , '-717897987691852588770249' , 1234 , '240666810925796631497300464125793793876153875629096662520743987128655138300518806793333863505002370424150325835897522997035758513508393749421313311380386678245885529902936330574270897824424068780701595312024191583797781168159472099893770860328570371993646844140203799118143686616439077080118602046330501107174223757814456182746333086177504034894868587120939461313455507702811247120286468199645215838215144781536578745753923838005482894245501661797497042343390617151204343021554518498735362447358070369090432988690834865403291509113944458407089222159417866640525805032080821319406442026747974929325112928921447323232212274973452975883062343094212146738595192633791120734889354763869347495932575155161944862722200405955280366430399276362677049013925041871227530264219143440107033389736110114624783260190579707152045014476353193813168715289380838132597179842738854542064339183902073367485289715584943627672587668112192162491400086760878390153498140343600949752356890781346460139220027272654766196351251998753435700609187724419282733374517073505387635776141937057086008339977487598351396266355557385114078610220987097361567756363195532914764004598634407992908600646589647778700597919884751054929681098369460031512377150901578312180257824087931889292083387179002094560172630492173743471238348161722683402811331621904068461649853237649098667186022410987655766907338482317060412259815938817187300402820360378490149991171370482329371650505043884192332467954232225473438096361196485730615702706338896803459544893784510590248023379843299267561024474106199710926586300140256218142748793677805122624858592543944305974549597571554026676016225109087448889480206990407910658105566060532854331549685512672824252906121631110818833232354043403137418311925998804066986754875440423240222092764003746250623404175411263344414954113517360947070716557546634100780648355973690014553189027477234402720353402501541699079073208241754265407813302554719501911786154879576504690648777330790234360752380718909924776795870591070461878764685781345393089291677007084060723076292423331888969906994889802559722805557544432185305096822014262735051471669354024897723343139333199330147964590265703488059466191857192410897868609291384108526636429139154008874646743040881795937998168293882623621583556584500036772108578773075747899050834512563302362032542587715210166387236382275419681547020073143476402676839032589356933008399060939093631291937107000000043323532799137849647405096232083364392703455257640562906669605316805575467472071569944146598547468221559924113348400144610716847685364347467929073894879899123491301645104075537984420168183636199226629624957989433534137128744185230344994592856898029628268331117744171243766865397230810342464227680605486409079213386036803957679866952104779315664126405241076356017313310476722815126991777729855840510871727519397893209033487330193378894526790670497601404262388611693537246084432220039998668497909914891728825779959838738394310285580938434539221810042937887451215631212371491462951157863268559393019049906492412696634901678674798328369463166268199126370427527431576741235550771195727247585539256417952853329478914515539806021976444112084626581019338193239617668568672517993467174255845823702683834750228698628538106052353376750716489661771727612994518487692989696065706319916267876683157185246663635313221904866416368381426519462074273529104434353847460205734702566140847713395645548499357551950806690743433954202058581687009317012817649884159064284249335591683480037524895848927954651846952405664224327697084573143825212146169786019851375852570935645324673501437526819689862546523710166522763874255457046134768878318504847569562740775920029079242062671507739909787305724552670012633097279820790400444955953186180036141498111027556284782611831968632960254971585279229009517389124640521071182508552930150093115185298823230740659868195268121798981841121508518238922062146832778512233130516701388382270437021078314304384358232872632935033731255504313450018207186652992855974803423357233611324893304082721355054709451741004386686923054310723261481499154665026674935888222845457736324171023246366147102994195305848085588996476494973007973902151008585594112156233214360569556745482837925015827621067498561246812344514749188513286706401554080345967322077722072126008109427433431070325726521163012868148649582784383995723396360310319509595957738338411942892357400728388524308685812413893999404967999249813865349937751377717926369301101787921984260122186159989136656801540380770978320766045936205592959488163833618604355519117056970124007977963289037930079739906574432060855963578944486246793175242282673514112660912407087562188397053739993885193130818225601480302627529684348527769410385079008546741019828845532655444621234451156249631617457720152180989156738006670404506338571918208165921758803413253593685587469101580701192606017766650438994704981870117413061535622136601016979952697317238276873256779729419028069631432675219491767318800339045855442030264560075159056776340091166641523596359578961807101748144945138318607039052076486075699577782685718970588115246184745849474239861848227033647872319200256588719967644217877454602724612457063846122996574940120482768446762101146242787977449369937867250832112867230692912468970042855717280755106531667961937332446742078258774278002352847604203619178315262206430766732415004556722421674647346648829974839968356832918027747760706008251337997576672550889603071310089578634747901944072670071985016123486885045817879153495396347705516599056944513760289619758242073133217108261158438678792867348399912643882264938522086425924074531699941057823129668543509614970599670225949760759593973290456515031451150061095408009491932533974765354150005121720734711745252878859000575558573436139695813170049848899622852245653141171375285116196880631468001421360473881187149476805269342296424485310215470494796178401944348619754324798206578015187379609260920882768561974442771209643829629212007051116346637625763873106848673476948458383017883010996340518563860345530523780019175023658557801658436627673907676975971882109751635784820139654624656191522441490775749907596367211611579452627181067685977845460985237049896675479606151704752856005151770161591738112961723993454693092539303522485285732895462643804740701516376964927670122135657823916458074535855817547513841507607015010962514867231406668733574660708546812140757605323461188423370665178218323843285796646737709047020502755313516962625148241570458025214707284812497971943815765595261077725596928727447148413360293693704268976245064190940961850889245136042407154085469838297857292187347035492359540055492227822512458140269037567546119976309595685267059328503097802601274596051953728897555043442182432638912118214086596792857025735173692744450906559633901069848611000152694981799908562674080212673483483714535683816021391478836663467848746594481778215255545090822995407416235269774848665232107297962031453869358953402040347982467139283098108055610285820589613275368865515242210501491361858362122708451547647239066214844062386833772040444917284525202881555120247439897055373293814403955325754500816079489668326796664509455821614956472480002144936394671934338050270783459361214210050599756870439116283220868124998006625761895550396584389321270476762755086709308051601531689562716830791751872883137993455070471233464948461931211369790177531373113631239997994291418256714478265196669753238257830553539691807842745455955136875773828554605336260805640377757640862870194935776092004134130289520896834858656317913097532957724133151945092000859020920237096913664009534675855229755344172129957141641791984538395100720317980525185769142781585509930975604069100811643163009360481907738801078884830886276286316858755498443168347068032348883021378746194698784811802339515331441830238719175466597762050420975691354490653471436861965025398816127746666639354864324232964949049300538005293308845940271700888627199662903120034287206034687813252949705816491402178398645719387809539644872118409461401883654312922279080211009210189799876128819902719937084606802972639337531957278291820852311932551591955350790335928152884811433450537315845604917323956883583239480347219971438941586085711934485815121967398164101784083619826265891401802416571741345090544188799381856839432343498457496360597455526238460117589115787753968612657150077978004530794321967803330389249425352563744925321708518378671586645666604614530902858059020840074105043307623670946950043194604176031013849727052783428735689851667778432798381033674827978887751236650974118849759189503239625343304532523005839417475498961072873029640889256489519703706344292253527801297251124450502273288023521577486079679697498402526688946738210589004011833446500132651961861200853340654900269802660034733678942996167533210265105504648979731317667399933165040919109758988751189548962159739945527299915654716346246041095050960741515495587998776985363865506374140224005340645853795347072152325663672271845064723399857372941894460100333264447275387920605177410030429482678126703784114018103844023345892034742213333395468046660012665242882251447818527188389084106839211601891516465629590896364692175169015105701572123182161899801710734441225139364024469426754491100056297212476895075865513734972712990677136692220035091504362225897411284355159962673082264518469172649285965322881981348609178818294743174542244219819932183490365756919330710479957613508601495497295676950329757448944977362883166111823279769434700959568955927643656859063742327008267599164937006804048910677286568538933031439840564237461535941197796390759052457284051017778672694027120426633268111056448896881308374127555545225553090822535510692077989067554686838662757792829768851773704480230259292642841141429771977100764471997993102274545765814837384547498350869645999651843659166200886176115555346289903469340446739207010577645167542297460407137062960215028382415884570633157792532691792641314278905490923087079766067798937780659109451731519734592939579025164926515523248807352103381305168229367358321432773551392789398713507962778942820119469523225162863178680183911570348027961700553229115316563272964376101119188825605514991804081027954389921141273219285131032169547368944389824308436381941175515798111830481000043636844809228835704445068305252750582078049987152297826581119584963878880864201441342341314647264252390676175707582693479476352854352886370525502607349886832362596404647139600857534060227964743860211405500060294329186630176879724051222152101141867575359408008501674175606199047463432213378831599134528934108281929480497040842200684432006775368915613194065693056672838195707429303679749464784054705434213357415294902116744802057352193718342238545126703326661042546563491168121691269341550977021406438785288342043569889077634089317033122541296230748114388665029044499469546397108299753200706114193470635536895967048169021873576306364846257373205822028138269759764442484817509279075026743603019509097159849066563284407999202539936119877761212471543147933987133791650432393675308321559611393751092509456575599446737432047081189236910050329727334141146991725988700140584975269036834508080148636316737184199462112708124889925362377529178344014590919552819769657577672702978011641143673156015114065926314546589192090878523676668017033871729579063980669673546335286849239147941679867288782496042348838505520661208416542384402601836938516863582808398758530009389050063886699985783925267497452701039388970042411071173551559121683897134217799905956381777617760035612136975496448360169358472611166991247066660361258257792717955895802886807621142240955311727190733860080248699104145339409596193747533219052958194006816842395395133815227958447183027408201887154248055155515252489593725880002915429087346780489686173993006485543412786317161927405570384085201230519902078033355645726810161924247926196020315576428292022629241922920330634879366713250236205513546588717366123436426532878032863695637071735051269224304497931038322951508526569846253683590423751042200651378810558188601895181845187598166177418938407685219535673829472096697071612870362277436920342738049215807079089141509386167010651751786772439419974350420945450780317330425760939076658378846814831229353170269675745570687143370733413098798744099031911520221044007327256897909622230050896081391104380973572938318409605238511264413423963577109959485446578175113776603615777667633293449071495602382745493460804765597670064823587149295646560929042625803334777303751883329502685780494009410515987822344496036156411290474009548223625232450188758230491801781290987433426377664288677071271225318178134265723090953908487368210301890173799337794414289839164334384499838476694064042562380923392170814007209797114936223969923288492450317383650369779029731134714434936391643766311336738629884184770965675076449262359336759950385687723231779915621937147640435620959355327348891883061403815008875737737458441613654230046515389312374996035407943181440498220354304355266414125515658969508581407533490313522890987856883087879602650008064327529989955508937331955239874722401238624800305487314538069958888480061378318398494570408743929545890698144755401436645575305635886766888309290821752239252465276109182753977002117165726763101082508643896734872331680782581238479701159334042497390606376542941582331808271248759018721187949059390620081627947668715490802983617888543466920624132979650708704245244736734577571335364024219584348266021595514151130896017976378599765662306270194051912298827281348333359149495872248207397081180112660679500488646194492335713944553578485524340274065812575443967506816413669283541021458439360404721464264498869630723885583385346819805722244341238149657763492548458459521747402931332148061021522859079768700468052335856043104242388423745990751764752080395046941015982884875151539581000878641435603583824562615084914225729901628394177372130985466208762313918008648944381048427957163858317218102829834343833633544901126931143569398807905684970202348964194612275298885061923925145525774876352222523781858372282001957198274173098329010279847291113009852613678253123199322917136025127117154756978089704874006129913373888341731677935563427208491533468982839070555222905600716758864558055015455443368534003989339266991496574749087456141207063618250411241902141164015442390891110956633395370303166431966298954503533779086717784121585666343471909838926386599682823714314774096149220614537617503626682222182615668880281733598355987215201453863347388340090921698878129884976286937514133684565405410347549261471700192037533086493793953508999824708254409983739425082813111045769624535087578645427477116700686622592971553298713236705554924227547844058030634294043977065066654988266829751374105278390824121371044031181008428048205223923243651098135005092948487395324912456217052331950187603567228183420265978222659169332375919592362911152011838702189535847577763714114425190514299564739774757564037598485982927812147173140747827430978393017504243724684098500167685714749941846120533181791178220367836024729909146669128836477415610531307171288054524223649506374655503312084693854015857030163886937766181098823169023181572231477404931598733389102380674704591127778547890467262756173574558080654790642471369332640892203135294330237246272074631760017202872694312963325722611729402358297429077465902624984852437593479190867737167006749083009854670384065327519801302083242691293439616132893416660268947919201637739258769771607084518793369204312869826490193716352930819450570212844033786667236068075375941453964216107149779664323628747272497685794971849040594638565097670630010455310220514277785818284186463200618441748478788591987616681646033755321959251953987293706031605827100615706433378711983560088154239750803537349035070283423517350889381534886372817293834165533055835445256823942303051891255521175486827650886133221071633589921707722114526609240665260264492305806982431844042679579783582551609283040246523428581845720374540737897789979786180180579009825935175015723992444590406056732840128165816199908483281974729283159640149821021618151095300252407271226953926728439712096665201813821962143089789720545389677608391629805852569311950851389264151131224953921752017840922075938093985062781184787646406285721393870539756657767030925030053022461302204093227393963491255643017235236360807076699601286868224950349231983608760919780584266842953210668067889511328397050532424837545546721403509681669483144282692231815703147470176852156718005759125673967988457229048839619145997585270368102435074595029990094324102493737818970275642575407600875588537013441673454455861497898836728065291478392070865090189959309947742444986923526745948057899128034232868017159368271694223700039666236730894705407231009389857561190687139334624948051152611495443371208819706799382667564652218904459544669746954713753183826624347921466724650586905939136598547335012617702607014113794591546834254696563524548343500981096958481191991323022742758572702244370470464413665803392605126994943740602380225661619992335366449312159389272554547255369597536289533017879667844179574297853538262473990737634615419535991688218597561417950967595509116168022993443293531295365421530990278428579503023488689022645550899786226625323338180515144059213727584521215321722089993299184212218054163465777614637889378688685803879328452385390951350548924489120271418100487678768868428228212387228503799518279495595264908243662176970443975028752029355061454695157141184819938299926947437018478957044395662391617808375468649007600370172940115843761412592237460566795143736348519450988859101853660296226210668299394693230720927858276964586740548558363904065214488088226818002415057852903743836014126022876012254536312345404960062753442098036019060443237049994545797682297235099797863438436593216207403158412477892107575374686442179451430350704320791891708254315536860892520182634206456725864813704568320562591782038671811141093425946482688159934297090882997856490197026962532578625837338928755211465291529523683918247460452910194710972484675179153177104097104259910518268539520304289744878391349554947980543388976876106090112798575825073980240911865137171222653996955929253877954855333315507869969643594964229605539468134884245036416894025484737992830203554155653978459691014928198149428959910752989307071317377965664300905553289327994588549850950284644007080706241112418494862133916539297959029131158062514264923394985650739154621700845808120916284537924609624030443114218948985698358239949762635499673659005627824880546112922811671183977198549908295009183673236341667156736650377361061056737332063403410177715559814144656394550604447538215779823278536104712565326761405690441339115296210030702222989203489845948281369398678770779363415632864910236794328437692624022552548328392842615492736782204301768665965365930746241254165608754964908497067499545759985298460945344650446835792542841082131510112938961881927693248231120221756864036707731726487325938077272576650743798183544800139162905157445216386915371613768879264078891644381253089581539609558090983181521395649500355526541811118635730569046931361684921810261207373485062516626873625896376115969793729107031511621422445382850451172374270682693053568648031104008891817274572963359437128249991844891468313131004074851541435190896882353764875480896554449408432067645595533709041759932190996007431454089967656531249566609171679862639011907239936167049017771581006836981063193553563613522749187290893357797646951653930745484252566662895227296365515537656517639786730623586151975310765480540289532531601949395336304927562830700960037825411985561643821347883034995939999815320371904489018486314948455952559263146409710068471713259502647267478001977847611896061825935753950424233795977832748562746151379388667659849662204204370582406208836832264614999774576849343391530101628342373099807709619251009982948420174200692400576186926512032915961194241973580587141742017725523177905799155980685544702998175691236820149021743148908860959473955326805004843786317283255788228027783973963775307044681831745418957729607897287660450576165731690039127804414511168095180765758455897687743007250305015608713824106966239837615772559788333446260389735144551194566097856159222619045281993121036130544888850748533209105902290817972040683491743672438537427407555076754103740470470519996488106893988963679893402926779777315510136748292964498716616387480928391333727613516511458687653975670170800714203116160576633121381876444223289818335512535646590900478008372238152919598466400554972447258395277820369798167170321756327919408066285581702239995204777287480387161536727459448442509762680258106041535327214632697312513497219121039425133532472242095253942361432227842877340347922588175651734262339738440446492272637919578131157514237627203984698773116783796765212222546280365874311759355831644675241116934493294688108999510961605213084570721687715849450396639049106141887860856148954550750471455629931627105000620532269066137825781316017603220973433261333991034567108467510498624962642488699169465874363399488868154638948242465984577292633553735556852420099382096738662832127104872725881996505036610995572650123609241043781086883738614012464955179446535377004978611118562176293167638027449612637695085975726247778121052711332364566219200112876185845464416120363602708440087210524126961712756204182189211477418943839212507448032291316566737926226650207942465800405168687099249273393069060646360798873617365864441322829730079901581793477840461467290903920089953743513557150545457465001493281676469801544541444627173505187869563691796834575745981341826378231855942604285683577230974772727095310465725871392788376171498988325165587658459242478209763818343931715246275249033847544355256625769712507232847344158590312425822454135201105768865080501413412277647350979797597165322409320114702032426981288520271353130012171484594553991124856728942246176555811779216453894275972582641573921036716718553318429096852951098778309232081644343337035691135410384601765183315931601762146264393426528312050751636769212945201832547953844492774251628393141343106226795356284876139469403273284444586014152400694986734961594079272858809061960949904448174959103909564433761703907276125412354892775335876415272646526126192989549857858930065881045254576136386486138517438556555308338685607210816131204906145887848650892144421256413442786428159719389978047391109134257790046140655520758094636923303925473166438103154754510983147606737926330885845999568999353851276202586739695128035976057952375907156376600975164048300965313860942704588148212587962879654957903805340177854247259711308541551603503567837780970461451995771047865665783511661730311276567901518165972850520986636796137347177492175264790310493561351654339295597668712467832251955744640272444007155359474048804304065788982945928352532307632627576930665303670890426050955025688528627309916477125616012512925234970728304675990574496468777227069085170298364495254489068034897491392933909636369331527636742699013284766902371352506091776350995292002731244023865757006858780469293597018620342571723772179977093125789699475496105523743724832176529540068144093345882387953940656084217900519955099464578748726508611651485516665622261135808230656113185935758123090731435124996047414425279597354359574378856570913306377601759010157157490619551740940998388274502844305091669547119876233489292751989516078837544062423667004292912251992330172087279616497346882233046859736081564275972335625958254887035338484716664189318473872485695845339136606272315059741608927734938768821670382249825317380542046557829438761966527834167384855716224439462405323266438326536377961771823507569459750423103138290848070089339750740358977330113970497456562209782789816756431729085281442325129945131381329920983439892601873489278892739994343671536564003094063601168102358102060511646184488836555280866265439572865577916493719868641514516664261116535122724396782278955528978764063014169535540654859120299172230842177436210545014476071475600058330214022044195137271228882609806962913480150447375885450575324750279251402851061941914287093134507336790423199888450218824466412490267199774666086468918833734387337497335144015840693004008549890781493464193192460097751739334161380017888359443004786038046374825235310856409598367802175188078401652900630883502414596986630872311085261238505708931003788068325087199867279768495262956883650359670743609352716895125122349956601558456299500231541599105539315180746997839621279353395686142155700423447977269222089468138684489318419154262504409821198761325705465328527695537157420782082354078175035903462010430134986159387812646272750962009925857083492829567970790332465325289206689049063764087436241829439763284627544144883357167770069639466367471860398862788075053410539365200406384307372970511564096399841314435051459484946899992507044444836354985269418541366246616097379154763081470481918007310765539689731840724466167823996718641044946480569623102013135147003272739284086213587006083417239308558779132947952435879189833909533561483821067431049890268359556509392353401539333788301678145208658937272723188794578112686709909491108016192828130703303524780820687044001344046854958188080136806595303293237463476504011920463204562731540166037081435695648333493988584792808470211132901764592133330530980096778425332932212735837577215893864016217901368345444882023496497506785629435246203379531538457462340173890359032774939687844147198184957025212849427638320378720167398909916718917724985900920192030214246493573397230398365110417352778733527631095124650992710118667623539554692566783429394136221716928121159143717386855853984409631021985053790618629812165917024946228153251349408767853192940114553370189242241369551007994010028856078603666746043453656590118761983375709654169884658816846754918144899815282484040063735003947309015844941305847294632029009712335365639096408778574091927109550299652681981479767150215206743081866358869114610816772333138477417708074433283279303532825808874057642839515755856791048739006988848065926839028819778433988669939558066650036824490486884666934262276513630175045822348774690095228540301868104997197326328212569850060274724529767914857676420841256961349265084840795236300841400994212367633572991161913691050780025455347823394988202788101768864502813390202856859126972599856839543990159365234030538827346354126800097285185924007284964690706128142631879645458992663766048427439769100788649351932617465546902567125707865370814068813860587244367746419075848390538678832569432671471062986454254204755506074801888029161552920066319891531957945773273477214975812022453730709392776469844678661783580960787047698418293376308118134867752848112612486402593064704496634807094220104296663754040709636340404817455410880891536467187831977983640996849951650389805873899168181319390054320789631028913388232046260307268390249991322854583613804193446810865918674501358892715568404694072865540886401726893184784714501860380117604550931574048136798023258513596201002070068810852653249151000051456727886861808962487581377647552163976398924881561622659417081146106665646072744668498044426052522804636851043773834785399184804744620318835737108437901882030516095623037578335280017150548691261342926746197516595593226496924022045173580598481046504353473187019615999528239277638114058438415735028254220037867803763085393466530484468108461280119649653140359265924176687880191882252356096667279055875924399802049955390469540917907333623282921659561338713671919571784854447264751582461161121608220632552535539574811239491907977080055351867435082725503419467499187011802283659752233542349669207811280081047966667824818523441274660618920625130919101015888482026053951969439894711895548441586107366790258898741612638693297959237922447608589158095992135723952461923994687823650465896764883667052137155194576002906847524103760645387180490146865124538922972372819826875923731390254431637342915817358546048808767134126047097505431381328118991195760134187889545091844395783645096128280496313025953970498006602276712809536127205652543720418045709969402565206329936420465311999349099261495766939883753463147455929093001269063984253071712863023553747896664603639453734132845027589712104259060427174009223665700657893713650553018587778453891754253151543028835750947685193000377825566600933648482508779760768199662372049766387638985631992100720003474151721375703211133912952407983355924232680111677587187241552829353741946423917448296404338549819202048685814597880693735805572741960307139515943152276365487150482922514045581253293812970267225644349179074560531877646062461313500613224648092931335926366379056886844623491593907009953911828052093623916145953431995773150699039217050325951921320241782503621522257361377451082489605564890402097866814491505081488150019983296575499211151451554027366425864934924114301930078755148355932268605394003602081353485970925801149654213968714040128138987924299507789192344817388231539104117379617054404077042219865132840948934920651343894411168095993753287475595036673571212995962900134686846347787877484062299240326083529798662229832353356661104190733708040289237334415143318464007457016765783370725688178760684007631997290723697308539152704845065598303686071945621892934023531809446634995403272958391058435649685487542623361855343322082521933633876027950702259029069185899906864695622617535870612593631958372152800863964775616329570345552185613467025464216600056930056849030169878244758163240995914072907600096163507820815348734058513665059114508068178367617804243332753749239571295040855080590873111579164335770288383740923440579367884707497712423043388562508100574697765074001' ) ; +test( macro , '717897987691852588770249' , 5678 , '52992561458966917842048333229403244806917799627848421877881735070477262881098520765035249624964340882038688516377409835187369665592703958080735736766945912536313709777389461793817187662953548213601180992839097018162700540199444811234129652849225410276267930982552729151588039493817422762367215695837880393501083343614940195379176805915010804690716402053261575165097342342740863670719437568773682027047862479103787981449864557595411550480691451690239227939258640148661525627569354056573032574365819474479753874049318092332197860174730296445988139873008708564407683788184545625049358109338930604072043506368501486476015294370204931967091112231708457059830732539826223797283205277978138098770871113585235612923319080860928191126542635460138797782729492896291235430456696065935768220494159845006073392139110350323314505384289055017134916876163400462621881373937156047111273516233295024171469513762593244072341275620852077848874899582624269495895402815765777547424606219477655639449216632626280672365511304216574465048481409555551898153578798780997838187598030296504499299634026846370222734083675507056188173301287819190008251323703160735842279757966250463716342218905187576189745969039286653568566712245083192424309450098888181155360995569923237384829100088794333552637537227162177479701619093609870600007097257152299648831715938521942096231520452892461541884420652580871321292450318548928985510277252222535133365388202103209163165539197901552072608710284236732915850819518113234646115533291363606803403675185089565146698511010652775061073223214261491866092146057590474879116664838288380912194992229955697790523281474198511681898554287250127257584177956384808694445714111240128709963424475982531545945446204678284012510035965008794769324049843450109531060002528540713991395046933182699881232634176242677648962206607631738502280973898290005462656772264590786129579181328545465308696435762205327818322165386961509403474972525469518547542068305372202808432048462319049469153118249646785678722142597199696100956128198604501655682922926268156814400446792306656470188135722009834179368221149303323894575881803165080171867765138413350984666824885942458943042705023835971675031330773162756179573615771369921528023990741381103617964140627847781113773752668975380722356219881474606884340999916287255829002765995657643610750292167091336372823055491725335254964911991918866523018470993631691434109295300263601212125887194770564215757107756618621927605011672982388667069376436126257785256735035080395442838012293011886480858182971214107329249888540878170831338663664497081571648293369670697492303978168090750719696674347255594774732019346186950722015778265861706529434650218922964570378758677250144083322218433388621419998372158607084870550629095764769864396578302522198678754554607834625544465903300910375218946617943281021263817868702534903565965515996857490410905151194367951674404671401634726316031502775424938708095480058006939655833612970659151929020021108105677362480187576212239598103259569657352323481949129023622185672875961306339733885857708982104417776147428446169851035372923120375171782152648094932708525562623063044339202972582525453779487351603066880013958145443211731768489287736596200008852460116803737486674746320357688425959700168747470090109849460232048475582033235140686903423628462653109627172118888613705624945389644912331260448674882803772456442287538433120812454253132443354729068891796527676701606716457913622114298779919239138678095658602599035272101050540631199171079787674726148712746094500511958909309383648848324958153313684693020237870128517588375127269029825997693115614438073154312047924340357482412336581044347428383345931096734448615207346214924813291025243318597445591410601657643923497289883965796840775243249869681469920755474682727417587202159996646531840273727959008935890037688256043389201553466973472089962210203795891910446649680901883560841094031991763415446185012636385884139521383390919645656949585657311438685339885917614078799309904047978363483036838818577158746493373606130783588041171423001575976326332942068212106971788178296357879590268289870554895714998398477383074091612380803534549439364991095989289183083877933651758973534265032552397343750530201088858666516716202042806877592785968359618297523122663345711107589355569471982996246008945010788125903082708965247233856493295495884971617005159683177020951059046089360849718770603433176136962787644988761679786793574894146198596283619577589492917433648008790154607904592377489003959969338300144125428308936896784361334723137983098924994947562038207668868190447389976840741447171621269619747614678405424544476952607756858007392925674149003932269670585532289548230838340609191813200074864347826444440499651323577336653937195827618989214774650052553204749548153719625554328240930029474674929792915810450109353297164695948404332144143911830336116561122587580838323433271508758381427202886466864203006769876629040113309536126898286439306875888068434906684986109839807912211044229574073513385256008653277622489509139402265793326372569157760069106457217990235011506430988742050031863394618171218562494463476850191629255740324446363242993320648668718706796758945218459365076583628726166585648610786131608405727805072734696605117814467304269584486848714577856278821187639674139091420868276683680482402061170964129020179849417226407523345979683703744990934601753619379872634811616761518185857620947821097797023780246814812679446740501132957939033231020697754175111520932341860938863741889626558269454453009814222388294592392173794599397585978687451892813356296473121549635013676249164244665043044957101593039072361182135678926932958876432422873012810178205318591023576753916592920079031115341838800740563121977641772239560122596720253059357199257880604788460448454541912874334474110048318114397597184518307140986163690693584548192536813827180198436161154497288570678489493883807773676094581689577716104059811574599177659911227887188217401978474514757553745261264218832355099235158560242297233406180137292308698109610071281861640728221129462482399191931254988997403297870669677165754913546299432301037504530872073067858354779137558761312187986108590108671713663509463849235645441069025317032282653619885664511756487047824929057588473863132476505639554060087119089853326292527491890156165208813193528270287317866931952302862861082174087615226626147432099575255480389022327072418068332438673738233637882790315683455450464590709105784350178739780127964769969011026088597219619472341103459382289201174496483005244865985320414773065969458214373055466663167449827644842719260068316989039810368349530823214414315840300587086860582920441160086337872788129994593466901398749881456816893076117420457023093235142704769500472838381750950452685686468352355934718793080770041896266326591193598230038726258131382339638465090689033062834104050137121528398579502285618016610064410178458485780348478662846002089852720537701136965653853259363332024728436379986256649234691293765971251875100216741285408346246009343410757983483597963489740851123818712786795291798837714819930591978286010640687992692756495314962784887224591285887831740631885066445063662149099404455330521550962587381135521874864351037529468684827186997370955447481995887639571571525702373403403761671748587109161571183805369675426792116895119621582920253789699657615500011890976403807282199844302806272514657032217062946033211042074109494896045803992953473587506222506781346147810525891832442558813747914920938494195556975736956239077078403047716108873401240720217398379985768790248880164667538691286461771920136462983631359473029704858507306794650707316446091278308009089124701630706210560168792994743974642056525288870381921514176601924996181921908722977903765494032218635205563065562888264623205077967964252752702442201464476030020851153648989654374063092609825139716406169830702732441666788603492696815334157061439959989046789065423318960712201089688946540796678378497252260148940700296093007934347669870770800342086190913566676064617891161093655936605836899446861184700094847166382869925437304928565010472625277681782787551544062045311275114543518096882812611825710549053207666530027825046311534181156975603474991929909024388711945463808425263464957653237271591373069179547100808683091655216330416092310214397175383390044315163696300849781070219134615015219064302516596226701912265613020932966925428815092790344445459519486710818501491744578229686083894654498423852571127489975219254353172438337650602238280223597768220243105815348527252142824365262184240072688609964102457657199429178311502128276669149947703560777240739423309436247534508874804401314162274740915591635435183346939875420896409168143366133287003880010386186641170364265028042141513465453408101841921842528837600797310807883817569665409313593668849776576983790985321325237847569765650823790815463692017963395752927945155773792906513914253930342695948572439951274479143533256050317996678589637630517043566370062714774155238038673228364852986154012293796986173903941816772421914136811088242656279247112124439226958945034478877984596864873339798554814421219750181744221681578059062457004925780474249073437168128231790400216332672320703915847426463055894401088311795843457416623717000078714687159781995749578194250354449880164141903126715398601118555657753088212238422071158309996360998060316430904776007237664213238747361809842176066931627956726802459178808505394046664002938285314488362839317461527679372532822934704704470253690263875879702240062788026418261529389183596155698524599722228817999108140672748144745689714554812265041175714545225389990781353970530998752805250297945973556929670870774946985404265424068777800150897438843100570165412465536409965604362377295700424297999045416603027704210682281919437502308628718607989662408388051610908664802514940396058178295301888644151245892936386802507105326053427738255325180381762764389027620113283759653480743839809992357496074117200755535328327778239627950809058337055235742086687019858930046083297050726069315089882694837254737886800564117843966144822575643639731768343937069600705061564770014386059309401600994691145418984296800446891914436526504588487235668560512126375658106759961423238985938919327850368124270203404746108520903433047821070462173699752058768991623911437121303926263567247275258743101051399711951304774969904872170431870967998534905416515742768485058006433022048620528364549739197129869684349063800961670793383545725472346808561542828191153302612521938569967207547584404136442698715207952729855421979521420559878331433668100753209636435675712543276009510142074799136997641192447567079334735530723873493925022491212344710076896739154338361999719913499831623432329457641993249784570344228676317925346610689759322653659928903365020471696174639950909615303515965200146660518282411647170608800939660621685552950249611706475325198479518423077155301209371280575534360462938867984963297040183736104969929190183531952577283379234782953108926401989267488044466794228043770347285979888837421775091151607628072534183685174245345816369526145717126891495096063726823540297588186575358585981265343937095373338996442251138594460569709569806492449609367188654079820152455364920624125030761646597005088999711445807387895998396475835641806955712083403146532371590752368935420985233735695950492134965346564198873831201899225738635547303457400703163201429850285547082772143821844313238723456259228759115534200528631507109400219431734564426566942208047195491924187286616903223592310617985108600082628611087567285767001840566153820546701939593194433998024938689773662808625697973543664837705457336677737765607746286815865891347597385126417092248398027369133671804532615511954414419259304523253807140857494548560843072982788068686101289767274829556337961469578050554176149354133487258534215364379154660461310427570189912699705529950514413147328168458631103249872388038937376864265012237965847164952284836681545396080247290559401291604967701175723121502236181093388323626875423056619719092568232717945805103108385877791944344245670750247392343384296108323807858305055418400741553693700502565024106126585636797090774279356316370509236531508263353733878156923208632989404619022265962263865918260332262005803614050713268964027332085964017902372988449905870060050221522451244273428597501098201640739856281753377806262510621286335117441922221183997764738785835690806964058090618523209727153455617620262903964419882379089412045613968114570967614290250244897455062121766814873521607883867929237291112681395681208806316115052463955424369530957702703335301336133507196464013784297392355963686577412082487656646900727164897539211910515592015131790757084187802478999731058868779493827694303480414208944059771372285831516411891131036856120211199256880755033121745020506905940385581282403448035169726911436826243069847201133079363947969342361067328363441956715292529385906162072082866885762473853872136917177105248829462003088491198093528321254844293731158494353309329359943621539173472646030822664165537362617032785562181639419716789150739604369299294852110605262082459555983084488041202822751327819978152651961662242916641572040409255879415966668785223872853617095739101441693844227787889967257101619837706529517298805962370005920305999407921230127760675120172113782634335023130691310728800481538764425860624015422603351785485421993634219805565282967254634644843789616543323341653341146495092459321686531162492849751882105121323719768549112911144880654693888232614646653956763580397332567522797083319499426431434148243989859609258432804222067142397999063441042035277929314828603521084355742771233471852499158339778603981017500121847933601889420815095445410655577708991650898864592139988828909325847690688265292963327637387564935819554712076627813142907683346250203958929989323689935059457421263112380235019472983111424135581186825910973214910699149667710959563181536691099143613233601161732666745012245211307688622118221683809456064734882630698593204467656990257941572412614139802715394281994293120883156362501711873082011731962032490574884682131178885924065895059613017568119400856466320056952350332528728576467215637026738604714597593759418177681274482897193349099377791845071840865476390482509958300517175834887188010180465835340333367167368967646066303894894949259012937252758312734808329709232360933894530979086189948266744307651572635781288044544893571461370440118431167905294073527312254045244808871450613885567599305888413740007585647252065620950569327491405356998305146429471623136661921767554001049077582559141269075807726942292324962879195004849835063558899374919319497877100701211206496709025329275359077524423372451805882088092879051313263439053059246113586757853983808973560033255079821096458791208111949975520419973969738539460358523519982416915144979569986992658895580772468544281855421641228395656106360926287526507440986113241371749929933626943002948875469110027470912266294656790428857661799285796092963253692751518091473958954584426686863281912392953724819538676197544419608647219428371546066604565530829571887668487791705473466987941636508397417037367030291035726974209122929822977256282776129310660064280234827050717329256768834139633843952427070535536323343517859928713869623513480175609016408364304241592622958594443056559986989106563619631715224662514109451710877519669377700137922914878226108875076080968720985553774478319079858681651339801277697214672775772710298769965771899451131005224958432124257866462047576738776398467445567954900257927297206412032651048753538257470550748950042956467383856098326990699095531754983730997777376855850204059808381527746257418211558497066091371508074576455448794073221457106194028764995140574406949894779285509688637508122002763143590113564857465357157613251821223444359965532981305922833468097064802147367022534931051008695237039566704201353988540866088741667038552935423161581934287462404348346959712557410094417500120546248110357270320222372208679677188804508939856387875484398668973720610306440393165985553874361652311139176073072642232364301455756578533325673397255829115802632064375030488532724282480941523096056375612516691335273199076868478063949077979981834693199226789642526467313758886727034664155374708233413052241176017997770755357925454917422006910044558649830410441042783912087181440912216816911418077643846400706686847762348581058766312240711484387486718123588654129529313123730637305855816034535443508751239517641963906747738873083589048844951039924094554710311263734798500241327075231542378920749258310205825922008644493121370590192760015148501273427214461014155067372554805948839297269789248975606338557054691632614937241901458805041012227038978979812168094150773239740200926858206670986309560725257896194349092782159293694188307081347049188661030610107456715733073715420873434056971119630761658470234370438116245797515154771525887334083368102698399109278569996061959700658346646955565093203139925211068688479012109279872461395639869548120204532938913593022473786111209373901721432107297071448742770742412159279076830118439645403061943303917551223288001014702113659615663577592748103708841776873178445568235386839518530066675979433748005530615064885650866749177914061788524262808081456736332733040493983863214714692393115801670972860894965741349096171975727706157112301169070137414347667759125039407153467452265210719726714985635420293189470049637210766042254751512445609291095350283495503549502917353512206358756772848829158151755615008365723008445582823523075844725615067686956618810366284960890688672135540705475984841760373827462101875128799270857413282580082072800739904057148821354442778410810970050701431502851594089320392059591004827037030949407048303186582849254894900004175510461919883551638536839489510245449220044773071872011316439740663014720019722095387628672305811492191697738078092246616407460689410223935009608878423391167281114435298028095665936771603627090834937282850979762786426899134362341889415374040340896380252725754909908018401107333556100522040895675585460969780799009744922983914153517048037312468584877909733205649413029335540211297879068656419387807383048842494215387689331649844934805491180381285929557990551329032335758734597115389529509449814729908343459195813101027114347572133759851590325554983005153111501432758813072569701126690781490951740575825405497526335840722010023321789428374242548378889836216282253171286247053640123351326348638420215428018887341486150219038345363430704186782773219435948195386840643853198799818242098668338179745226151996534978279230096399308636037991368814207217507069935928147009785676785160027497317009001777550195024132691150567507011354412329032340603521157466518995650811670602491853174280204852628446269615787322879786482369408633164257134657023953228812362587592950746528121453810577970418765900895068401958324820738606431245080063027400254319882177028368653741793457795068935169938691425211024828792631933230877447721276360612404169065676636411366175986321744222814400246758586497722397143948714428396712767471630538898122410697568130170950184011778819880862316215372642601335542980464853249009026580690749759635033913834129498173805649521698922073038683841857811453879318495594875910979538327284780569733959417673964124812143583018523970514641401891081019284489763221082086325354879697385907787761049442665031058490028534622149846137905767487116029644971254430227080575349336243717394801443483839458265798732710051462772605466482812641037899172879970734427748668316293777647496909333662168116654868712457269032630974156741200422999141171874097340818602076458352626593605494845936264195396202806647904404677157734745652872270210704027405978135714048673747336292778720101960923698684395527092073172044177213818544969591585627238532808299570223371536372799012875224234778370905326852914976423861886454350497565400489482872955448045615907842220173649212448684979945647349079756570932865476086046458864652043811750235877344393220429343034415180297212581588145608747445493372426999318493938150343775786331056194752510426503166230913186538526760445807413799806204051029905931303093836872257279463684631738363832006044614840509662858475110814261755496445327276173263161251358809092006580985277059802629992110919876640778599238851224190806234298093499859897877945279235571464696627205637879325947667945367188005248720580469836926696939939415121732586533901411675573681854304269524168392617282088535658385037701299391440541334384518081022468387518749703363096233963804922423094068395126707285054702218861778016173542392815212283678372323848563282862826760297013819812339131493327915541965803998097384090951244169643369018641096219195430772492922432677413755019687006516340030964660067215342977430274756427296622985672207880091256161463966745535322513359262081324439248033434926360421216544044746832762555450035219016309931057323669695525075977196214861598745789848117118689974917406963326147153664733948922010644259043986576126492884735748201429479293157327397169116086340829373474447532461009810536262731597451754627874681161347317493618449699664690398390949643587566379695090443777568885944452505841199312483422475407319328641366974092114345516068535284073079980141067468263817385977308228962318323609469322490263507101669512786080642752319574742157425134152748843756299008728152305538809501024125010339213159780735824709099108882350824446352596024291069384003047531175618027373859127640704478972526885889432610483189753615050833681837753536005311543749368107499347315534545941713644730273702333948596900145557971505509367959108594407502948243020888234056853650963187076323765146652614211207546354464881645918117204811380635728429776867963381852884230518246631190131825530206787122927542913920281579736988824992521073962274953252144927376468933425658712672597384028057932228407070530265731165980966598601076506604289064934821557949717410539761505040873308406110474412692271216992858783788017692940669126619626790274625702146919817133167454141020585503777417647004018422961010432475942591656281157554753543866527442721860074055221343919493702427083052905183704806054896861313080853192781874338774353472175893928663360488609634784890485560515252214309637081204987618424027884591397424067625820413547165571090593288097729180898304860943714385424978418160835850877717027658521907629768814727424695191227358428401962885565649381238098204936255938797308193040643227676416950981533713051600283871175312807406414172316740879617172963584690587789848239482341701897688268557616992035582225306531638164023604262595670103263609695362798739463036593927714273709560324792380672245014432684528132529510597382659551239028729153767533108869546101650464606517031212471681999067256252173869702628620955732415793090541749027540473718940312552425322149119344958406002437705982398992267252296771928467559404038212669370252790729353944780711661881552113249584403769083480856475063987837244029373948596829428019040641426569984762280646821052726889241697080032561970596779105934595957656757479131467410030344286211442477923310898646446342650046369081113562118381113974544065289731235914381813526415129034466320886690781519982064571162447720218016309577515552126698701486349767343461948090842618080712299219097673966015228424172663889427342731020122066675346414052340618598182609249461329861211149036514914521730088889300616712047373574894553971526437268977130623792336839865094059220733603108966045443149552683777916379609517221061627320405151444134819286421255392382822364134687682168786843209394288411699746863444889434411414485519234492407599434325668997799101520066221602884158226756336984242409440361323534712903377984364440121709955882861088033253565408769726596294534478786779815095706073686709431442168829090896416212535563746063403950198043478906364003836786350526095004964058916984298874819382063723661497266846181942426357905013650755458667314604787157987764491101741899567408074361392569794087507924311908229702294763769391197478812554522186741135262551897352184690374471893073000220162512552332060179402611785987981834888043869118074160633762440696320006275857520907876405364367283599977809702429809327633774811777287837997929063319088643981288504577794563897734368357724456507233435413578168544122187905557510349163877892031860938380863700212457499941173051991635044055263541028899765559085615828388330183855986870987907204189354310066588413218192874980402116441641033329112521433352585269389744561428992772734752313702102338324264613628379476243754122969786509425444725576325781027140066964089023790292891876331352393285001370386695304261889280274262043056322796927733119572711356326685350484589411334123538058781520196877872573359539914258371620972518600167848136853804940166949001046871343046124149316149555200621260500187812862150026333455832936133319251080100944562462138196424435420637124060278270301200807655723626316279314677989720701526760643271100348145148124820564605091911779855169535418882307665289900355017573800822546237397396616805582194694056466899912723329771183008166619132092740342879643527581402206500436271851742975104495236263710329645094452343102310844177958838929699065716898974352408381283451421410089914102753296005962431058406067303947323833242313152680641247938380343115958860199956778403253209323348645070739497071952928327376353617380302386451510499726403590049039220125741769453186556766459550919922603305625386150812873799214104365798370292908598658060494523919882837028108696230018764525326479800889430827403509641329404504108584175416299778457550149516420306914056180810908889377149438217925739822836731498632998974190671944437651733816831832102819701452336948218481443109835371939006988086201718924066189320116586181314358289815550824203560990687366887222969587068618783822844334383574224286655847585666103020816988760101669647856537819653647348642372860462072094399934119806713804526340303858796726062832597308487962786568628209393365116177313500258916696602298504935899488231886983956122931761650910471751605728341369214793135444893690581825560582275170663803345907902656817500959962305071703161844221586272436733043463590790972533783408461905472360665984339275927320721268991984362793905235237928358401214308908599626975869024433459897721710178957512745942114341723971665941816834394308329806825884356070709685761638881841811423881417063972638317949761209293108884169157244310554120522091867059525129565074635172821024753666469843554970503238670636464476697226613787178875812109508162171406085559173637604564435642338746751084270357452547638347056148137732031656248286326291618903398185758507933313960978162364875292581607458217158798787916676003226916398811579605403809873107421485543087852003080885632791018542669430381491298441535109732809291308440227122322919323520142248717203062944396531767516101348669545805257723994808980312479264837725492136882355862941108451810186385271944727323937476421051113190387402775727960536639091788137833258176311969569961943551611853786770670960071652604792541940305956411115347733415222667549394453865233071674925052111317188727005402659672862870124353044134138940763586559553241714723475928344653659170671048092842027797901483049343811224941954463977298856433740106969036666079845988063391903825032855950193013788243789490182350376071702678007109765795706678377357340602031572982332824123773826221420577356000773691991307382149359100536109508425616929397580550980381697733400694828091467008203408893560621735626409474184799062207420684997475127497499271462600004670205579497645152495972389782480775949584706612600406180867943792941868858006175201936307008047616757589672523735789473093905193759863364945186628110590148829061593580057092925835363208545182849585868221368570360897560213869098865474255930740671657540215219483723251702391679084671148858456387364281103663462079699683913175189821329916045361853985054542513239589981629807348515391518514157410480876717317086568995965776721883816029400496479881361209069153709752129572198334892249502748191465310837081561861610032985534309285339681126580547626611304860810381677502832262489332934346926301205586228829998320869739620904253982155600321208706995102261899336727019317570934776614228279624359270351092121785581627705454815208145814747270980169200427592287264446298455337451867154675225312599671885696403119745068812877999940157697775260282173718338630223097905166067171605705202669147542203111329964484204150252769374041699642264247344682780556183768647043088086067328086717187740722470761010716276890826844033820289730485347275758989422619495961781370981845507287224106646612891699787304991489991450237892608587094959507431025121524157532996055387813931382902218941327406937104535120623519125622928074921413343511233341463048114587623180196119633871033128642353961758736942162376474650866446500486254254052378915783117942846877531394483736296707763850427149576406806692201719207270711640436539293214966734241103817572475879693972994529271225318511005262619518630808170022848370992692989178376091827819432746605823278836088860098280229785555789098175025591438486997677754831517943543494195444780421155712600231315338591816992539029327290383750279259408507030866894281949592643856951856970260492648859191372445722757560829643128598473999963495915365217562729260899176033339914368657427490270587754614627221314473523385599772728811860813438436363568535104917622395452899623639754284218650275206353695145264760567105459178562491882032831507849731082780751290549815090526014153248389638366562779197588704003763886554458980922773564631738946671358670002437792609926532640853858166371833689910006342371227521888985462256616595134913448753896321572610914451983732905554764025205460856114907835462908762361867725808829101494129427887010484807824575634192790958596192835856035642229775443466803753619433447559913956011510527564464490362903893004175699539657818550413774129471722988670400259357614877806334270973688298172787849219764510531270431348031231230366988119457069574129982095326123736732280724513806554712464556176030636815599985296475879329526942793809334154537286409720616279737748877805830625972559290659320870467177007699656878854930950374408662534796671508779289654115928497876570228294960433889385643701335793908755514074473749964759488535101951927148371376246782141759279753146527867175256859600371220723263087493647651934107824747038684956089218459994098442077055339542213286639575013424597339692639209982667429839922996745194919443742101455841754629560994904267305390310619195510596711795233359996984129886409644969307626193230100243445176341224116774838302230433293550887983785529668376917774923810049977020766265752226119147869678480128953266773825987624533026602499804124858105127910152228288680919984865137490347059505127939634012785058380116016158201512139929087364709693014634031763687342662706605079791983804043837557045973734575431521833043317763655587404678815578341748648519218701877257148921016285162472607623283323249556573753034374795565710904057626708068152251494257423269988884212986826103841847235290434753139713588793284927733100788323782464581521308771041340355123219181562733669769963813626654980259896667571531426558561083021853772568029181635433012078770849834446674149991209906653073314199262005928322117392615818629566430413616987317922057832297584265671398209566291140412705971275976266486649851786135002249020062965980087138574535447132363958635609925366757622786251073626356537120620726163351028366500669047752276806994698670175421508941444055686927449826465211114309355867990655881671257209904683585254426503206543491199687267119577128778582396178926678946290201534745035364519018795390246746811766723584255073984715970376061829082762752016704470773798620997166862372135899943680412430608608549449361762094538339329299440793971638832722944360033468293012144165093312313114839006029476318874961592758500904627465226488109581697907382066846687530136534632837946481815741937620620154295350284380932563345904144633726510177800611951790431250878298814044606538474701064227373555412349001233072133083235347487459787376279403703807888154514448002202951245397248869293062600560134295500105008538576207064629412523316530627112626565186270777090318018659291403078286535004079092813364057772695524445708298445548622123608796436695854008220295952906804796979613002284502190226292523908476214322919392774132723010892233879221455324852691358984021386299602980995708394090452538155116048679915227979809152112372669411580872195011069091512211098837265014358497390191374862378298332979828589280675262431318918898318225215446376722107524363251975033827569456312898080064881381141772242054225493451609900958323016634712370823083984626439009976816172490877077263224311036942854664827302424290250141379316709351675690520061130683735321311996496187247021962293994184343787870574057794627801215642399757391689423643087425702078241032082171429850853657783936393491748921202257137973536585938902448803265913705675751505623829853836767351048275120136814974429359820277661179090491547020218952518317240856799497902090061811729297871492235273099451994560780849999017077268810932708025581118347013333023449244901948116998051103180964193421409328454794534892399934923614215588057091032039363419930676743779898364001040849687155406279816603303339546771517073573996877517822995705129876831722490952428194724842099930819145094619254525540759400392691443317175946185255495513754986746278892496030387565394365588879946177842768690923727638413659745835806393996818031833024802300235446835796085570745553032228525815450531967652475109305456596317989530038989405999117072923810555284059845086948523349452739911967441605727895585516463617479813514316281381343200540684480647554584918667587044879862223471871709991329936110666394849738825285286263958437079344497666129723469849274424451217808101012327262154782486868475696579972204483320055712556519479118501769492253109282648803982799956007070413969057766641895108542980107519788443327966941933926975271423626274088356029953637857404994029785121788713172223066847502903458085949291823486875993171596694026412513484348659991282842807440540512919421580435830982886747148859097314781713081716943137837514388166635564093209988083853631966764152001236937201021272205337526464980001923248970935051413391014325982735295720169702781387326630373314301750994939700432204266441734849243617137063200743900861763556953331088533375662647974513214949950360582587461449318953013746171392411021921268719401083870455409243782703438717812520258803044022398736843362885510789738025682748439023460396397947226212022325837892155810227799539254487217780142395057860256227526753652355653439544898392544874518721260751136602267606533517775781758994893256983747903520154900084664232199826595227499066488170533660614570516974168882282194703476740231831764399346962406995812197194307712384356275327126581811963829857081764545583491933201665655011341750864389214260118093942175688349922926371415338795911538883608650663492494285079393689588623801351274317524162255546872032205137602055977698588526953067919577657802157230724010580762546282119676770146073279290190567417587379003247680752947289021207629278566655115192835788767007491592173561216460960732338187214850961468821550647703718319006714895171928841330718580062654702438419600965779600185378625085906358134551760230035403561105143710833508540322391028617424456041890440768192600260326521458091222064446938238524580192166531189004653013760970323476986163112729146041847368155310536930201842388100514907989986285028152232579121250243087183900990150304104081116859121286448239243348357354426439332087091013606470363706785376906184268755539296047766065167508797445567080041967876599818349026917276210630616917313061541554664359090008971749776374922888008224470479856127371383520079697079481864438879042548335953589849253380664920899400066389165030020576281747877494368823642902286149859757979430259416772186621524014692936483589683321666232231917198657382422968512537393374246432506459315712945887280161525313402564412785562279688402776014658097920177207595566191984505720566032171980817248093432499471573407422741267535537792190907867772310470192246974486242409294991646564339659296311172821487691415387361518368358002232126427175348186260983285915013630462489800994709039714768490653776139921591148425560513222581914691269099627882433950238366744049435126864696551517102338574990439051014288641107331775276925590557112123848552944123712559927798767656060604001870745831020943534367217710806627918743824819528778901432361132400874522503036881964803363227725213671319249255588338379558944373081448848288914340029381563870874199421074704225053940653263054076372331153673021564933861085136777463657122583608153245145603654759564012552343708794221112376282396672216677067893583529685387362866085958575144207549201885063634649664356022770450599025073193635589697904649689742659731140870664049705909529992131119908451169523625982480852065130458048303330783267873632661502527296193654564481985949017941867590637521370248661759842942985486580506523527905415291993129997589693562083571993824525692390012764335534053818968643292421277387911598443675823895632044862101929611888494601135784807263444029447043613253239718910969875605613576775133853633741165480175557199106843404370509722920321859723309901527892004815816154454240322704330590162893392597841258761159890728628197646144967822207646701728736399384331473403587477868423279416635027533248541770967263778198842567490190381802603584303232553124123738656775047738687142923133780711030685516297965124193566037052352262354539607323266508361484876586175823446779222126520889533051136757982925713629289751952089225590370193731715841445105382621870755409206256938181565226769507387707852521144122034388075830457994525416533663962455970297774911851804521911035459353309532169948020448427333167113803415885128164774439258952605402088109777145211067039266101515402978544740570697381766558881546774239387495303310021282368800400514079555621371851412626774730245176141487171901398964327496365698995566554278753549639947813610318041843322486236707793661756645237618569985152051174050866426218945874684052954853332216442206370490833124972712199887443585954028942543566576436008194402325554516608853398435525073932650524074286205850550540531543625550602818516054893310255606074691613285654709269754001340023163558376144694499945698271995324998769772391227717778525548481765287382012664202138451078614644891981447633443984616961062704113987629899385435093671888725031427992000013446048294556079409188916356329263861385119483041778470111323934672117382552154014552689712635622044067335585091419078549572685722517799853945139066113116557823200991839478980485148139756437276310315585052962711094520823502876017799162004452308825294752903780143322159163359216776682795639765675024359141047188281889450388835463485151185055730257857244956639772765885901407478608833348764219975332660938410968229409406088016572970425472041832771272378171279797797035736576275270098485254500981153781872753941048954786738308270916748413503252625251966120660459010356765817802826429045068657112315950170987790686087303575594630278186797170965451147353365942405760693758157024450678772714436915222715682621542648328393696771847903632197735143219253117775874065572827559278669061592703292357856712182245702829796197056320474383079124060345835424419150979181507698302000007069045583234865337926621992623375749971204642446990777626632490383499047710478578862245179305716165431024544308084192556089479503354600043311566543487429471050399741986074927517309966574629189828300270254631391989455006206141157242311958987861149970781306061082396476609746044799676946433313570016028171027821734752039087742788832856846639871795304172840764319177762201671679871703331176399614205812745806594113056822213610394374595550171039503669220580872124167464169590577829197969856928840564473147431728291951743418213909020891248139717532829309139307324676418134145138999363155157666822088563424974605011214474234561958644068385566981590500191642959522021800166068563481044756233678800379514457696678176805627254751999892080533501886765304008355851853948156310423934798610892860385518158372125742586604990037334390212148772332920836540413171820995316460503362722328438872099507648776358269375088834055987113695732969353422819649914493670628253189886707685826733188098490064699162769196462197178091601033240633742092060902726567598519786428036312494443148817711021658763571536644924743944370048324568741512735789195923635121797799038653592749525637165000255493407622344594232313502271601912269778165783446812278845417457586538145675618091493526724848167114864548061108275777820993568273138069570417876796279053044809083376787522011494624546074909061660691640637286419682093499212330107661282280374851441004473097968359669954161836104289719705649964194654369452812111646977860340985060266188051868138264924697766217093257796481229661635130361603763575209317631745373236794727193007345895568742625048392643535752017720886976385547006530147162370985119567662827452345951611661122285345274467812187128152772828198044470287829483436630828621443834283933061869973426636841662503174938088958731532564136006533111241497517080811026547277241069801619368046197038254330917315025484354794049944205979487352155731523443985515670321446995279071915493012622438463701624086676046991036641665468428667863243481438144104997475129384407937791753089800722213988580814506420181828434464111345849729424096408245260118164415180606108341818909452188841412079787980645835501934806620697807291698253154706727593807361760609508840206608172948784237440941360116633737918646533724288158512019153861656684310632599855068395383404299612799388078946939439804726113661786432879308541638420957312446608450673637732399682300434221464859925923221506390466698969039225502809581860888180763430173987356554433665298962587119505406649522644887130093859157162141940270620429317071422670076888270015287432039353142292463201458311748039953024013036300157681289307831534247803967378524151269240623018079511894898426335179627535676928729840275620799295814291986056942345428344453545269535794124327345707388409443474582974771283667398460633838739913858003572434702047552352950879994724952355013458855725485470732726133558254542140241633844025957105365419313572521406256164016462372080325523482769734126885228449084718164714605387688663314237773503394896942177771487500288657934065953470677148012467516329412866843212947650541393396631386347555804426102036080289255754843634434329602817459750576423199736486570021428392611373877893467131270574799604435726228651959220155729187266319233386485777943988660811844393451428256717646755716254300083904773522205309371240685190676214538753207966844645134821197918259003182495235479846985293701759492154378658914612708682142567444147095497018617281359110902117920725531122469148975703268958203323016883831569236133529003603833362202853118400173131984771412931859271574480640448580883928197270433178482028973090531595725903261739123015610187695736065475604480716148290769317072346477291109395091443012208320879788331725598789382708448112357055474285327626461197894056314208119696290296871946392825764203702558293596084592330063422640815063526516709219894586212199245909945107086110527318146202939164664570138496089256131319667582023030903220338472809679989900075966190134720802260549733743988009810716784814967132808315697037229066016638783617803049541403814297797063504097571959601223859618220236460435365468876273616964977582199141192717139286886479366882946601855885523540939542911001721165181303035250295757804176416487538695267810352135675174637329741832437202038317518501153696331084859275436546896784758870744418504221637131581695470043451607111498383586197039434557677809493753161844551986777183528706928317708570047213682844575429346154967850073774018951110599706445779164048664056208523721691779348621942136050587382152008824636852587867072370504325971481960878918898595254980293982721591693440821999279481942233518649498707717083882102011010920568111932250810913249902342481472764561569756057047564387676395955386968088987048250789547613391325196480282398866643140635374540815498886375692701566620478926327386180090314769809070586546850483645016414930149011180928072625396135675547919261758488905962683028189154974348858839670607559911538799594215181566419664461648293512903197378392772465968575275924040207070331647259700136865792916743805636460060225022009555911506758744722703329764833376608884035244776681807079272059851958248969103955274321981361055653095030882610383596652083951976626946931369787729556364440715932097751242497500001584071338920490837692185167860605115070019549822090122604643634410262326319800746320962802835287034390354111115865790874939042813949509988832911268012219132145696181195882383952958868481795589403551825711445660055304159790661413008365913113607195310961659663716376009165695349750905934408643499052196577976419823962941950712959992212234788580725813670158180525202141811656107580848620353789727923453309609949287741837902512599149154339176262431563817727378679677652789586189907215092360394745291315315178280769752824178866136127120364844360843686570666924377391665188451950415163418019008550860833335991205615992745172384110734413150392823334652249716284396986055940980014856009188306532585605420519999060408247632994088479770891700298117903439944095625163759805013608980060771557434355471774895250923968185127614872473437277089861855286234820208542123288985527978805250685814884921559427896393702833660533784695823628880970072319349073259978716833968468179590572694799891627034479004070759376277217793391752209577997711609243576249426419043330333248714674522314937604818018967788378992728856961524893134453753720792091904689980700491208047979392621587263636601034393317517058140153695430456108047489091988799433658727319727603208464797159018320689274278962431580710268611873345082042650017311093587316737506047072564104601699540422208265285367519250051097876841814985282642872180071842394128862870024131550427158424470800953331106953095712690997421000768047945089087663231635404628237322206056194051230418812268915485268026095537420507465353167347945777910402999486556725081524841236691353551068809229611287678981310879402131425967814033549233559647486789458759659524816156257785428046357885788728798334726449873717622126595441912361442030013584241365584775303418366701542287195829230746483209292971621640713714120962019145289378780969314257595128370406067557489678645404458053687082712789287239312499629853769537574070273969474157449684007131644293612697622540605642045541405898737405461999281923424705046372116343888909788638977762339671372562117660223660695670784812600612056762192717861277640703396725012445752647660972755926419081291679166524667260979795012933256505922882790031660146080407763031478392867425713264775858816101821915969759500481246145397674060323709892952582602767900235601067846724543572473980966420366855192885879180614548283832841466665075996354149725301338358519169323717267254062579184541615446217563552842801325876467818631048968727579042055430766829056006240108948018339677305715364169866474021158726443045415282083577876330771922441471903310208177751083536690365995902758865071635759854772834694926455251271950341529608500788151798625090215572084029028380951507817448298079939298183520695590038747651635996543349440728664825713158380373219558529466057128032322906043454271320772921500287417319365976168419625624605115776262120980985923226829065963505843252914585540909170419599634277050723038933433924966297553342377580579351310874515911272119419209407790850494402102776888845698141493104421164929231199034729805606023201679897060290278578720809957791951623105561111133441647850732477421840889254450727982538571816636875200828789909673369478549612505123453026030215697838939324904100215648041600048460039211128583146953718878628701163065895128903772760366897751078368367149449860760323482919313636639333077112532263506484449628903562140910917184883359776685061477491947729628529940226933346422619715834114167408979784271108750432262839890447106483996662801874672678069833459187503127812301867619501888954744651596042888493821496812330875953213277829557379428092928030401078060596211030759341486094758152719531736557706698181800703577011933959623488542790769609795754171725493159747905511760096118476672312212214368328427513637719899441014615290328882809796585736312071114005119700172543463579423776006423420286785176042602478265390069956838609562249314263338461011350408175605961013927967017552360420813070363697740897703263694257754856012654337464403965817533944829983303847137943128996206061949794495555772350381966455640399658960314931510072397034602157188468414498235332005390066923861865352437171408532901795023023963305004538478595986842966576827375616876814560462321033161451137536544148847560393613737181536328819284288283654494839769934062928897803037442335381073377792138665249528844845017487627988924712134129833878665284628767176241405461020337739105966169340002371434437030992017569093264600981712234552096820682678182956004241998659956895146005707847390853503811705773368682511571235504699508351848211408274201762880277944793124322084314104623005572039931534794296111644783972369615224022661119722029047041665683970708585749056976393919847203913389066146411665473936057926195115695695372679013803092665461271109469924054694941918792327473598367085225448873229547450901639248463592556312744455603370397515050475356724383915330376573631292372402745732770801947701519132781347983632063172159675682339097266427478373480515275484903594400622175573994679551026905871042323165045382475029142779227145853127831067763040180729594761438319420585431546444900131105212053283280444109163920317054623845778114784577652681377523891236283117469043861099922393013973145606449737426020400959335723260763918132824769576181564972959353534565137763089779652100094511330446364797507184259503543793453450700361208294282937345258864388186370815590043966329954654849125677177327740604000767897331162108194915690616287252972595860248117617268977717440000074061968313794506703892623292525804480259861766805425912512279877433662083855611776315705013366749522257941448775139795054547860959739810400803175328510521654357751870807142781191563107709530016678215888193691287437297082541468231278653445347712336543897189813930534546163421054102145489580924669226658179842336331091598641340097439471837720432580138626610040040257095582924562504785423881749020155620716033485839761416339278967015865325282388487004257267088252026526083144317305666263332820011765688760660248950414043569433347527093520428825842731654779513418611057685506312236998762941492403138134130278628895223957785888951153773377278219125362017598290832241727107181732628628969099360075180094934523410329138135442828417419667660450020302725791226991835309309904350519775277169896695751012666612484996123705824658061230636549341946353772353847256502559299230059708672205806258078192365971229407426411100522203370801883360978801045660422495415498395392435169201553938998447359782907217478259097827470124954127685902024144358350312650572612101443964768748398651928890056650901122614041238234484827589365452085753800901291898609505330030279920549391725529609085950104393364051410163218270357861744280293822046879547215661467548620526839159988042187655020925238897459763039384102623956395291728187832665657676191301309167658030267202643710625509623416068746532059528983901144863435882231708345398017370764455523600539902232933592756840568086521273281265548544166869155189217769253547646162274698681904982234866298619169147606728419531849753765787033118972568320216833418202898103877938830638735413399030740564216566952884545843561312568965256410100307415769201396847369236405710036800927520184308720379877462570422389272530968336374888153750668030474213183276584156135282037084306452805350387567036817741427086657772348793596448591205056211475960654991794579079509727749744145381046319701859330950696301434310162412623394533581040768155023230373375367951934091941241165048796250062129299057998101829846308428031549873308933439874652060342146147487112567741122821920746044030465493346166046949934759667809163747600240109859253313224534523318272414115305989077622667597620194386096109434183389241552231538271746064990361981994758480643400109172872094736135632452901332851948137971314553706055023957966448686966821991071157048343122334001260237583112954121317179044296283918200831396802298468845835281830105166394193289527823526663377548771320675672435904302829506965065381751997283437772160841249722003409268884062102256196782344983409233009570294135858257059097270907739258344911489341204245278111169086281184455973633769673687311268585203110806661036758146943995527693971279945008388466314779754691489727612537392064606860749506761615404385929028920080939532208104450150030102765923748624515319131703319720895752546614973524876482149732609293236236247273777247682281412717649106363575287531179493828389605764658808933368078871183171217047349880988574824325448372362610802218446169817070746575905701523040744440387553885188323723297560118413455086687428020491756241547694681510237054642664561138533959873257613324391861408301343062755145453231896143425698238618820153199341060086040582767420305271235520616347786529138839814469999702896131238637423238457679536703133536334614066610801078208632267460386521332681908693272437495162368891180048919544538231408211021882239835055241719820614932102560630354408793308986702893896750522314290296683540293827484505905300023101114992678464105412926567451101220289034894056181353733141385555104182626617264287068129416704930481819217760443171667541407462632641111979636261208100709624085412270249731273141538595684501410362538480004359104643319518414061525957275846423061937152965946901155002156142045064539496986370236697651210737114979925333838233483192299783546734471866931551536263459780264970260754449708918898646840741976940696392398098349093164620481102695289878324157316315265067700879853313949779009728011413535569426979582389581110912157244737931259265697284970217655135182755148621789122423740790275289578800695567912194172232381437001835055296422752802918477505980017007907830328996730968596231403288779932382828401789209564023214626352152557846773852252722874386407429775877571315794193926987712301114758359459503977627104506796335065315210696845619852741005843152072857586021494712277348477454941140247292113886806982524284931523693052325966127425300967746893055139725681250453767381048254515620100529385732505537575705833592952363980135107610728887764666569723973048108451266554589176904835207707227061181003264797909809603964010740136778165330131636080406736628862983444586970582772349185817537741391488455814718914037828201228379025106991928961877954472191162771803243900838963413363540922360099635689809501854005721083471139343422463302132347161478224568573755012232757654186967083217823591384926492065733104917127987001845373958949362819097899361570859947150307057739759117086549735298283819946900303841606500062502318918356952336582639401806122557399912051397857458771314546873219089182093197569434149084560114632323348457092797433851092597638983214843267901257463663134781314617308650305690845449700988250818658679957942716416638441577123155235542071894931406458086716314074927818884112642886658753625509830302008526793083053660843091515069802823880052816971852890353005110913111226709140643938928883849361969638411929899250818485685497351413304912979628343794926690672319498774771835144880126905945243021432825265901074072219675205421551379944471783809347780511228363292693403155051134265892661797569449245517472868660920599174127187787266072773703505077452795402984339284890109683702584921296131737245478223242813633895009345139605954330605487395849639794196025882962585218410041041429164367732771713486946842899444326395469338024741363056416431094423601582895344849458557569072143815600281853202226854482541926313966220609663653863085267317512426610902406967587585145668827935607177770167562516200765317627419446873064701802764040551347065283472151903752719308428159105984289801003877027690073436219093706923712506639592307178568316033439073153303229391098307418523745556949162370839618754825331714657520945252013875481051845919728709239722269244770125576684572285165138692025972298962448488064282487593614865073188125074142887636760634331369470666365999529301391916359895775328977931402715320155854718004339702657310779570651367343411980684708960460486854085813610752944735823372229719711477975083318919444329411604351499806575223073087721623022082458857799250279934773245731569510756715017313617596479814682740942606042680619141077209118785093772744481092324182153082120461148314509548822990848713228383587947163388561905319606931240687609278063872344362746752319253909833481608694446649396658474584472355022720916237042652989203977511744555535046390355716747577476430768291790028136110008828218535184055926064540415942043081374080942301716267577776825913761241698826441242707207132111082549055297779800869982368478064129006255786388275389167279944085935618049212708094398002773133828203282452806125310544290636953095062867364164973356884934487769366520655412414671998178217851002471623636416831521977100539461389358348201695611378431285352130979354332581354421771886107996693593322598686163173091956900566100319732711910014276847848482784607549460708071287982503797286563627735864685203387781411711447488662580506919074616983249559689439820043740266093359451795279470837398893812510457712164918416267341168526716387812302708234976506100956892054099586007977404466522826031043604785853756197203659574797542326864743641930696275983938639039383976918529453645314080185326049716458396631545041942484131324627562348361695524825293457752765911242135039196794110091975825747570795386505568799966389696249682246280342966618524092015699346105263218024163990791087132083482297903130763979613473913387176208922928712094682675515949616267443388284705478374658029384543881572979624256705070684391120324441805258828422852509250787864822604748651961772908816194380783959811159097025994482453404926919796944922483742026319123452985413278017571278566886309150358857124522190490885881345265863704746228263588956571919236644608937090368268874303754973376288862484085353465640115041462926017035394130089878665138771334776409467909158695157752579971217718909443837122861551887220981191484052592382920068292711250569816439601772572259768012623447983369317370268885112258821014795706180517495609583877032038048223764780202857829613900087634097949867241477820722398981112549887784310561560787017925696945478944574899189450789104776948969124427698064774021771308210774498675118083848377140246948789789200127922544042988206918987941080213229730827690255539103739275582043076502307615545309193623059515142968291118529600993950169553663464472074240224949614572614109928901068324130068211147114566598653975234575260644389185930565044366393116001108968881017090742771477265223806396303581603252017467829710954822985343413521574441176308265778385626082663160908651082450850219494390316261203030852320657614703993356424039212793921477017152023812702975090180642248767216176787186820146640075049858959179489141898945811981166766767170808958417303432764811446543595418634015844195047934691554050223561608312574096058566460662719383507164351661101386660993035073313069955716804706013822525515533056761110682353978362144060302654190404145577230935702804278403687876413224776226002198161508963623553291372473425796690649269790459891949449662734434497162619543058824618041217236890350648441493035341339677722497236966734545138008331189365802094164092973437751412787668677178386372246386901815475375282245813809318446288294605920682942075072774629822880638169371477662359989082379276962773285629649665570212988295554230364047191993415244940920604530986966933515031262488004170410349415695604383630856473825495652469190529276541843602095979249080866386859816410557433030131120597006919307418842721380676606492045017393675143982663469887726869561867405220787200566946232894314890798822098147226028444874947376198263353641501588628128443875786381112926797179439990922916825839092357124168749174656866448968685552166470253991097450460836745665776472567072345311249003579071254220431847829346190277916865241513339550320580978949242251407171309508801142462524615167545251923953553812812796260665256935971137006909979688518557390466617284338472954227671934777936276788589891063819758889652011751278052432598139972244722591673113941914651135780718062103411861458368484552768493818792461621795938862063507451763056325760717280557051015665570040719485293645791748867210332743309567807945264041911552088112683723606891810553846521465344581837340337575816983786603970147034983592476490445618714709223745252830335030049582105783537791929412139077666889615999658819848049169039429437562782426105040077835870008683383707489836861848947846519033195580928067520781916779357919581684434751406228043820330757395441949923732785636347709074020264905031104602407841853676929169108066940640934182483936811287487300187931038293402458787582994845693268663457343886526115370317989144981530950100566693608492368194385097064324657539024043053941959974602378726196174219543946708813954653192301733919067704673869912462150060977427632515602398636678171393136327767037299342951693778873671329147637095788215580934326288840911910852018852545035243020530629293621139561443932574144697089598068829122935731776730489045717358325562473156966942186455302127002114022039974608747779644709489115244797796589906384418770997189567851284837589695124739467392960938675720763779185299900011086163519213780957046726615385324925492817408567133339731588076377367093080077926628622522134161015406886491016458182682593162761762379998002418582226999896385410590275161171583552341286538648885208081413890952551752752797152221884999513693097781447598139937479799584372915499176297136232836731630374010313502043942856037083079284572855603421118286922603912225520993199838422159918448395641159089305976756705607255697017154184132277599592427392938983213868915348765539995943077594858133294717775720439621772454892132175003496794944803486399576292334316087142198570183000261767196592083498937714834808242405965785655310308867240264750725084240104837398367051824521123066238391904852929941093000718163245431136851931524669736901982562996216814232339219187517362249544143838108073634560101557169614027499080920897378574498357297870125151949273252611161270439044500436215339165600634590130638837538406159637912104127317075279667888957046588281010056971189276119613442952242095845370940420408785438221448450917300404499485015618821325815982156305406684467854915034867591295681736123801644123903472484880982695945490420745637844789016272486813545684665580677166106400066529378041174791179705123454191196373928042558220338091435619540304355802434014630796745807381153118372758265098581751614693253118459658201085261240929239816470742412216818546733542986999607169421929800394326943465975730067446356260970304813476771890576978631310520918610986809549213489461855270160970352221518582845449240776827108303819094494349973652345765519749649310958102444092065522056161957615174661219101969136249516408701120946402626071662270491861796002047372616649580878748688354792295293871534443385552049753198229230272437336753678022532393043874055184367911111756841551329365459321352608483315813334374337310568596237612671310603149703958105283852010022577250217733701047198419667300512304972779175103484703105288038490648270726239725182927861156936432252693896147533649924016941277794467332256579075124762539427709667169335313670086668318029176967310803557640237231328476703794053310311820101309395685542141383864830782211759227453232247222599993480652705495692598122075926249149059025080339063266945367639035599443590872363729278907201041022180650203892026357573097811468229412919246771523165703253446140387755383761517408100583680263192942088900969832791145099411098175243011028495152388183916902688052544899401372205613020195513891997531637831222041877674524454439472945945212254095374591974227370351556447699278732972179879420749801974327671114047748851166038416940672866245738532130035162815316105688928284265191769628703870398388478524535797061411200689742531616776934946758693566097915215363781852121921266589221146009676114370113880990427548952197197793587964394675135785553969275488255012991794910026117762758243938305646893882803367448467823194897238658298949353783762585384450212168523959099319015548041035269244644024724153384295951342588169331291340066513552922950611042664665784552557527329526991222642332215088273248516866665361603520835955238201517248244853520194287825971728930306223831381541107286874995748916814798772743186221871346550267849457341258409383121259355173215564802573398512742704407407353903309711766205739603005850572880227927179705863585546462587859618635376158672896533233699549913407067756479576671402085350179079209249233543131557488175982125732060048551988337610948620176856392229720122234214910003609592928397806655297646929652255915926843451405045566792524234905885047768125291074726237865711707059430190638416289880363751650390879052030444196453432195347346546471973595196025067314493203517091225798046431962802290239671550536465115332623149980169153056475053547607860207391885581969225821190724446164347656307844194594110576792306538361726391459536687379047485098306982872205684718711398869858317294785706246042607703321866399929168556274085551900157149582074858798858927963962886642316870029583741380775822184803732565395060022164330511870278833384757665789177983496628191962352707765946493535189857347970687549875458419045145213049730996897937959794156202605143810611598713734230136901890281412728525398320287477523443561838173293818292316049345833632539136167226924039140406480460644135895289197019166310421168967015930147894946958187321911099505281897711988711986440711206781762152755466176871831112451052660929435148527879081317378330218707839157868046840119670787750254465819236549430724723180882781380800498009997681913741209779008348640190124094824911594977145019009747796649127544460467428600868260071783252436776499503307448874271267037441639349631669659614339079901183854967640661714971402324716688608371364540073251883464247008581361272298946073942177695211713468753824764056219306029960615714963478676063271289460377364780779908789119694374694948721756119137458611220931626554435268407506342063623259853423754193831196822960510641939047408041517463239276398036147791768823711124554469403650924174273895189888261773301296597176093238168673898602284494223265973033503023529023169812999040854518427316573312766087472511745078594697118939720977713302594750217872938788577622688281692810911636801747417784941249725383961109844305428477014392159551331431076168788988569290084440324079103589355431543999281199292075106877733449820167248665228704540250235452159420892950731047234328569696921783329007157636061574786939467398213664407458777725098055171191943136064714165161316072512894042066104560945492786017799288070461971906640229475346422951137664902689538880023720233208657917884402752519306741337770701896574672161185533453422328642339907867753444909885936388031154743698567644292878171602323173273194876934667058056987393758751001171478861250884636993226549158207023070147724477550431365239144561160487466568984511452077444385275342682659058686754277070638882719331385445448903571853607535211471856374412735709013764283377436284460290231937342006032339701827707922817442089847588744750494996349517641320120671806850677834301397403339936324196914179019238540804491813927635863888947846261154343056708076375323933598767814935726758167789515936496642310804474947475865687661340840217148070121244073595708069268852618981241845239625501954372889470019480473741407998604411900951037029193441263418405020994094303361480076149295100962624745446550467217847414473500041749715164653532302920687277804823616802221784964851015064347929101622179630648327637687380603612754752974970029149053744377497534328571746960809258496336943458129317117108749110943530231269560651773367664239430832362186295189004611440592803547913033137146900023343642270506956296218655251529600728827340284662917217550133975294701804836435603468062751800831292702336291596085862177615293016738724534504884272841122349359660602202190360922370551132725799910004522848934386417702739100885687810909977641047143363695788010064393522909865656672138344979003352840989665576735791189768139643655400593235417439345892545613635058062893557581403178518529678550854034011830876857075004332710375269005275398156726238886594609684164522894656666643117415552255406921470418708233253877054918082927050214470427530282060399553781104384375329931827341236247969602131021426032878342743245861195045306133939322074780233254643933422730663181976488755094378227681335718503138551807719931614750344541719384731755237076027863556146460738410843506758494102586700860138868618715321908492007126865589707875689858105219292094170543344099565493690834388075882098724877634249396705111127634773665575252350634275462563176731500256038365869233021602990256900032352927488655490124416903452271837447299576242220639010907061858064097277856086727174377391537703531304601984931766854839949112775796533738980020917645130808081778526229854568799545636474153830960355056110667221970651174118436424704955422926114611808924206118633986104009778463930878802091271348693806759042132848977432544907839407229894124083874975784340941411789865437199229987857679079972812278866111383228117434403231935742412951943355777337320738797039792870381403337389249836994358066884293071110536418096095489031736481868834142904129262251299674149240088681775282677536767206682131494660086697105301879195912692669752737013459414707875332326832316805520209926198362044238796117915453474668621065495507685425295760656476351263333253557053579391889347869918730826586903927618911562012746134707451077209085361192437234954620077993720817707292652708920276099798204463859903235184577063288658339775658030543696920328358660586443711471963490741241704808567130613058265648429056733041283618448067490882859963365870952030401758438815166830096400653200589361857914073145024511257892789282012220366162507932778645783796644097201418760841458244803535271505188446325364600228373038329001148344983727415780410763608177474534085659766722855438779553141472201463883660140533273604776967204250729068893701780448002308249402131898895961276065230462135625138814289282424482034365894100618732231319262029630825600077324878984657127034891232398030151880850241090275223242683618285738275138652335488836850092016887233957720005123868359875312327017035129899936666445612378536864845904651190457646440643419208135324042038936473647725455300569901618785250323245030220455885019543920298770089651967385349965131986410066329735724022730291043988913669457208725464761438891007894401376051232101305572947867492280324821625860898937283773095038586551924151489767910591860630091629894310383726671100588154173294223723532094395594361641772465744163614789556332071501898580910681585287558325199372423177803751934338469445772702432876660006353837836703326676911276499512012962582693758329854966142867564873486417870035100330795449024284598485149429540972856737011140039980827119239141453802229603530372324417112527376064694011108981738030056876113314966941924915704431558708610086023561762708054622649049338521931180300209671257547211129794234628485633664404045197995878735616750046586846414924027073838323950629857186400659775611342196592070598169552997720795851864641489120086666175562439645778515180160384529046359837419156435243229978218877327828099325455308008277836672418275750435346665325739671985506750834857577562045612641496395264482426347660689847274946791804353362366051874308617906390474552359039812115785633662445482431920223051425348154020780114779718873485466160750066983756633375027947280911825376031437610838390417455312417927418478813239767795436873710212137850412494991847465160047196051375938686881233218288388039855640742456557676359641088365920800229589580739998212276979988060059286433886029676374980065493978457898258899695626513870863967195189417628051186051143850527902484536697960050092080018734068164574345216950905142467408231172362206509108459790789900935688249765506819076585037292263329658400840334443703911651918318863206224084506177979352979979285550048957452854769917110802987647100565140080883702332581718307479417361622995966993017794884062651434505397196069395116054966387078372208286495937249742717634708016775907594277259435004301089035868485896786714358190271668478971333623690298798338050336370164705382206735887598487705212548608557462124012177788808319104211003460062057906595584891542518494477419946177808481450736030647936524026490478748604770354459201268694152330901493672916895616887540284078399037382994770715721275703971619812251168155469894038647837135488907360139008313193339134501666772312541329083212102053108202297680534247758836007215220486139071741091128638505452260822036101738481918768120578834529930885032843468332338214627474749848240644896029175385104045688659856645221426062024389308831897432888911414414944316010763331281262581235973890151347909426838718615554968270002332886411059869219763135610736692850809498283104418349888858763568626218359772693675365334335478813100341812132988089348275392076257605274171608160729989915222663996382159687340262377596184844167241877430499467266696525961873922792118255327000888738216608308731076862754700201872012123299536865580913664556003609198864693989255054400782510467971752863106194886628216151529602069027034319849447481284632401402237915640524566126561377818427940870089696647162768112040175042203777960661383494935285891145967925288239477168587336692115864894200011358348022914538241180031723440081229178541616281104862485893862931314781580929099849929790025723663385256738050541378141257540675818027576504555692856993175194886865046922723986839223166952291510690890165099157192201938772180073744361395520795773414273656501934718321083650656676350516063046085473676585281605009155309372032971540546011226179858420919660100034986158006779424245268971529623483525659750103449182862259059710785618881444488273733830185781054259823531070834521256848926296318580901514461365294130225580731088689780519225535627633596308381077143519930759854675257282942009805297410267669201305522661882855813495497652520497056053749341782487262654372295554021810241157615877726221411357389852569916914983039078011639115242061369651371401013692164044884974391754028877524959096257867901994221198623002816636508756310729679857551117387731256752689642880393660681171598157168842922124970023435776343451437495070027872413143136382052730545706647770154682968890759108065134153342367104434332811695524280188861318426064822703530749854578337218868094306156272452304474994533083367209766079100311153501642596737484121665343039295709715162425462481765140610641555838017962917754230969231794114357430700387322717740738700586105183786602763547733814371035174551077017360266838442258888747614643313397379662416429156052575407391376193894937027042516265648175002807819642603937857799995239621182362330573252823250875082493043588960464387981115975753794299806069252212548430384332671093753746804835254281830285779599456875555812405004701236669125054076108557987921717995111107562970578244152387726255085686848362480641995183322918564509299994938762357299373267298403967538867641015301737963037778935533677014535475081011324338102251375453801006253492365919689556561806644926238039334003165876996374577216681658198479696434174576239983489285798119562279428430558802982138691171545290362097942755344284308392470149696692385008832170298237602126371562027732535865155136205379622116039954181782634415852155025443272581908624586124718784401841161075490255822610513885381104394407242095324645046737970945278053048720938057263899032107869608840684733339344162087061315569141541690358031957803785560435492216633041206749563324626493755605530361499281079517131761927349415342519441964635054465887408014195734522524559152447637762736882907199165483902875080669207754106332336256502832340626975864600210262400101441051902364927900090207197793645715907214990645793468082625989637516323092550321713708619296231930612607825968554907168407524424310608239531294860686660184589407429093110615079805651419178750377809588496473618838710537934025083717492051238501689615871861837795819859955137418083137190691464237122867857076941113699916940827867146546635155598183891552561999272509207582038186215300842416270615518293669136213077130202556885240270140233207568925519285405771849714349471020896876819018560735591774498811447805373682376709486718830434425059480764671062008087684322053388648762910271810955868607713741226069257158205406990492338283398598719259050095358273501618694951416638366242854951116180369522536621635584125214368967250494375705502954384661673054380970138541985618333307703413139071875739741609451613880135268595475819406443893674820007777916208203877574152238813569011666641007250697809462612754152291481878329339085734557254848138124936556185175334404245302932807118460919917012991472799316658902876636875604608849255271382448180701117467463509579827179311312155647669973918331820253398718845511467390114875450661531306595628856340586820203397692389477774363747053287232618196637648971073255115453659333031131019093837523754490397623506257940717326344758993739373009238759217149207727342988082941988655737337424383671105894614626266075399694177676862204501649525445460526198676572751698707949663525811638304723613463002135975787275725219470228977700513200757408099214966882862640139754551084791362693587493746696253240644150216789661628399342329702628214903408580361406044014865241815646434858794634740793744505042692975348467389001436204130244618877930798247365606706702153056279968717165902109591520761795948311965675398848465582109509788726131456674473360619242298493294306142893529140284629321460464139719168132403285421872814168793663610126392388471464309607701426225262223971884231211723241178528251170093721871534270061933311595498730543615131823936392577568967539517223475649003844997070368418613474674308765914208900631304862392751757847981277864004326705435717501130544568703269262181355349929067903403360424878045142937824589905520457189140714116930371407937881364516096680848055029622052790141508054303412531022029881056493817180956519513504013831135447586861323098418168321323757426239151245839501767790833857439105288430536520736402976318014980944312078301338747341912237683935233667387056271874000661136024717667617300205568593418411197402206628045098944517305843697594277739425160369909705027815638484482958311632383602361876126761221791635737974614019349604656322329612011064354929806407903660084039298666417004372296693731604322471838653582941761393122932124245459427083911147218652760745724866541400780804430839314587578113265531861843024870552342479925640847791089732550690026132077594543080636376137051201361452908792574156595525593276359496205983398608460565235736958415647552120820624337542814051703358253495253346020518449244995570377607785573434495947148424224572744751333165970865223005975038198457701646057586609251267367198979242242018515250637248688088871295146174992472816153707592002816226506493229697005533132193458466936497983217095620954670749188705355212240606036419133669480054626067267215568269605394789349499180845560667795288877079118365476136004044472585959458435736732884420822122890055697499620834968636670013561346785109748994354356515605620136568323207434115673380351968083658867696759771496500802578150156205511916453484276295580223652617612841420795331185687514955890841972539396331337316916351046072476706623699657385491293952910671198152781372078025150413035333790575059925316323076926234904691078439693919503812227253037319722474445107099146554139139585293136217432533683023927670384608882517657875687679367688826802695940687804841146418106685395001137486599604050942632173426026287127546531963762849816204839507096419762831052044956594159855004016940136789708720248178961350768270834378321868474677540495878377199733504049533538772454398417964054190556459785157395626879579992047816425017023482764979268964008018829532737403651620554211646915489164186182798316074919088977587575253262157720481892314821402725214316039005468056289053399124229893419377122172234826209868816665230233616502919564441257594581002453851979454393138900571698717665775892740867944879706667133985387529742552504368290666490233018000734096980479808073945050477005629620854568828395501105762860460748314986895073828914679474789748527513182033344638134277887902612963472901444517018438143417821376462657187420280605697389887995845254366288678659909456591066483923766921200942698991230878027491810036505479997723983042656597143100832318711397560932673606500607519587893898968006511950931308681524097327560388960449834255195599188432513217605952122193310060569405443670914525358791994638454429432326366615887989248283154920673603470580706613831867548250046983629614530832844894203115195024594470646988053908339618926329288307421635764352491973317395839783857928097959775462224577413155778815280270140280183489248197763398347358664975682943231645235787590879860390876066246240379451402426464566223188847688056924183288654691332901016380627219840395868061686735569710546245018166634138876378118656412460912988305033297231269719605327649849145386179128799275341959272146560632299549028810907091312356730423946815705261442498829696311632781749438332180642260451002539535926743011856879965684711808678271008917936930854554716587677417568858142399652272251496972961508077595477789735977166069206523904688265871486630416729839097194434388762595270762952480989071480850435073905871744681266533585665209763017293860317850306798448933509154741534217851834293717229819114541440577969862986380475729358654211570390196288226634588777383624005694618664604870482825275085166715081846966912011861668904757769629316542538464272966966702546856591634179170709790375852721660931710156886246555638054452364617443736259004578487317781662207444596091645029647595952532876958226373385749776121833977179892556808444531368422986141522654432213299872447682929801506860334099132784318954437215905328766159443181948841547946909751109178351160298054745607824597883460815700319418238597794230052904049854114762246201612608843569776717411765428764240033085327597705212634848400300748421128101784787599628399531772422652689523483453978463030948044199270373213609678688893993034604283598130447131074079839261197575844478543836718669148410596408518698649459932637590029734297837119733638416379734691214400231064602461058933789261762335312910074998462409709331485382264652492013791865251784211461623485811942971957458982269248373677379612275941200724619920657380899508626812125097502369559452314833258864413444720065537952020975396495991850901486731351518109598195687443139747651552324013557805886418933529947085566865372077889287252337948184687538937257038729540045045833436319085659052025791360048431816233635756387365413718971976625464688697596872128350645949087909756974073666125132452461233459265630928358888029908714397813123863792474307470691350937641561754523107565386801177756340991837065258690416650489911759226201293310124738536232750688214749827030955510983784128325372475161469965488404257495219056316372602483751466340010554492025083921368942015863898425791246738845851872718854832637858632363569243155707638645306391476136889149752807275946394403861412170215765362418180470323040380570108221370431503601899546230178315197685525715751551466151447719649094281690954346804349549315803597832004615651346211887077409928332658606628047657899854892509258886520396187956748336897332390926965463883841175378026821488605835558124650258632093049329910306812195104846742621837268128757419047426852922265868309214297082105469372575975176929180118434696948478735635004350260201072124473173510817529991708783527540203507444126568487182014012707333059916456897528833512138866463890054511850816447254550449860466339675370632744853836099597683423899729790361675693473167044458084656898049689383627760480335392379511841670954300312096099484678253036901110456621552286014981635335946702031364827302207937992625799382112541273652331824416795506012521275422939402357983947734074160692210440586935413034290060455485616966151091517939235565251322529005706626616399840747556161292409265342001828229214224771889207206563499360255538814431913796473292313626240757295374922151541505481486161439447708184391503375595637129668920933750343455058857906266102795051632484347517785978295775323313411556403338574996054791232512815178829995016073083615911762912807140943265709421880676954040922156791249216105364614646174270237019981464259861076961147343871418287024208577454102744157251374605807559652989668103983522331773005856798736211784358073721485893715199859942143076831892246250938439460795076346481880361828367706783175298020954885880573255887648742217293879553030687797055720059330561244848166263936991471959611810810988600032990009574880224663426077308171049142086505869148868192698897864934503622373256781630869980093411805561454357990857799965478299502781275790717707902607222618674689348285072030524157074910082856597144675664428920309135370902987523038654736312562578641361947882296467413488060279839437488088867599828236051930534701304652672217445735590772535403370902678093448222682680053593274050927198651958864999928587927875397210715075391153809797413174486913411766000980892551332294603430136868166360279931872592391424354929275993507786607438760277234827033453019219188269528949249774088459798992834262074116509659699273948423691240298934697772845831203728284342734080440582279279449385500813880860469186297615049748852512933782219769723482671459702540254235044536179822421216874614525001775749713947605392725371515410220051017826506129249370210074713215702646718970176529713529170846693381051341914295151409449535274191100251786675606588089286740192896220173361061377707404659207467549180382211210880569761422139184898779660299310669338557566288780097323071845964934545679097449303139272190049957007922314583636747895359566529361116457007403202909831940409008408006455189265916040115644007700978224902795314347419690556022233793451243422812163267353732124081552859052790805333444858580117846540174528080705596298960709801527940509275683218397940646245808634695942020582766084267011458198139134217769109493631186188584034555691133503811542411654924031597346116788156563936844605336064630810599891078683964173599911243401859150132908382095509344410768769312197988782293593537198007096111765417917288730733276028826279830984888069336133917241494472894000984748321005289428136407417143383750862604881892027565094938513244107402464312659770144751611495298642336640575468116437589335038757968609333810029938311287642384822983177956957457919821467535466615144194479940271281199097752277123252119610598482866706058077704801683207381237291016268712673697468663510162172182951210923396488561245335863030883344219370043264835426428832682045085253755391670342298510101240791652815282178053877948977154259387833692525521791097260735254755618317567726589263934090236977898070488889533001768033080964352020515624465895005372854060191248104423340744299475277063476859885100620036971367756235206040881659896008808970295379153880140188652519053561359286184993498714652572977374716481459400154748588295102164232072066728177279872344476533302549821537503226858890572258422159433131778568064332111856079614287771157174759861565675947119039965526059445784239886587228092494363643338630209966115619657624250037371779165687655095648387588685585792363772629008898474154430690326056968717544653041367105232246651558722455468732326955756053401047309862796011602372894278565100868637091089758266599361238734206663049144555150539070595637588187554293181813486405153628836709662862512993035807782770529389089919949664542622271445208193476990560947875444134292560734053337063940557698527728823901527391674988890430190248277740962123437623771908281171405783186441817996291976810993186075556557998226961899670505172503176970478318494381174105275028007164338657876084119897513726133620867213265307058021024183986849152145662738263711400764695322920097385398830140165112304853506792641405855223258965232350377597738969524234776253945915473091909670635824951733894422842441690890589660074437808252302182164094347365335981091810165325498936236852670961537328994524144662622431693237259802425553316465647703219931940096947383304113797575355299426165435216249264901202435937549720565760272838440903152626779553219325273970382404419424587985859846781540788635587515948941100411778748944502650203511973915518963080129984974652062938675447263343703802103216183312660101358702610588424035217529640766864782156402917035720017055514736724330170550520652178702579779484955594393385996288966604084534992808757887299465721086827531800822034503669206341119390769408551044063234359031185562305536043937417842317487170226200062346072656604035728764188813684832337862573503838491030861586594880626236663590941386623327835927321717242261635468987759100931389908205337030770125738718912435770089268772646148830404363784732440617363888102030072243083955413007193831439679970456749005959094031979836487634126392952125001974832070209779717836871185108707618032380023315277752035894893300486819522695218370814949896932469516548422492744407152604262917839754341539982172145176473319158732484361020100096843159572114232745239469462523284332950336060642864278383011730314933243463477469646126012777763143946081809278161847363459726085802082993954311369716895213259145683275933972210865623028510820734195492283984272237171447600320627621860145163832082725642648053305440108558000290856661858612943374585011721473586332779871910908665438633411015793112979556722608816324261617218240188630575982778748753216923065833352233711992412960663285551058869264633439446795915954686294614812267851897476985265416264653881588951986235110499785126886178087546621762307192867904079329799033213058893242834314134564638404027209296264546084794193282406062348821824423155096768904504497061310235195168378920891210746365273129740636575425724775096719685973840576077625549226389290134994901861591563708501023107317433094683524423566926509537438379112112112658879915751136317409207119917901667329649860100149711346557414843299024723560695387656137649394843018433478356786091791751305745282035536083934703526256356798287317181098199795831694546370237474853953650490965856766206827600821037559521394063663183057061934454436641882284337706578013703943005306609352594266289781854950351898955694436213541830663431623291621695983012038496943108637122750855537092780036012131708176091919272216046545333582484727067579416840034091823452982412452608419924000653635798647992947937057854184661089608239599508185063613570334829533970740227350035397393155717000491010204512679354461400115671394772335434139709506541341677872172226232919488944890308313364141651038254765895622435753193383680251800772959113895329441321721859304347096223992276458699860095587401063244938903631524427854527566729843925507208921156170380241316676078047203333145097818042063695366164952250125868882199360300793348864318938743538350779520736015874513241645425213979256676823982493109630427250526950543131849623812953265194125672661660564722217583709880675198616844293991683931488262348199697465820163923974650871923890267949940031368580963834738838382045223106716399600585770193305784153142999204994212344264185603545510277282390117483700082920984635953011329815361699580130063349632704773033869225243280908569596520924798977694322277132318091865693169389910910818137796930753149498399877281880235453475339256418983891401212406155809988252657479354535872175784013808059440368582374626977844863590704640726364297744401319292782694774852043441693789987538844035071829495800277347848392945872711029439190143738835446051406882570211233732353055205031785601381001751490539891533463476060914684491865795302793124812634292938729258908548785949974381609026349427257680016784008319822904823431224402746515750618877298990789566549591167421981146525982486041286695660346918649040893890529952835320375384828169153724378204160041109679640628149360050340719362200395015558988046003444392907438562636648996672619995607099011884690679787327881837494215470994195935009191107945020127290308719121239731563844162352311262518412437733499009201665458264015815084041372907673911545500186625364412514055512709567948836632239882862499529369150873406945635957430892689287223897788917209404656390186123754643704792312526659721911710831620882926714044399797932937935874846204682834735444913029508832604600747171792330300686670068879045983191414914556440968290589354551936445290932282717284780345437528663826658911009721234328805723634742252808426175723315214034767241558579691071299808539939227912672632135448482769304015962884348742552654461754813556572068845625918388293019201590573776635466348340225490519233570427113140964091080026750991318428149521130592552801650429338683804247951667750614813969302526367422406457815563011843737461106370447413823835929427571149495806735636579636505246039196761251582998379113194960798374548881126167046083541577264690350164040695374390403760483232487426907969264701730604605917641115872186492751601401540768096893232247106816237370071431262516928009116525918031071732149607695717330287664400388449004944403498864333360834519927216481199359488483600349580811081108803258488028117205380233106944766633970369772033836667500635856303866070883281834303457907185374443436889871019188538271949884260374458219127304807439449908032641760467442676895825187712284759765538892708197843487425672698947785306797456136861074026466056025262726253521599259674374717153826626922252778432014097817849155420887280472049764295288679353452257281475683610989060632309587905680120375957627610190163630854609626389444794718618646337790455190841902049220437390756944540835564472841204458038075119485233019599800644385006444878260393031248453798817756948921281426853927876203467130843966604509890604936184239397768012564657747251009692110704436962950828733238200269704213001973708578284212609185512288364053406427420303718076236718966075921928082423103412412810073729438174264930535115279310370809436535349704372122092772808311205709694838483480566612422178866540874830727924909126015149114122361383532493824266615853045739591845281785115924981801565811135432910818553666710891431263810106402449405293846623437189678807007567580086177116082086508543729472080209244417461996105698618463632958636895512937468286886682404553092230351494222523983785368113123054100219201694508508160335783567635083767105664768942661296097468283896289743762752819459804356761526930363403745840765716926799790752853383204561001290717065254048726204539116643589665766760207503852419405772018558805297914315650481025104791231536384841908392109956913137298910477627531090150672724521128080344094934375618956437285199128164017185489864055505480273524163381538021863534274161007995170494627712376739573174171577949643459882973059466169081648635125606820015220192986268562363724238995378028616673102128718868859658319934729971451370770952241624919178579880792404688510246051074486244400907290665535504891210734791442862664527925011154938086489761748830213420041441410795441427287670967734944140175009830148176010626330199995334445025129924805020099189346881861627509479431811633412006466439570334316748863076684188151895455803823629487713358007691599760014770387051723147876917505701098914898156122133031445729257132348607973498863402998273351611396186096977683334633642642475919666944082526369731541662808000659382179410786966504805500337258129350693101053207255202279770041500327998007405564901936828562060547815868627270776451890278957005689876700179680660140928575716108494803686725737227355919718772745097589449324636885629611882714228876922922654727015549270728493342955748787958683652293011241684802436474270400250339991796631824618261137921681148269031570836386231758265876473874785409074213192879447679603339755275165096464233516262846292240987012113005142402910732427670326800972269997556931810321969623075167947349664420039190015168031606911955116810359733062178050525928264724932867089085518874155222323826592938411100883237239419184717929853250063224262081910303242946266965212686054995542914328193708056213167768755029525425228121730715134066039136166913974313475237170559641391942930559556154768506208515234225281915601010429907045194668938269933118586223266628686524560667715561982855423538455341489501453565071388554543413749648778431986954572055748058525780086179666897015651026699461670974852804355186180055286280122388273709964778105732046855525585709331418308186257861378324726572970321067236186259757164365173062037174367307490246762922896153572456886183623969935172618995367851903065774032456161997373528485650562680301728277393976085706730015645692751763089210426842212469752577387265542210891229336053451882108895436093074719896835353915251316716889023128918198142247183496249375669742767821529802640336650566896509306560107164502860459284808453346020497140593686897163253179398741826121969231913899808762316510754425254214527198383609803492073431918205384313892349547927187330484542497846422247526867514548760491877160241712023567624788494434928841060712611775246913294873725213093415321346717577035639780758614167683275903632702235317671179998350358779664152708154826805626435810369727777705898847828223156530818093922760967429057841723216560880367472838031056702612438620596147962493894376430630634116658168081135637041043896498551610069029594620049986471482218095442076018635583292167262827239525881900914642855602062909618153167647301300257865177260440887047235966117406219906959148898946796785265630682107773324332816340438606462744761386084650946327756033944718602019303703826129060200685372385470410133550988380528141702110978409620807711997699979439215477794486894243415014562775659596501840302648309615813601078200240905076464301671678264357564791487825545492125005154563158399916778472384307047774025570427119515500850043845083569416806784433720974794127733799440155379312546033451236785670015641768344045426759121074314580788072339328233175418935760151263459569043791957344628793101241465836126365790826768941084010864182013856048108214272807421492723962155717422052392349992253004762661603830133636670865974026200369994082612122983027641984627467154924303293174679552820647120298635038596422626633367131070921212257380172519157892095091006266106336238865213631462749009201939446412199279992873912379794575302535380996591374368875867370683269214009907039303435258154034127358427240703569235722463117102489618311505265338894364396016170821820757424555729645751950938013045267030484071132579919704000383695297637175849308803685050271199402133951319424587426894270817726814085078707537025481185285217124747104571388430808225434616852501972955318332785066003160125045393202099220242221786632325664086168705178937882742242277165746617028186480005318789740910675334686262814998827237874071631478811776664224908230911808824944065082991981015553822387296404044844386735156296816936867251534686678253214752937639262632738482524494801384379332337480470709169945386371509647614941509343253879599228405683359341651150369200331627869129155068673882533164331711203264432784443794776075453809372085505973211287995413910137967773765035075707572416004974965375019430059449672115197114300308341296634363994018174330297705356895856527977484502082739452667191333702984833554618443509315932958410103837594032571605948350008824847778370755659616793205222944442367310107768568426622743058753667993503486152316260847004083332330934165984957571364648033739868094656854766500386094226118684316127496335727719622159618075553247931102450101054149694376997536689230943684015239637005008436776961362604652305250764577945044856588556303130337937637584568226098090221625852840065007874359290321320280588570788290885914502093892780043884142856683543161582956314949949293426434596312557816405452813904309919340117762606091291396350276557361466960427486323083036243880609805853987508200972976388861815215602054945816834928203725847667673945028734389184344497300002237854372859747728736574566265858956786353570529323722805481645627762807379385975585544049928360987093531707819283823266536710961820867633924800590269133451145478524723280221339382378445922687713943891845750409806611868670907219748024381644678781086851605483002667174026633942147115787092007842782089215280932470301448694378940120771506628624553222556977274369136892021197129214123263594672095597217355486420574693213184565388870349400407812238002050221101397933292440154429190620445874493260329716007771129191303341536040030592428787830710953329225322053382433402794995593643743855620097211156641499198323985531338448063465927345270793522844317122045095552926565677044820428094261462968855508105089039793320121397450575464235778223558550701675483599212849144814888133652970620146615312291602056113346547334646776467996624798663764467372375580618750128640544861527721799710886350650036297025492806666030463115163910449108678407169818833956842794038931950535234731256377643639809891076870027413672509017278335449342724752031217068013036299854864486679298821254140700140508370654161486627989944339229164887984150478813186460524403077637832381364584373993133638828939106376978010829730086696447469524751600169514925248184909347552458371906402894112143342913042425119075991498804897744279855393295019487193322201900767227385856948221965134031470815752979578234072872870864061610195683636663998136823702282925492401514502031130436657684615954108211084629706091437805772721273839178639131717887443026589301934722580722282264602230721192844748786432122622694374886983998153642178727677253887329096529940391620545690681265076676045454676208253215929693285211021809327343955990867532051223585898112036475970871713426656434583507474132880978383694284993881783628246832043836734870487600118712075146229509088907333216562883425010474157959519802753737353207074615734359950917633034041867497697849394985536732586580997316744690441713867540958059446378852789930297620222604833786957027197184006698392559628539458758277975628750775171072662357262156099911422044199119776211668331641095917636420244676259499477748560348602202823573665983770426282922735568820780900244211134532936029986419370700261488011130066473681600843990864279445635536649030253558266681746134732163994916058042638442347875574571919294921314038478195707704847242887613666027599240203590166042241934340471174690849959178248913783842199708330094706059766141282204703771349261845465467303949686774733804213775764864721402325034567509568877330744461204344698138303194549623159225216894758100480008789347237834635276279450652193595454415121670770058993190908223195136491307771401008770891360107630083958316519855924342524280718239245765071497107790470268951510947850084898361951159837168287131598618856023948505123054067976955802164238423731900524591132981388533153613275526318590113074530233657968268278701964894939858312848555329420551346758763412603037648991945626571950767817366711356065267604903640125757089182806339341468885796378166403252061915963576346584214070960520321235843301919111542224330257078627857685831760336918405043623623218177322286607121028025353816376982875087437289188692242440448124529064238399893918617384521476474527290475856945769548940414733949928109239080949364363998094818608866216883201409871009567794548425101533234569090375516630089610312693060075013396845329775390573341511572845753442124574506855139857087672290632520712822836898675653699908618283594666925898009548939833508608607260599779909008815361203081003227157528415246740299200554995948799831259966967806525309956398417425352543861623538307011474134635803745731847267250875746770766982302626792659921211234941731833882053196324508227865888959093887982719859970809616249967455654558771431045850598961881187639794534438030685376039310828691341548451406951017195388733834499617507054365137344410662419697760348536748426469448604793483530932640750916469203634994632111695419146368359339833746929053805269210488100993581075171407008234382621736446155623650688385406664750263808383762293216297895345148809644306105202242490456731839143553416517872397784142627170207117616546800488510968748159534050146410010900225410460505272717611800300176174751886985947613572282512798560845822104300231710375396317277094328371470734178310033428183218610039541143092072548258959267043864464067019986182140080743256758222364998974188269708680978061703088007330850301817979954406980309944743153559891729237589541344018176990147496150015837818215855483607900022663732655686300110093239694453332639499744272024497667341832341518261996223270150217325539338388475444196708640955072180280866107249608125454281286619085805121430852989367325716034183142321846736567033177166764958622722078083381202042487964418622425320574164505509217667075489286611913040599708716195534534575866921679871342975350542397202975526974957753497844993170014618854346782804011500877397090911335389729777688425147425653707225659768549265335006445942228732041557055574363071671478315218985234976551488390132425423807503054634266265542137826213300655078857699962239752567691950051475299821394882915795308134086830649337794708684433794705369036429172880274031644626953416473124875929802116738429300846368258041108589443155064127547730578769498657997299214316929898935573100095777193327343666456136807739936208212526323179690927158138732929201188422171096903075703929226961371897912656149953213489477096201294742738385902136137967167055346799290500698397301715510874102818517964855215115172099528516768891486769291346230843087259403358807539071183504277202836323683179078265380290655140041083740719498772639494011706018523988193688596387804837137717786509367084073068391855320094340208363746054252695211873108044187555617609150757296353758504243240978194894253561488051648399185550325409817923941633018831897300169815827459443001516839520793289738300462307725198142286148951142478439440317937819911800743416221271375057013264558879247432237718340532156058990251445907985761617469374174049678441215679716738971752972094145855349507157006920996807623674653318376939138922242997007311089636286145640685321012699136080416760311519093495183273488320240136224855610240134003134626860317310814142381469445745744312988970092743783644851419704393831404193089809870336977181337096190347252542337246633577184269223080133659191757033533670445433368346875296299597712382816252387319226452809710623121348465020836521844818866184432708251643138892691346300397967516905108567723009576758783140251278160521197786504211118003803877658280629033901085979269565501357187891176745582524331542155000436234325332651773064604028627338774142790245242183923664463705762075155544467497176172763469820054986252146724511695147486423691645218403742894405229905590313564067061881281936147158516087644390217739145563590052556448005684212375509470449959832354588039994963950899048481525477275883542383419590884309029779786306296038796100137911094697557722558499278494833301800755207967534234274887248989499965603683949638931118762378569545423932834137939138021647616118285271041532031479967768967462808938358947703060275473914250749974237751018161294576026327190979017858527604259806672994861552349980466179473571652046506342195244663206688176556106240872502147025613296682721844457249268312486837310823230261360564387698331214742713878609427817727747014502988707165820279954505779956773797633115663620397397289508489929230073829872744566111631572338222471484278324491268058258977023497243998988844939067198209483010356271863466864726221166286092829190808860962867602907791265041424348316701049279913939388016706714493232090945822681407566101660625138000793051663759617024346749625055889316850459372609378181761805626424927044621708514952079284031715105093449061273621226386882727965380249642434080605888446776533493338058135061734807525410509222833360336289595102939226655200812022605140049324644218351814904241332076450281003498689306907751777566101994377544114969360082451954596671173255725992859952119981246044186943505451985484433714684204234607713930938280777325979074551646211563456576877418149487019493256147325630113073449915110046253186604961336164705987026471007687253247036526105011083795161210599213425560459092290947785338107951611009854710399684225861046708990969462210054298677268685138827493436368017381290491823802175884434858199763060018402455043639347525831184432193636078822342855272045714074737369255993115783930109736819090487924888661206532460152000335168141422972804477193676562839111651217927275006871239204489224560659499951882162445251561519251541248698539440557530254984069771032438283335078495458321119998635017531513927437392901084739392972242542692195276630589584769378343518462089531228431076626920567680291911716197358785828771504571705365988485439338455687452361582509297690532338080100239588158759601890869057946746760040728484613767290873389593701930186035809192800969562487800035954203504649282600218351160276500359007615300515757508898779709877246512623459434858447146969974708619341633908471726486305914339279858862338017846384694050699293616338270067608418255741154878091279432910863846947853495266842413245686736164003947230214150059728260677166998592152224446922722452662753747553137462434046326231320967634891045845244598715834085735563556630887023572750027903905856709684257476157704227887757124631483082575613673921608702672850353548863884440900066221903279112207312376948419523363518890952580963345764362987689019978287277952578086509868522185854654213618794096811802407819350928688707440238724062879588975043085326106396878515638060391081322698344181591025607591793497200486019243990420559792338398268709614517166098033509667819207870694670445052964510380048754656246144268720559930338804756155067939792354864468392917295248902411941414395004555151105274496092565798501994597445334832292324136115789201898749628600240683858562935279953952763525046396599512968205865885738109875833622381771863255911903200835095037665281452075692485455860174792407834667524564755230285139131803587488375127641654069323952591318391877310092234823466809945560512533544279271701158598689104477558802992722469475457343409971488630110503021626875573525751934778139174961643122972879514029762422373759765314287522934382892975362750581751132453671903657267884376036661342843964219541887566119884579693381298937901406563419516192474661306516511725267669323609419087733340690450558165213454487297074862553371635331581087738855095802330159523967268648400713750438601474834235330437085390227380449117576988953079133406811397562588492545284394178380123683157531767298914314054054266990963190681914906510208311130377896728687657942468534543011606591877413631321762198303416289445543557360297724554881458955418542210450999122832422240671256313535578227419398806196547685103176356379705213628453476087647191624882510939310918226676457010246503649076887174058871800489062109983884602249535444174934077227481562851572448302453765047321847532378940907877851143226417167207865271313548633238344810072504878677344464081608772771449481960020157980944682498260587592717763415996642278042914584234546121362414297976133124187195363825151679773423909103521409278990450682793503356406863155407032340671391506418478690860575345041992163225409754423164352434991500264140292956147699696135281539726892935453106876852742287916824480432608704463478624349069682252057662741054671106465204178936003473244014157701024500525111785668386033963806047470587868478677866005941018778147625395184562630317637358327298263546058429323574557986170934591291167804403130173996890297165284394825291332954976005579513856860519351140890707453397241952980145879886978105344437928598187338219021315887361960592742773315472002853239408397789239344686421601638980426095208234422381784439647101937884365289752765795163630751895935377213417194091471158931428412311647990508749331887496749119177625623516517274409813373547097884797343831223446489714488277146796704707528417151005177758584705360452208655868043224502154261560328310031904546602778549929217020935777114230574433742647869213136054226574013575310385064398286790589577389246677367491487536907339515858623562466719142440369524996637703770985252803613777816346232435468253332516733074960201249413720878443642861735790578481437239478915479884748129025766655262300741908124515803036992955037147164379926226167619218381593549727846720152665688420845010280046156910091842431075734179979783749230883487520580468055061820398994057860895824863813246156474145956952950257440684073664889904226040560602079193578678161126084813574082600007829756702414971176685873724094152073889241847585711465880388970146267953322313509070101452690127057210105779022277343195276782480856529188340361561348550929855796859839712262320837313667484421485838926042660191699304201533766491830909468499432157653212172381580140823486192736058717317466163847683264531184832681703369211623877310612543643962337345035839522545922383698407681015377194206583397155612108653083191645988670212720030129762880942895247190983775045851394570956574880254102538475085951906008554776417154677487089697871874700602935649391122591469261263511710087692787102960769193239654139233235563061366787913078401419567070881356320830880213526970725503189214741870398652371928414023072687812809490256436240867996383840921607586376700609603866327956945454200216914054497140193729992601076381319927344795034858657960779221356583223536408862834118876504409798505054654654340618816822304137332216455898377580961438429059850323819755090293443799336410337513679189169504960056663576720505647998532197059594358470817219206875917266453374606287085863099056469497814288864827362802618046077223206196839764684021703896226885242604920443377925672122905761457061866837202922236817090556108848373230317984179859950962146699137111763195890862038319018061032059854841643758537559118461458584528636882655994870662977243594811242593731963776359913818723798612690418725118495457562018917042825869646026822042170164938176626617811529465195189729743965577948535312848582920828318037995320941088406331146501838211945555989460999499266195976995452899102082423620367295339270261124959008335815158764211599728620891355269369880777066243495576565602414466461313951949093817390758101911627280585346834490256559339783660736784597741875456385440960717762071157152054663841375517012505847417609854817536768451158381471816080654008826680154523338651980071906453012628196539678057912794047592200584891296694888963217168962672527132555070744099176536736468323874720058609140609125633443807501075614691579295085050547070656868116338927157780046853815222838857263960105057058243307334956179789792708461912072633112251197557082335365279102007024268161463397894521512991183827518360244054304112902681963889699612182085241809012781165396831190827645273329640058674414682090257661164073139455063771453745016860874539922946234522818828837496340942470763000717491170722821267660042795470521180204638104755668948924724039745847695888633985075452182680439794593084627425060093791510138248701420978485908934470218315026316537964710422414848508953653174885833202738382864411676022315464960073515324718648310766369966940592029950073626018052003382192830878675968406343999421251846765507910757723562376860823556630936746998493392075127302143459749574953145597189522407961223123553409134909993234776071487196398726480243384457525538908352522657598897188751829310731782947814194860357498926797639375692780897942649640984709512814089650303781983675097553142351844585048052518999108785885084128715673248602784852202625103212672429865661527695246604319778947900124911930886867136656012397500815427149001629595311461521909491378190818735821252571605128316359578846573762774931071481719546509212499934584164870580273389017244188393954501649198066523773617773603148318070338133033338972591051988165809681695447229880713273435088736826826770722034381291341169095581164119393086610843233071610442261294455334123815147843960365561837877205018038913232670227465189079832876850186118464035832178304638050199921558206268148596626835738621220408323149112415323716735712682952546582245705117230412997688385500025680894367542856812391925356804836843226527830989696461401860946353979452432274274964920385141721059486526602561621700757001951723017250514112376787574823102663139662690924447844096274279748103136259643012732398383704025649960014459222375208937377135086960530601311256939481230368773686301164318462671604583327430309190082530180667483584749343753766607113653497482984301901089950970913459388149100613517153938432877737734771821280254447470438819087196192237223304078940382387097398511730500403660027910360212920875397242062759420082766066071073341577474795254519604098132952303380378722701930037663925484469314023785380625108348136087828800437117299693827825611561606438539305841566582411873588437947478804984065159864435345076088007997181939891110871504386314503554946209094365654392650941459734437752499801655609105275249481281179902173573014492328741267556064260298802557836413692016016617669748043542306072551697935735746825089695874826948731881544269818023315400606701953197215378857346583566060188867877883402696009264891214523761321850570390767193931751146569912952896078615794446670090410139420800171065178067033197994516163258550311481959276610659074044524985800229299228966543054067588746481449229311460408549457355981220577363061921476421011073334112714243475459628100874153150699878674569108206416345365903297922921012380381007569387269116011092957834426860655788441475726921085179645009860474953277920185440079838954484886707511916628030508605658217777697998220345113976466651924617025416334341044221145733295408504392807954396151307885264705378477983896727073836856837620235140207456693911087053479132411488788790158615971668352740445806936367038922357337268462210096916521348168176682743961853038638673061119918119187716359164169444571406379455424290874419543670817530677676541875022056511296774022477450002728679040664986471899711013362194181815184472591061447488424875027349454680510566851684048259975803596168445168373243003982331546478158041588277779460034850719864600409493977640398092361316514907508342421422902139051990165573319189692423186174767104600600148134265471179386165793927640354534589543137690424787165731974481919188300904505418400996882308154835099253666611841538312312998231819699109801429636853713921345260197299766841937950906406548032602340054884977654139891095815240233234467133442021495220744851782237688425688959031252711264762708767338357468592642121004081137201237521417098050822536684007206712882631152148490890523814401714196984944804679489675174776184049404631094279956737122753825775748085792754776105710867256129753274940581094794847870606374893196903901621417734653625666077403420493919792655024777067311768016577482896998471910716852097033010898010186445031926303162374116046753551168125391955617905343365937938089282722859914768508181201172867540470665654742948597222563280678451402182626324367627789943262937705557087265579856057809551086296577566990613910362180278129785662042808063521713920147250640452588776439271155252643537150490630447948841296952179190073624651786379689854808868529795126378890858504242865541942872273056884845871457476143153314718677063731935291546180195217512217731081929119956154340451468735032164383282109523299782542573539172290016513396984876017270183825894574556108791029901424155246809340828709852267349158535664375031049444588500491485483180968913365990395654771006567422899781917903880556974077808484614702490694200671838213724208851280759884631990288078363988372431080994688444143679764701359755518252438059867085825863935412502662727657199067541943193285433812175474512578521148274909532958863395251951656595291321511692041940837930800910247884453729889188341633145491480408091982281173152722432780262445509782321678235044878025855705718538907483505898554256099969620966130090965658274503055056304302205589701600825504127756601491826803917988196135982155843447379573702413895350487644347515252532802411844463140907913400762357692797913754689226884736149676856077439534956014628788995262183121832769384699326248204543358092547676462813616252866002903472891134064144250270608421664146813965398780967700813244277543465345874410359433720560138908410081960804386664051419536311000388461950017124667515147440366134559808879788950521931999172295176273037788753694443728709322519027105308073803344250662527867491541720713646960403245267328210151103865256574620291837156086589496185518608531139968035120710186676603591051690907519688103777386210264556171179825957862984636184672745364037121364433025001866944845893062929771460245708428537857217531391554082579635931071315989384210450732463188365244921677970430073450551852731279385366659239344190124417726744852219108768490083445392411318877611652510551507575859804011711680935050414745944483162589233546375855776767002031155304479918355861115050998041016086837193337357975553651024649345386759740045299465443507262891914362838579825472072300373383314140809137622653162428553463542462300076344744853432331717707644082936407500448460168077342282673654690211705120825871739934721949817495250924250726925642789857144682543911295027774569440308524614307137969039330836064040018859177956858262686679114699075516215713058458238926200549247748286076368766901533212848354177289041468683550109704090524777537298208489933703135462881564099431841848525123082824584262118062924394370484670057600731014483833794809349939449513215416659281982338744013219843698812101653169164961442714143245482547387629724500143589118257677641415351286224243126644694731445894464907012370826536309474640534463336976668148365069960714298144682556320014978368933051669087408158855984456703270505669128365644980537540195891176195932619380439852108327520574536278469874845019532470297825798400478093569804309947662567686031949573083415953921209066913357170933142936795525992559921024120101313417481679563312303503160869343508168983778370718810001468711081456752658660638884619648395491000804102621263814323434264516893555329375430827852957296723644138547682740396981624166189947325058111521969662924312118815724801397142272873868447289013964235982967010968586926180105408495917618647401412474267934889758834498858014189818668698566257552425115133889558784816299389496397417033311988726873131528027212434926334053497309720298910228004908373296479534316950778781520725900232954876062179302157414640607899306414205889014396961918180959152949138198462355194937194456512982188462378681558730644868873850415529812634340472775726538865787580204790312618484890551873888725947776814785942928251702376169625542673210477924328163129048539475711728834200324746845178811691006259463580546059295237249941449674655889780033821763324072532714591843213015032197235641764896047227129055747346130958417293148044805889632654064150538697516962493630444716415940433176064306038719972147798773892848955893028582296350937617680827682919135911466714042777926514452512292960800340786722340541320649179899342782139190630921424731548524409813721719049277450147536299714482855123942922188882872165823371928562075908049597357931836592697073626866846662967056473414696012289054649334216959657450094861720796723399048221426950965351576190183628497897472913885974861195482287233272330631073272906238657963912961558017968672419636993357507327926654753450832552123516981295456326013018790230598241273242036157017241368719980083222349838069075595238052192860532054572107246906693777913015221780039950986575108200809776528168571461898916911635158704269356305188550156111768320987228764381341870572861116475331926890642183771521971835146026562830353905646181730936806570256764236706591127446751335707108810195680022570551336875595585544273574341544072591447472845400028098970682853724683437493734410851193196097453241753890472845085958747424602856097878528545187775407997154621177303031339100172669288976201057951121885825950956918526102107090036450824200069159718001599236330078833562106398636742717199392085787672934536134885946613681541796565247637961760715070517432423497976271253568381906775894367733653120631963151801986593531388967149711435973775550871188943713859848091954630234668612328899619278198946718625627630057172226198717255668223923904890768146987080707751220177091609648770120434768279559338063610192024519833268119705454153308595651538813921780342498141963164905511260143454931265701556562158264090824648351579043435702893453635054819012476149728370681444278505199006903212896548769236882909068546671150995589760754891507625492685131792418299782542728547778448453461101792924207968158552174577602546294984095234678192840960476386210024350185606609410667690932843429705931268359659552164788030824711745176610929643714782697763464025941436376119883442043651405819785395750254618094489169401030013543819259121122854238722988776519602373221724050916405650079014770648187623734031750235491964410642041932852871687936595663020518293155034697291267571007407824355433018154958785858475434507850904892164905683726569122392614760515053956908698779269999187649883835020011034268265026969018909896424000140656288941654229991152436190033893023874485198177367035859326595056483973691102528528964240238162690169769797872053924417306882145869496570622068064152567048641672910089034466482148259576598883675676559305620962774588428084766784414116997805736320364832583212662721001886011390639353175491376666606897406774841966431435260003955902744717191497660803060479889578097868601071357264140408520715503208109783638446056461520984027952828516557607719738796731794525772221096980949945273561032910012006494033523485945355873048645021280439047580017537220142423121774893185173329466211269176408088586862489556539533649460684315877915679859150495016361992776208222457743409154600833608278358758581453060018874654806158469935209424129086588097007658952952942711111315126687583428566179129561920536410044079683799872613222554918639288601507650870472774003701806254718086876319171696486793614727732979757046379755146280328266354020758820986430077712971580486344586381703953969346321181169192104636494630154711153619666625612026906439506854218786812240993780516646058740408377608389717211889712944024277671668754396479044681943854146770948657994287785792979803623008497859770742430848349599307423855758769983547158184688235373094032850678988103388739359527893501071404914173640804862181613420873011412458842231120289553227515291208261892442680444656692441590713999797893022991343828360615540663044391445778085139945599094074239762612456772578548076328639557450793670916499825916076795474644981946658952214795605488453772955033488494865214498815920404443957690438775163101524744668822878389148182995253640866407630244850888822773889814481442580382544887918223306200047057093191744017116590681555324789182407775866665100435926469674592435181453789517497170913007733429647167891477189372321676652882834647772070310297542094397523932163345722780599675988114774549208494809224706159973495073321478676741593210626463245533420320135047805255300115734651077808653087217338440136071977085011680526600480673446362453506269853330351107802011024714941904163599640702033334178009708280027243676240239632839833190086800100058785505242035602151193311212381125806324264054598875454442839222700398014359114677186893678295446859099994129657734990682460457444371064184692311755752541422151199708105198384237430802858411911034947006709981625809080232934922144135663658449085571277501979917843893240809260006508919841301015540362593229032108072689825169873993483717822344427052288062898849905137744969579079629178617645467526962720055032628667023552336797726063643852366606175531613341317196197864392121268769055177347789594578286793751698667802479410433905992805940732000255661814631962700778143239536096104701729340494466620042894434699772502523362436113819044501776630394960920395546918993072887803159200038513497548607143872818383086380817680722559842374631006953530567999908324197175226060014824313203037348268169926095288097144322551789684890648663457922550958843785072651487101659277551662918941361681291844882428584914633290399404985318303936955530378939063462556418941415029264319234049598323408367493224900433835477731924409751183050397065819857193854143426088211957823771085106209820471610682278689620969757921676775517314616530623257688107672947682658597173652390580624930436511108825021373017722979145548745526360319873068471900353622658246145403431408136194441206504994577360905054778745696917584830341379595574153259059234508991895104113725321454131921375733178112506607565288638393093800774772362121100123864093486021508415014831723894064495994297265569568730807876269888569731031755846775128444574553397997813792654431921834421363070757915775647019542518885598183471508749639882165975381022375915486437492344074425523139962629180384112629956456129401567847766137658011123670830980985007918997025977030110831796067951569965572007575902702144061044911452833206811316731088885223390097768175624261207932093558751202518412009102502007023386813814634972054308310984171324107369665562496654937381813957760624019775704510736176400350162938954403024939727373854471651438233295189222680764895418150428010246315726137001519913632525676047478506575714031274113457537113188910649703107854178914089554130455302878654582163342569616634049525997099279447905529226719538257258587393274130154916630672048328356066972804687652587441088521105876230763044801393780365032533142790361470708396485178111545244300098858104533794718403395346580859879503012075351566479135465214976248731740221718399842254842989306171139607700220638169440749741888701799889068347341403175965274567786320642727227656038739437174585149316301185870988806202046350716742616122073255219743263265181032576138673817502982223737574646083182965575011782438275471222775799172556149461261270904660505267167223932500389201907340426107384301197825454396941178367831034191888309584133979272805382546626473199829417047335138373106220916975733273156589158399416510189572510284174693874373753133185652978668579739303451944894907199782629217544087253869509690256364913361662649103302968370399404779514747755870330411967687050772107617321483418530312001893714042946479603145311350066416700023524669310259433718669444400963997152321649187814086836681368125870117467589428150519860600640710086475174958709157959905729767405260915067140443398013208738176994367507976640722447299842158803184305897947861652814216645807199421852517436374675233515223073367877374551529844461509573192306345037036313453322168768871805379018319904446550904855025013177324986195190433459157524173696890570121205948432263283565890164054944492494351263003114712693604264490550542501889653141667181313000917724453608551190885106698104041467588804923153077182674791076853804068398921227580309702149594473809868273473312340587938036654043442190717164560665129378355602095649072482648351965488556846296156897637715040962462010579776075850857781777376501426558909658580563413806753500690392254667257452261154877591099601883907846796078591115005269420617357121701976371785105596442959618559023720438391967628002735526981355323275637931672939282477623932022778544033100210379546063147023481872886415248211452729969152894850131780271188121472084090813830635493161325791646756216819484619434213399002311094007368175499040105370285459703462333608878126345166364275991309512708416171091252888271665752450769886751300197665033144009722236940513663503005517281624212062955587593905225204836125872420287156842497966510035381857017390496082026717117234446921374861682933593570817241106919584808267765255054877674327988929228526399335672320294573301001520843029197879539804218174400897658113932684317529388849754954547596665544635912594206180442533467344212032289410055743489598571841851117728886296883795457231078767117936640524239691929950908446099602437176001623544091050434889834488714558740591334803757508108213516471546244015687292725425961643005362084352528358998024484653362422817109599601827699239352698885776941029330533541192182033534815267864184300550859195484210442525809817478579086995239359572577878359857446016518293777772864837474595440203648840299944295003769029699812826670409448793305461680584150168511183561532408798094923463652836206847759544700761192784929675948448992774264756317901512710819515240377741714381578912318556683115599448809641013883431262041387895097129237574051734778907972947159713776030845364618737701437543788226417693517009464573693269163629836955181552453496432755298484707463786288236903178335220459845956025360838502442970340189970392285865395671330968107511680246013657146012292592726485990026067413336342912103988713654170966139605163811546859346092725013904046570958813090147586439690356080526002237067236208245581181104709820327435557479421048052102582945221727461079444883918690338568109856888473513216220902224916728774326675355246632875935193968645350659198408253015704540743454421175757722114992310792258682019154490386219338234855437019047513801817401966723441526965608853765796515819930902713986177822928103138866085869256177002823453937381750059810088988044992163878606494194942003728500483586733358419306065079413977546321632519557047405447758733069812177634710857655153708861398629124189882384961710471521696214316529809386737702792483019120104057983961636647935371498532955879072997143024922657859098831534282291039354692521854358932834033079077749660374347639359192129174608455854501478303286948350836377823786093757486840385379733704303180151630575572859840539517606670680890940314761502410867637720572494875842467283500906724147538683524285131521824679772373745705655291821841553636624574535994728495285140266712799463114681763773933801244847002709448323561838029381738291966632458552074655518389534127169628384377734519284699241471083404269760700018182204794404287701819691216381554007876115119366692872982493573130991180381561849948696022256167794093781010683628532555609969925503390052027633657135364055586665400097666209196786378997827923885723733291301616727422693871941122400000852137552752735919034668718884001271277947100817035228006279688274415192053253373855168093694549786789710733924396709597311514345638326570413189498231548126537259395975675283269228288437973242922424415919423396209042686615963781323856273642608141820472118230036648391889539721693265027529331515394513993428691615334165115485101112923744798941721691321577793251660840054500252718711487093865529781654778907992517365552078125868472676816797487586252427646134096661776029377149391080559672415449995426515067850638413525415089100674005993952074787337038441672320733134525556389880446580080915750147942037139997249753619127876102451083024162313175339423890521136479018002018284869981683123004832474627600914139214330016395652367362789835704364262039618514932181766121720953319121045210670266874090641919066784531915512931161152675968995662200513952927276870774262354013616729425606192170846845084136763603683726050134796690309333172432767501077016178941879137036576410003615620374169634228827967205498547282836561829082987166479810334518370009378884652334426945447921995955901150236225598284371072480043530582240830473314363170265028896465972017758373959256362854059666662550126674583687965776797215056816760067845756991797032721491730412298066456848713671526919843460994186809763222427245889347264252765604238690439311764137594322453250858384001622021750225328190551116273623414797841749098958001' ) ; +test( macro , '-717897987691852588770249' , 5678 , '52992561458966917842048333229403244806917799627848421877881735070477262881098520765035249624964340882038688516377409835187369665592703958080735736766945912536313709777389461793817187662953548213601180992839097018162700540199444811234129652849225410276267930982552729151588039493817422762367215695837880393501083343614940195379176805915010804690716402053261575165097342342740863670719437568773682027047862479103787981449864557595411550480691451690239227939258640148661525627569354056573032574365819474479753874049318092332197860174730296445988139873008708564407683788184545625049358109338930604072043506368501486476015294370204931967091112231708457059830732539826223797283205277978138098770871113585235612923319080860928191126542635460138797782729492896291235430456696065935768220494159845006073392139110350323314505384289055017134916876163400462621881373937156047111273516233295024171469513762593244072341275620852077848874899582624269495895402815765777547424606219477655639449216632626280672365511304216574465048481409555551898153578798780997838187598030296504499299634026846370222734083675507056188173301287819190008251323703160735842279757966250463716342218905187576189745969039286653568566712245083192424309450098888181155360995569923237384829100088794333552637537227162177479701619093609870600007097257152299648831715938521942096231520452892461541884420652580871321292450318548928985510277252222535133365388202103209163165539197901552072608710284236732915850819518113234646115533291363606803403675185089565146698511010652775061073223214261491866092146057590474879116664838288380912194992229955697790523281474198511681898554287250127257584177956384808694445714111240128709963424475982531545945446204678284012510035965008794769324049843450109531060002528540713991395046933182699881232634176242677648962206607631738502280973898290005462656772264590786129579181328545465308696435762205327818322165386961509403474972525469518547542068305372202808432048462319049469153118249646785678722142597199696100956128198604501655682922926268156814400446792306656470188135722009834179368221149303323894575881803165080171867765138413350984666824885942458943042705023835971675031330773162756179573615771369921528023990741381103617964140627847781113773752668975380722356219881474606884340999916287255829002765995657643610750292167091336372823055491725335254964911991918866523018470993631691434109295300263601212125887194770564215757107756618621927605011672982388667069376436126257785256735035080395442838012293011886480858182971214107329249888540878170831338663664497081571648293369670697492303978168090750719696674347255594774732019346186950722015778265861706529434650218922964570378758677250144083322218433388621419998372158607084870550629095764769864396578302522198678754554607834625544465903300910375218946617943281021263817868702534903565965515996857490410905151194367951674404671401634726316031502775424938708095480058006939655833612970659151929020021108105677362480187576212239598103259569657352323481949129023622185672875961306339733885857708982104417776147428446169851035372923120375171782152648094932708525562623063044339202972582525453779487351603066880013958145443211731768489287736596200008852460116803737486674746320357688425959700168747470090109849460232048475582033235140686903423628462653109627172118888613705624945389644912331260448674882803772456442287538433120812454253132443354729068891796527676701606716457913622114298779919239138678095658602599035272101050540631199171079787674726148712746094500511958909309383648848324958153313684693020237870128517588375127269029825997693115614438073154312047924340357482412336581044347428383345931096734448615207346214924813291025243318597445591410601657643923497289883965796840775243249869681469920755474682727417587202159996646531840273727959008935890037688256043389201553466973472089962210203795891910446649680901883560841094031991763415446185012636385884139521383390919645656949585657311438685339885917614078799309904047978363483036838818577158746493373606130783588041171423001575976326332942068212106971788178296357879590268289870554895714998398477383074091612380803534549439364991095989289183083877933651758973534265032552397343750530201088858666516716202042806877592785968359618297523122663345711107589355569471982996246008945010788125903082708965247233856493295495884971617005159683177020951059046089360849718770603433176136962787644988761679786793574894146198596283619577589492917433648008790154607904592377489003959969338300144125428308936896784361334723137983098924994947562038207668868190447389976840741447171621269619747614678405424544476952607756858007392925674149003932269670585532289548230838340609191813200074864347826444440499651323577336653937195827618989214774650052553204749548153719625554328240930029474674929792915810450109353297164695948404332144143911830336116561122587580838323433271508758381427202886466864203006769876629040113309536126898286439306875888068434906684986109839807912211044229574073513385256008653277622489509139402265793326372569157760069106457217990235011506430988742050031863394618171218562494463476850191629255740324446363242993320648668718706796758945218459365076583628726166585648610786131608405727805072734696605117814467304269584486848714577856278821187639674139091420868276683680482402061170964129020179849417226407523345979683703744990934601753619379872634811616761518185857620947821097797023780246814812679446740501132957939033231020697754175111520932341860938863741889626558269454453009814222388294592392173794599397585978687451892813356296473121549635013676249164244665043044957101593039072361182135678926932958876432422873012810178205318591023576753916592920079031115341838800740563121977641772239560122596720253059357199257880604788460448454541912874334474110048318114397597184518307140986163690693584548192536813827180198436161154497288570678489493883807773676094581689577716104059811574599177659911227887188217401978474514757553745261264218832355099235158560242297233406180137292308698109610071281861640728221129462482399191931254988997403297870669677165754913546299432301037504530872073067858354779137558761312187986108590108671713663509463849235645441069025317032282653619885664511756487047824929057588473863132476505639554060087119089853326292527491890156165208813193528270287317866931952302862861082174087615226626147432099575255480389022327072418068332438673738233637882790315683455450464590709105784350178739780127964769969011026088597219619472341103459382289201174496483005244865985320414773065969458214373055466663167449827644842719260068316989039810368349530823214414315840300587086860582920441160086337872788129994593466901398749881456816893076117420457023093235142704769500472838381750950452685686468352355934718793080770041896266326591193598230038726258131382339638465090689033062834104050137121528398579502285618016610064410178458485780348478662846002089852720537701136965653853259363332024728436379986256649234691293765971251875100216741285408346246009343410757983483597963489740851123818712786795291798837714819930591978286010640687992692756495314962784887224591285887831740631885066445063662149099404455330521550962587381135521874864351037529468684827186997370955447481995887639571571525702373403403761671748587109161571183805369675426792116895119621582920253789699657615500011890976403807282199844302806272514657032217062946033211042074109494896045803992953473587506222506781346147810525891832442558813747914920938494195556975736956239077078403047716108873401240720217398379985768790248880164667538691286461771920136462983631359473029704858507306794650707316446091278308009089124701630706210560168792994743974642056525288870381921514176601924996181921908722977903765494032218635205563065562888264623205077967964252752702442201464476030020851153648989654374063092609825139716406169830702732441666788603492696815334157061439959989046789065423318960712201089688946540796678378497252260148940700296093007934347669870770800342086190913566676064617891161093655936605836899446861184700094847166382869925437304928565010472625277681782787551544062045311275114543518096882812611825710549053207666530027825046311534181156975603474991929909024388711945463808425263464957653237271591373069179547100808683091655216330416092310214397175383390044315163696300849781070219134615015219064302516596226701912265613020932966925428815092790344445459519486710818501491744578229686083894654498423852571127489975219254353172438337650602238280223597768220243105815348527252142824365262184240072688609964102457657199429178311502128276669149947703560777240739423309436247534508874804401314162274740915591635435183346939875420896409168143366133287003880010386186641170364265028042141513465453408101841921842528837600797310807883817569665409313593668849776576983790985321325237847569765650823790815463692017963395752927945155773792906513914253930342695948572439951274479143533256050317996678589637630517043566370062714774155238038673228364852986154012293796986173903941816772421914136811088242656279247112124439226958945034478877984596864873339798554814421219750181744221681578059062457004925780474249073437168128231790400216332672320703915847426463055894401088311795843457416623717000078714687159781995749578194250354449880164141903126715398601118555657753088212238422071158309996360998060316430904776007237664213238747361809842176066931627956726802459178808505394046664002938285314488362839317461527679372532822934704704470253690263875879702240062788026418261529389183596155698524599722228817999108140672748144745689714554812265041175714545225389990781353970530998752805250297945973556929670870774946985404265424068777800150897438843100570165412465536409965604362377295700424297999045416603027704210682281919437502308628718607989662408388051610908664802514940396058178295301888644151245892936386802507105326053427738255325180381762764389027620113283759653480743839809992357496074117200755535328327778239627950809058337055235742086687019858930046083297050726069315089882694837254737886800564117843966144822575643639731768343937069600705061564770014386059309401600994691145418984296800446891914436526504588487235668560512126375658106759961423238985938919327850368124270203404746108520903433047821070462173699752058768991623911437121303926263567247275258743101051399711951304774969904872170431870967998534905416515742768485058006433022048620528364549739197129869684349063800961670793383545725472346808561542828191153302612521938569967207547584404136442698715207952729855421979521420559878331433668100753209636435675712543276009510142074799136997641192447567079334735530723873493925022491212344710076896739154338361999719913499831623432329457641993249784570344228676317925346610689759322653659928903365020471696174639950909615303515965200146660518282411647170608800939660621685552950249611706475325198479518423077155301209371280575534360462938867984963297040183736104969929190183531952577283379234782953108926401989267488044466794228043770347285979888837421775091151607628072534183685174245345816369526145717126891495096063726823540297588186575358585981265343937095373338996442251138594460569709569806492449609367188654079820152455364920624125030761646597005088999711445807387895998396475835641806955712083403146532371590752368935420985233735695950492134965346564198873831201899225738635547303457400703163201429850285547082772143821844313238723456259228759115534200528631507109400219431734564426566942208047195491924187286616903223592310617985108600082628611087567285767001840566153820546701939593194433998024938689773662808625697973543664837705457336677737765607746286815865891347597385126417092248398027369133671804532615511954414419259304523253807140857494548560843072982788068686101289767274829556337961469578050554176149354133487258534215364379154660461310427570189912699705529950514413147328168458631103249872388038937376864265012237965847164952284836681545396080247290559401291604967701175723121502236181093388323626875423056619719092568232717945805103108385877791944344245670750247392343384296108323807858305055418400741553693700502565024106126585636797090774279356316370509236531508263353733878156923208632989404619022265962263865918260332262005803614050713268964027332085964017902372988449905870060050221522451244273428597501098201640739856281753377806262510621286335117441922221183997764738785835690806964058090618523209727153455617620262903964419882379089412045613968114570967614290250244897455062121766814873521607883867929237291112681395681208806316115052463955424369530957702703335301336133507196464013784297392355963686577412082487656646900727164897539211910515592015131790757084187802478999731058868779493827694303480414208944059771372285831516411891131036856120211199256880755033121745020506905940385581282403448035169726911436826243069847201133079363947969342361067328363441956715292529385906162072082866885762473853872136917177105248829462003088491198093528321254844293731158494353309329359943621539173472646030822664165537362617032785562181639419716789150739604369299294852110605262082459555983084488041202822751327819978152651961662242916641572040409255879415966668785223872853617095739101441693844227787889967257101619837706529517298805962370005920305999407921230127760675120172113782634335023130691310728800481538764425860624015422603351785485421993634219805565282967254634644843789616543323341653341146495092459321686531162492849751882105121323719768549112911144880654693888232614646653956763580397332567522797083319499426431434148243989859609258432804222067142397999063441042035277929314828603521084355742771233471852499158339778603981017500121847933601889420815095445410655577708991650898864592139988828909325847690688265292963327637387564935819554712076627813142907683346250203958929989323689935059457421263112380235019472983111424135581186825910973214910699149667710959563181536691099143613233601161732666745012245211307688622118221683809456064734882630698593204467656990257941572412614139802715394281994293120883156362501711873082011731962032490574884682131178885924065895059613017568119400856466320056952350332528728576467215637026738604714597593759418177681274482897193349099377791845071840865476390482509958300517175834887188010180465835340333367167368967646066303894894949259012937252758312734808329709232360933894530979086189948266744307651572635781288044544893571461370440118431167905294073527312254045244808871450613885567599305888413740007585647252065620950569327491405356998305146429471623136661921767554001049077582559141269075807726942292324962879195004849835063558899374919319497877100701211206496709025329275359077524423372451805882088092879051313263439053059246113586757853983808973560033255079821096458791208111949975520419973969738539460358523519982416915144979569986992658895580772468544281855421641228395656106360926287526507440986113241371749929933626943002948875469110027470912266294656790428857661799285796092963253692751518091473958954584426686863281912392953724819538676197544419608647219428371546066604565530829571887668487791705473466987941636508397417037367030291035726974209122929822977256282776129310660064280234827050717329256768834139633843952427070535536323343517859928713869623513480175609016408364304241592622958594443056559986989106563619631715224662514109451710877519669377700137922914878226108875076080968720985553774478319079858681651339801277697214672775772710298769965771899451131005224958432124257866462047576738776398467445567954900257927297206412032651048753538257470550748950042956467383856098326990699095531754983730997777376855850204059808381527746257418211558497066091371508074576455448794073221457106194028764995140574406949894779285509688637508122002763143590113564857465357157613251821223444359965532981305922833468097064802147367022534931051008695237039566704201353988540866088741667038552935423161581934287462404348346959712557410094417500120546248110357270320222372208679677188804508939856387875484398668973720610306440393165985553874361652311139176073072642232364301455756578533325673397255829115802632064375030488532724282480941523096056375612516691335273199076868478063949077979981834693199226789642526467313758886727034664155374708233413052241176017997770755357925454917422006910044558649830410441042783912087181440912216816911418077643846400706686847762348581058766312240711484387486718123588654129529313123730637305855816034535443508751239517641963906747738873083589048844951039924094554710311263734798500241327075231542378920749258310205825922008644493121370590192760015148501273427214461014155067372554805948839297269789248975606338557054691632614937241901458805041012227038978979812168094150773239740200926858206670986309560725257896194349092782159293694188307081347049188661030610107456715733073715420873434056971119630761658470234370438116245797515154771525887334083368102698399109278569996061959700658346646955565093203139925211068688479012109279872461395639869548120204532938913593022473786111209373901721432107297071448742770742412159279076830118439645403061943303917551223288001014702113659615663577592748103708841776873178445568235386839518530066675979433748005530615064885650866749177914061788524262808081456736332733040493983863214714692393115801670972860894965741349096171975727706157112301169070137414347667759125039407153467452265210719726714985635420293189470049637210766042254751512445609291095350283495503549502917353512206358756772848829158151755615008365723008445582823523075844725615067686956618810366284960890688672135540705475984841760373827462101875128799270857413282580082072800739904057148821354442778410810970050701431502851594089320392059591004827037030949407048303186582849254894900004175510461919883551638536839489510245449220044773071872011316439740663014720019722095387628672305811492191697738078092246616407460689410223935009608878423391167281114435298028095665936771603627090834937282850979762786426899134362341889415374040340896380252725754909908018401107333556100522040895675585460969780799009744922983914153517048037312468584877909733205649413029335540211297879068656419387807383048842494215387689331649844934805491180381285929557990551329032335758734597115389529509449814729908343459195813101027114347572133759851590325554983005153111501432758813072569701126690781490951740575825405497526335840722010023321789428374242548378889836216282253171286247053640123351326348638420215428018887341486150219038345363430704186782773219435948195386840643853198799818242098668338179745226151996534978279230096399308636037991368814207217507069935928147009785676785160027497317009001777550195024132691150567507011354412329032340603521157466518995650811670602491853174280204852628446269615787322879786482369408633164257134657023953228812362587592950746528121453810577970418765900895068401958324820738606431245080063027400254319882177028368653741793457795068935169938691425211024828792631933230877447721276360612404169065676636411366175986321744222814400246758586497722397143948714428396712767471630538898122410697568130170950184011778819880862316215372642601335542980464853249009026580690749759635033913834129498173805649521698922073038683841857811453879318495594875910979538327284780569733959417673964124812143583018523970514641401891081019284489763221082086325354879697385907787761049442665031058490028534622149846137905767487116029644971254430227080575349336243717394801443483839458265798732710051462772605466482812641037899172879970734427748668316293777647496909333662168116654868712457269032630974156741200422999141171874097340818602076458352626593605494845936264195396202806647904404677157734745652872270210704027405978135714048673747336292778720101960923698684395527092073172044177213818544969591585627238532808299570223371536372799012875224234778370905326852914976423861886454350497565400489482872955448045615907842220173649212448684979945647349079756570932865476086046458864652043811750235877344393220429343034415180297212581588145608747445493372426999318493938150343775786331056194752510426503166230913186538526760445807413799806204051029905931303093836872257279463684631738363832006044614840509662858475110814261755496445327276173263161251358809092006580985277059802629992110919876640778599238851224190806234298093499859897877945279235571464696627205637879325947667945367188005248720580469836926696939939415121732586533901411675573681854304269524168392617282088535658385037701299391440541334384518081022468387518749703363096233963804922423094068395126707285054702218861778016173542392815212283678372323848563282862826760297013819812339131493327915541965803998097384090951244169643369018641096219195430772492922432677413755019687006516340030964660067215342977430274756427296622985672207880091256161463966745535322513359262081324439248033434926360421216544044746832762555450035219016309931057323669695525075977196214861598745789848117118689974917406963326147153664733948922010644259043986576126492884735748201429479293157327397169116086340829373474447532461009810536262731597451754627874681161347317493618449699664690398390949643587566379695090443777568885944452505841199312483422475407319328641366974092114345516068535284073079980141067468263817385977308228962318323609469322490263507101669512786080642752319574742157425134152748843756299008728152305538809501024125010339213159780735824709099108882350824446352596024291069384003047531175618027373859127640704478972526885889432610483189753615050833681837753536005311543749368107499347315534545941713644730273702333948596900145557971505509367959108594407502948243020888234056853650963187076323765146652614211207546354464881645918117204811380635728429776867963381852884230518246631190131825530206787122927542913920281579736988824992521073962274953252144927376468933425658712672597384028057932228407070530265731165980966598601076506604289064934821557949717410539761505040873308406110474412692271216992858783788017692940669126619626790274625702146919817133167454141020585503777417647004018422961010432475942591656281157554753543866527442721860074055221343919493702427083052905183704806054896861313080853192781874338774353472175893928663360488609634784890485560515252214309637081204987618424027884591397424067625820413547165571090593288097729180898304860943714385424978418160835850877717027658521907629768814727424695191227358428401962885565649381238098204936255938797308193040643227676416950981533713051600283871175312807406414172316740879617172963584690587789848239482341701897688268557616992035582225306531638164023604262595670103263609695362798739463036593927714273709560324792380672245014432684528132529510597382659551239028729153767533108869546101650464606517031212471681999067256252173869702628620955732415793090541749027540473718940312552425322149119344958406002437705982398992267252296771928467559404038212669370252790729353944780711661881552113249584403769083480856475063987837244029373948596829428019040641426569984762280646821052726889241697080032561970596779105934595957656757479131467410030344286211442477923310898646446342650046369081113562118381113974544065289731235914381813526415129034466320886690781519982064571162447720218016309577515552126698701486349767343461948090842618080712299219097673966015228424172663889427342731020122066675346414052340618598182609249461329861211149036514914521730088889300616712047373574894553971526437268977130623792336839865094059220733603108966045443149552683777916379609517221061627320405151444134819286421255392382822364134687682168786843209394288411699746863444889434411414485519234492407599434325668997799101520066221602884158226756336984242409440361323534712903377984364440121709955882861088033253565408769726596294534478786779815095706073686709431442168829090896416212535563746063403950198043478906364003836786350526095004964058916984298874819382063723661497266846181942426357905013650755458667314604787157987764491101741899567408074361392569794087507924311908229702294763769391197478812554522186741135262551897352184690374471893073000220162512552332060179402611785987981834888043869118074160633762440696320006275857520907876405364367283599977809702429809327633774811777287837997929063319088643981288504577794563897734368357724456507233435413578168544122187905557510349163877892031860938380863700212457499941173051991635044055263541028899765559085615828388330183855986870987907204189354310066588413218192874980402116441641033329112521433352585269389744561428992772734752313702102338324264613628379476243754122969786509425444725576325781027140066964089023790292891876331352393285001370386695304261889280274262043056322796927733119572711356326685350484589411334123538058781520196877872573359539914258371620972518600167848136853804940166949001046871343046124149316149555200621260500187812862150026333455832936133319251080100944562462138196424435420637124060278270301200807655723626316279314677989720701526760643271100348145148124820564605091911779855169535418882307665289900355017573800822546237397396616805582194694056466899912723329771183008166619132092740342879643527581402206500436271851742975104495236263710329645094452343102310844177958838929699065716898974352408381283451421410089914102753296005962431058406067303947323833242313152680641247938380343115958860199956778403253209323348645070739497071952928327376353617380302386451510499726403590049039220125741769453186556766459550919922603305625386150812873799214104365798370292908598658060494523919882837028108696230018764525326479800889430827403509641329404504108584175416299778457550149516420306914056180810908889377149438217925739822836731498632998974190671944437651733816831832102819701452336948218481443109835371939006988086201718924066189320116586181314358289815550824203560990687366887222969587068618783822844334383574224286655847585666103020816988760101669647856537819653647348642372860462072094399934119806713804526340303858796726062832597308487962786568628209393365116177313500258916696602298504935899488231886983956122931761650910471751605728341369214793135444893690581825560582275170663803345907902656817500959962305071703161844221586272436733043463590790972533783408461905472360665984339275927320721268991984362793905235237928358401214308908599626975869024433459897721710178957512745942114341723971665941816834394308329806825884356070709685761638881841811423881417063972638317949761209293108884169157244310554120522091867059525129565074635172821024753666469843554970503238670636464476697226613787178875812109508162171406085559173637604564435642338746751084270357452547638347056148137732031656248286326291618903398185758507933313960978162364875292581607458217158798787916676003226916398811579605403809873107421485543087852003080885632791018542669430381491298441535109732809291308440227122322919323520142248717203062944396531767516101348669545805257723994808980312479264837725492136882355862941108451810186385271944727323937476421051113190387402775727960536639091788137833258176311969569961943551611853786770670960071652604792541940305956411115347733415222667549394453865233071674925052111317188727005402659672862870124353044134138940763586559553241714723475928344653659170671048092842027797901483049343811224941954463977298856433740106969036666079845988063391903825032855950193013788243789490182350376071702678007109765795706678377357340602031572982332824123773826221420577356000773691991307382149359100536109508425616929397580550980381697733400694828091467008203408893560621735626409474184799062207420684997475127497499271462600004670205579497645152495972389782480775949584706612600406180867943792941868858006175201936307008047616757589672523735789473093905193759863364945186628110590148829061593580057092925835363208545182849585868221368570360897560213869098865474255930740671657540215219483723251702391679084671148858456387364281103663462079699683913175189821329916045361853985054542513239589981629807348515391518514157410480876717317086568995965776721883816029400496479881361209069153709752129572198334892249502748191465310837081561861610032985534309285339681126580547626611304860810381677502832262489332934346926301205586228829998320869739620904253982155600321208706995102261899336727019317570934776614228279624359270351092121785581627705454815208145814747270980169200427592287264446298455337451867154675225312599671885696403119745068812877999940157697775260282173718338630223097905166067171605705202669147542203111329964484204150252769374041699642264247344682780556183768647043088086067328086717187740722470761010716276890826844033820289730485347275758989422619495961781370981845507287224106646612891699787304991489991450237892608587094959507431025121524157532996055387813931382902218941327406937104535120623519125622928074921413343511233341463048114587623180196119633871033128642353961758736942162376474650866446500486254254052378915783117942846877531394483736296707763850427149576406806692201719207270711640436539293214966734241103817572475879693972994529271225318511005262619518630808170022848370992692989178376091827819432746605823278836088860098280229785555789098175025591438486997677754831517943543494195444780421155712600231315338591816992539029327290383750279259408507030866894281949592643856951856970260492648859191372445722757560829643128598473999963495915365217562729260899176033339914368657427490270587754614627221314473523385599772728811860813438436363568535104917622395452899623639754284218650275206353695145264760567105459178562491882032831507849731082780751290549815090526014153248389638366562779197588704003763886554458980922773564631738946671358670002437792609926532640853858166371833689910006342371227521888985462256616595134913448753896321572610914451983732905554764025205460856114907835462908762361867725808829101494129427887010484807824575634192790958596192835856035642229775443466803753619433447559913956011510527564464490362903893004175699539657818550413774129471722988670400259357614877806334270973688298172787849219764510531270431348031231230366988119457069574129982095326123736732280724513806554712464556176030636815599985296475879329526942793809334154537286409720616279737748877805830625972559290659320870467177007699656878854930950374408662534796671508779289654115928497876570228294960433889385643701335793908755514074473749964759488535101951927148371376246782141759279753146527867175256859600371220723263087493647651934107824747038684956089218459994098442077055339542213286639575013424597339692639209982667429839922996745194919443742101455841754629560994904267305390310619195510596711795233359996984129886409644969307626193230100243445176341224116774838302230433293550887983785529668376917774923810049977020766265752226119147869678480128953266773825987624533026602499804124858105127910152228288680919984865137490347059505127939634012785058380116016158201512139929087364709693014634031763687342662706605079791983804043837557045973734575431521833043317763655587404678815578341748648519218701877257148921016285162472607623283323249556573753034374795565710904057626708068152251494257423269988884212986826103841847235290434753139713588793284927733100788323782464581521308771041340355123219181562733669769963813626654980259896667571531426558561083021853772568029181635433012078770849834446674149991209906653073314199262005928322117392615818629566430413616987317922057832297584265671398209566291140412705971275976266486649851786135002249020062965980087138574535447132363958635609925366757622786251073626356537120620726163351028366500669047752276806994698670175421508941444055686927449826465211114309355867990655881671257209904683585254426503206543491199687267119577128778582396178926678946290201534745035364519018795390246746811766723584255073984715970376061829082762752016704470773798620997166862372135899943680412430608608549449361762094538339329299440793971638832722944360033468293012144165093312313114839006029476318874961592758500904627465226488109581697907382066846687530136534632837946481815741937620620154295350284380932563345904144633726510177800611951790431250878298814044606538474701064227373555412349001233072133083235347487459787376279403703807888154514448002202951245397248869293062600560134295500105008538576207064629412523316530627112626565186270777090318018659291403078286535004079092813364057772695524445708298445548622123608796436695854008220295952906804796979613002284502190226292523908476214322919392774132723010892233879221455324852691358984021386299602980995708394090452538155116048679915227979809152112372669411580872195011069091512211098837265014358497390191374862378298332979828589280675262431318918898318225215446376722107524363251975033827569456312898080064881381141772242054225493451609900958323016634712370823083984626439009976816172490877077263224311036942854664827302424290250141379316709351675690520061130683735321311996496187247021962293994184343787870574057794627801215642399757391689423643087425702078241032082171429850853657783936393491748921202257137973536585938902448803265913705675751505623829853836767351048275120136814974429359820277661179090491547020218952518317240856799497902090061811729297871492235273099451994560780849999017077268810932708025581118347013333023449244901948116998051103180964193421409328454794534892399934923614215588057091032039363419930676743779898364001040849687155406279816603303339546771517073573996877517822995705129876831722490952428194724842099930819145094619254525540759400392691443317175946185255495513754986746278892496030387565394365588879946177842768690923727638413659745835806393996818031833024802300235446835796085570745553032228525815450531967652475109305456596317989530038989405999117072923810555284059845086948523349452739911967441605727895585516463617479813514316281381343200540684480647554584918667587044879862223471871709991329936110666394849738825285286263958437079344497666129723469849274424451217808101012327262154782486868475696579972204483320055712556519479118501769492253109282648803982799956007070413969057766641895108542980107519788443327966941933926975271423626274088356029953637857404994029785121788713172223066847502903458085949291823486875993171596694026412513484348659991282842807440540512919421580435830982886747148859097314781713081716943137837514388166635564093209988083853631966764152001236937201021272205337526464980001923248970935051413391014325982735295720169702781387326630373314301750994939700432204266441734849243617137063200743900861763556953331088533375662647974513214949950360582587461449318953013746171392411021921268719401083870455409243782703438717812520258803044022398736843362885510789738025682748439023460396397947226212022325837892155810227799539254487217780142395057860256227526753652355653439544898392544874518721260751136602267606533517775781758994893256983747903520154900084664232199826595227499066488170533660614570516974168882282194703476740231831764399346962406995812197194307712384356275327126581811963829857081764545583491933201665655011341750864389214260118093942175688349922926371415338795911538883608650663492494285079393689588623801351274317524162255546872032205137602055977698588526953067919577657802157230724010580762546282119676770146073279290190567417587379003247680752947289021207629278566655115192835788767007491592173561216460960732338187214850961468821550647703718319006714895171928841330718580062654702438419600965779600185378625085906358134551760230035403561105143710833508540322391028617424456041890440768192600260326521458091222064446938238524580192166531189004653013760970323476986163112729146041847368155310536930201842388100514907989986285028152232579121250243087183900990150304104081116859121286448239243348357354426439332087091013606470363706785376906184268755539296047766065167508797445567080041967876599818349026917276210630616917313061541554664359090008971749776374922888008224470479856127371383520079697079481864438879042548335953589849253380664920899400066389165030020576281747877494368823642902286149859757979430259416772186621524014692936483589683321666232231917198657382422968512537393374246432506459315712945887280161525313402564412785562279688402776014658097920177207595566191984505720566032171980817248093432499471573407422741267535537792190907867772310470192246974486242409294991646564339659296311172821487691415387361518368358002232126427175348186260983285915013630462489800994709039714768490653776139921591148425560513222581914691269099627882433950238366744049435126864696551517102338574990439051014288641107331775276925590557112123848552944123712559927798767656060604001870745831020943534367217710806627918743824819528778901432361132400874522503036881964803363227725213671319249255588338379558944373081448848288914340029381563870874199421074704225053940653263054076372331153673021564933861085136777463657122583608153245145603654759564012552343708794221112376282396672216677067893583529685387362866085958575144207549201885063634649664356022770450599025073193635589697904649689742659731140870664049705909529992131119908451169523625982480852065130458048303330783267873632661502527296193654564481985949017941867590637521370248661759842942985486580506523527905415291993129997589693562083571993824525692390012764335534053818968643292421277387911598443675823895632044862101929611888494601135784807263444029447043613253239718910969875605613576775133853633741165480175557199106843404370509722920321859723309901527892004815816154454240322704330590162893392597841258761159890728628197646144967822207646701728736399384331473403587477868423279416635027533248541770967263778198842567490190381802603584303232553124123738656775047738687142923133780711030685516297965124193566037052352262354539607323266508361484876586175823446779222126520889533051136757982925713629289751952089225590370193731715841445105382621870755409206256938181565226769507387707852521144122034388075830457994525416533663962455970297774911851804521911035459353309532169948020448427333167113803415885128164774439258952605402088109777145211067039266101515402978544740570697381766558881546774239387495303310021282368800400514079555621371851412626774730245176141487171901398964327496365698995566554278753549639947813610318041843322486236707793661756645237618569985152051174050866426218945874684052954853332216442206370490833124972712199887443585954028942543566576436008194402325554516608853398435525073932650524074286205850550540531543625550602818516054893310255606074691613285654709269754001340023163558376144694499945698271995324998769772391227717778525548481765287382012664202138451078614644891981447633443984616961062704113987629899385435093671888725031427992000013446048294556079409188916356329263861385119483041778470111323934672117382552154014552689712635622044067335585091419078549572685722517799853945139066113116557823200991839478980485148139756437276310315585052962711094520823502876017799162004452308825294752903780143322159163359216776682795639765675024359141047188281889450388835463485151185055730257857244956639772765885901407478608833348764219975332660938410968229409406088016572970425472041832771272378171279797797035736576275270098485254500981153781872753941048954786738308270916748413503252625251966120660459010356765817802826429045068657112315950170987790686087303575594630278186797170965451147353365942405760693758157024450678772714436915222715682621542648328393696771847903632197735143219253117775874065572827559278669061592703292357856712182245702829796197056320474383079124060345835424419150979181507698302000007069045583234865337926621992623375749971204642446990777626632490383499047710478578862245179305716165431024544308084192556089479503354600043311566543487429471050399741986074927517309966574629189828300270254631391989455006206141157242311958987861149970781306061082396476609746044799676946433313570016028171027821734752039087742788832856846639871795304172840764319177762201671679871703331176399614205812745806594113056822213610394374595550171039503669220580872124167464169590577829197969856928840564473147431728291951743418213909020891248139717532829309139307324676418134145138999363155157666822088563424974605011214474234561958644068385566981590500191642959522021800166068563481044756233678800379514457696678176805627254751999892080533501886765304008355851853948156310423934798610892860385518158372125742586604990037334390212148772332920836540413171820995316460503362722328438872099507648776358269375088834055987113695732969353422819649914493670628253189886707685826733188098490064699162769196462197178091601033240633742092060902726567598519786428036312494443148817711021658763571536644924743944370048324568741512735789195923635121797799038653592749525637165000255493407622344594232313502271601912269778165783446812278845417457586538145675618091493526724848167114864548061108275777820993568273138069570417876796279053044809083376787522011494624546074909061660691640637286419682093499212330107661282280374851441004473097968359669954161836104289719705649964194654369452812111646977860340985060266188051868138264924697766217093257796481229661635130361603763575209317631745373236794727193007345895568742625048392643535752017720886976385547006530147162370985119567662827452345951611661122285345274467812187128152772828198044470287829483436630828621443834283933061869973426636841662503174938088958731532564136006533111241497517080811026547277241069801619368046197038254330917315025484354794049944205979487352155731523443985515670321446995279071915493012622438463701624086676046991036641665468428667863243481438144104997475129384407937791753089800722213988580814506420181828434464111345849729424096408245260118164415180606108341818909452188841412079787980645835501934806620697807291698253154706727593807361760609508840206608172948784237440941360116633737918646533724288158512019153861656684310632599855068395383404299612799388078946939439804726113661786432879308541638420957312446608450673637732399682300434221464859925923221506390466698969039225502809581860888180763430173987356554433665298962587119505406649522644887130093859157162141940270620429317071422670076888270015287432039353142292463201458311748039953024013036300157681289307831534247803967378524151269240623018079511894898426335179627535676928729840275620799295814291986056942345428344453545269535794124327345707388409443474582974771283667398460633838739913858003572434702047552352950879994724952355013458855725485470732726133558254542140241633844025957105365419313572521406256164016462372080325523482769734126885228449084718164714605387688663314237773503394896942177771487500288657934065953470677148012467516329412866843212947650541393396631386347555804426102036080289255754843634434329602817459750576423199736486570021428392611373877893467131270574799604435726228651959220155729187266319233386485777943988660811844393451428256717646755716254300083904773522205309371240685190676214538753207966844645134821197918259003182495235479846985293701759492154378658914612708682142567444147095497018617281359110902117920725531122469148975703268958203323016883831569236133529003603833362202853118400173131984771412931859271574480640448580883928197270433178482028973090531595725903261739123015610187695736065475604480716148290769317072346477291109395091443012208320879788331725598789382708448112357055474285327626461197894056314208119696290296871946392825764203702558293596084592330063422640815063526516709219894586212199245909945107086110527318146202939164664570138496089256131319667582023030903220338472809679989900075966190134720802260549733743988009810716784814967132808315697037229066016638783617803049541403814297797063504097571959601223859618220236460435365468876273616964977582199141192717139286886479366882946601855885523540939542911001721165181303035250295757804176416487538695267810352135675174637329741832437202038317518501153696331084859275436546896784758870744418504221637131581695470043451607111498383586197039434557677809493753161844551986777183528706928317708570047213682844575429346154967850073774018951110599706445779164048664056208523721691779348621942136050587382152008824636852587867072370504325971481960878918898595254980293982721591693440821999279481942233518649498707717083882102011010920568111932250810913249902342481472764561569756057047564387676395955386968088987048250789547613391325196480282398866643140635374540815498886375692701566620478926327386180090314769809070586546850483645016414930149011180928072625396135675547919261758488905962683028189154974348858839670607559911538799594215181566419664461648293512903197378392772465968575275924040207070331647259700136865792916743805636460060225022009555911506758744722703329764833376608884035244776681807079272059851958248969103955274321981361055653095030882610383596652083951976626946931369787729556364440715932097751242497500001584071338920490837692185167860605115070019549822090122604643634410262326319800746320962802835287034390354111115865790874939042813949509988832911268012219132145696181195882383952958868481795589403551825711445660055304159790661413008365913113607195310961659663716376009165695349750905934408643499052196577976419823962941950712959992212234788580725813670158180525202141811656107580848620353789727923453309609949287741837902512599149154339176262431563817727378679677652789586189907215092360394745291315315178280769752824178866136127120364844360843686570666924377391665188451950415163418019008550860833335991205615992745172384110734413150392823334652249716284396986055940980014856009188306532585605420519999060408247632994088479770891700298117903439944095625163759805013608980060771557434355471774895250923968185127614872473437277089861855286234820208542123288985527978805250685814884921559427896393702833660533784695823628880970072319349073259978716833968468179590572694799891627034479004070759376277217793391752209577997711609243576249426419043330333248714674522314937604818018967788378992728856961524893134453753720792091904689980700491208047979392621587263636601034393317517058140153695430456108047489091988799433658727319727603208464797159018320689274278962431580710268611873345082042650017311093587316737506047072564104601699540422208265285367519250051097876841814985282642872180071842394128862870024131550427158424470800953331106953095712690997421000768047945089087663231635404628237322206056194051230418812268915485268026095537420507465353167347945777910402999486556725081524841236691353551068809229611287678981310879402131425967814033549233559647486789458759659524816156257785428046357885788728798334726449873717622126595441912361442030013584241365584775303418366701542287195829230746483209292971621640713714120962019145289378780969314257595128370406067557489678645404458053687082712789287239312499629853769537574070273969474157449684007131644293612697622540605642045541405898737405461999281923424705046372116343888909788638977762339671372562117660223660695670784812600612056762192717861277640703396725012445752647660972755926419081291679166524667260979795012933256505922882790031660146080407763031478392867425713264775858816101821915969759500481246145397674060323709892952582602767900235601067846724543572473980966420366855192885879180614548283832841466665075996354149725301338358519169323717267254062579184541615446217563552842801325876467818631048968727579042055430766829056006240108948018339677305715364169866474021158726443045415282083577876330771922441471903310208177751083536690365995902758865071635759854772834694926455251271950341529608500788151798625090215572084029028380951507817448298079939298183520695590038747651635996543349440728664825713158380373219558529466057128032322906043454271320772921500287417319365976168419625624605115776262120980985923226829065963505843252914585540909170419599634277050723038933433924966297553342377580579351310874515911272119419209407790850494402102776888845698141493104421164929231199034729805606023201679897060290278578720809957791951623105561111133441647850732477421840889254450727982538571816636875200828789909673369478549612505123453026030215697838939324904100215648041600048460039211128583146953718878628701163065895128903772760366897751078368367149449860760323482919313636639333077112532263506484449628903562140910917184883359776685061477491947729628529940226933346422619715834114167408979784271108750432262839890447106483996662801874672678069833459187503127812301867619501888954744651596042888493821496812330875953213277829557379428092928030401078060596211030759341486094758152719531736557706698181800703577011933959623488542790769609795754171725493159747905511760096118476672312212214368328427513637719899441014615290328882809796585736312071114005119700172543463579423776006423420286785176042602478265390069956838609562249314263338461011350408175605961013927967017552360420813070363697740897703263694257754856012654337464403965817533944829983303847137943128996206061949794495555772350381966455640399658960314931510072397034602157188468414498235332005390066923861865352437171408532901795023023963305004538478595986842966576827375616876814560462321033161451137536544148847560393613737181536328819284288283654494839769934062928897803037442335381073377792138665249528844845017487627988924712134129833878665284628767176241405461020337739105966169340002371434437030992017569093264600981712234552096820682678182956004241998659956895146005707847390853503811705773368682511571235504699508351848211408274201762880277944793124322084314104623005572039931534794296111644783972369615224022661119722029047041665683970708585749056976393919847203913389066146411665473936057926195115695695372679013803092665461271109469924054694941918792327473598367085225448873229547450901639248463592556312744455603370397515050475356724383915330376573631292372402745732770801947701519132781347983632063172159675682339097266427478373480515275484903594400622175573994679551026905871042323165045382475029142779227145853127831067763040180729594761438319420585431546444900131105212053283280444109163920317054623845778114784577652681377523891236283117469043861099922393013973145606449737426020400959335723260763918132824769576181564972959353534565137763089779652100094511330446364797507184259503543793453450700361208294282937345258864388186370815590043966329954654849125677177327740604000767897331162108194915690616287252972595860248117617268977717440000074061968313794506703892623292525804480259861766805425912512279877433662083855611776315705013366749522257941448775139795054547860959739810400803175328510521654357751870807142781191563107709530016678215888193691287437297082541468231278653445347712336543897189813930534546163421054102145489580924669226658179842336331091598641340097439471837720432580138626610040040257095582924562504785423881749020155620716033485839761416339278967015865325282388487004257267088252026526083144317305666263332820011765688760660248950414043569433347527093520428825842731654779513418611057685506312236998762941492403138134130278628895223957785888951153773377278219125362017598290832241727107181732628628969099360075180094934523410329138135442828417419667660450020302725791226991835309309904350519775277169896695751012666612484996123705824658061230636549341946353772353847256502559299230059708672205806258078192365971229407426411100522203370801883360978801045660422495415498395392435169201553938998447359782907217478259097827470124954127685902024144358350312650572612101443964768748398651928890056650901122614041238234484827589365452085753800901291898609505330030279920549391725529609085950104393364051410163218270357861744280293822046879547215661467548620526839159988042187655020925238897459763039384102623956395291728187832665657676191301309167658030267202643710625509623416068746532059528983901144863435882231708345398017370764455523600539902232933592756840568086521273281265548544166869155189217769253547646162274698681904982234866298619169147606728419531849753765787033118972568320216833418202898103877938830638735413399030740564216566952884545843561312568965256410100307415769201396847369236405710036800927520184308720379877462570422389272530968336374888153750668030474213183276584156135282037084306452805350387567036817741427086657772348793596448591205056211475960654991794579079509727749744145381046319701859330950696301434310162412623394533581040768155023230373375367951934091941241165048796250062129299057998101829846308428031549873308933439874652060342146147487112567741122821920746044030465493346166046949934759667809163747600240109859253313224534523318272414115305989077622667597620194386096109434183389241552231538271746064990361981994758480643400109172872094736135632452901332851948137971314553706055023957966448686966821991071157048343122334001260237583112954121317179044296283918200831396802298468845835281830105166394193289527823526663377548771320675672435904302829506965065381751997283437772160841249722003409268884062102256196782344983409233009570294135858257059097270907739258344911489341204245278111169086281184455973633769673687311268585203110806661036758146943995527693971279945008388466314779754691489727612537392064606860749506761615404385929028920080939532208104450150030102765923748624515319131703319720895752546614973524876482149732609293236236247273777247682281412717649106363575287531179493828389605764658808933368078871183171217047349880988574824325448372362610802218446169817070746575905701523040744440387553885188323723297560118413455086687428020491756241547694681510237054642664561138533959873257613324391861408301343062755145453231896143425698238618820153199341060086040582767420305271235520616347786529138839814469999702896131238637423238457679536703133536334614066610801078208632267460386521332681908693272437495162368891180048919544538231408211021882239835055241719820614932102560630354408793308986702893896750522314290296683540293827484505905300023101114992678464105412926567451101220289034894056181353733141385555104182626617264287068129416704930481819217760443171667541407462632641111979636261208100709624085412270249731273141538595684501410362538480004359104643319518414061525957275846423061937152965946901155002156142045064539496986370236697651210737114979925333838233483192299783546734471866931551536263459780264970260754449708918898646840741976940696392398098349093164620481102695289878324157316315265067700879853313949779009728011413535569426979582389581110912157244737931259265697284970217655135182755148621789122423740790275289578800695567912194172232381437001835055296422752802918477505980017007907830328996730968596231403288779932382828401789209564023214626352152557846773852252722874386407429775877571315794193926987712301114758359459503977627104506796335065315210696845619852741005843152072857586021494712277348477454941140247292113886806982524284931523693052325966127425300967746893055139725681250453767381048254515620100529385732505537575705833592952363980135107610728887764666569723973048108451266554589176904835207707227061181003264797909809603964010740136778165330131636080406736628862983444586970582772349185817537741391488455814718914037828201228379025106991928961877954472191162771803243900838963413363540922360099635689809501854005721083471139343422463302132347161478224568573755012232757654186967083217823591384926492065733104917127987001845373958949362819097899361570859947150307057739759117086549735298283819946900303841606500062502318918356952336582639401806122557399912051397857458771314546873219089182093197569434149084560114632323348457092797433851092597638983214843267901257463663134781314617308650305690845449700988250818658679957942716416638441577123155235542071894931406458086716314074927818884112642886658753625509830302008526793083053660843091515069802823880052816971852890353005110913111226709140643938928883849361969638411929899250818485685497351413304912979628343794926690672319498774771835144880126905945243021432825265901074072219675205421551379944471783809347780511228363292693403155051134265892661797569449245517472868660920599174127187787266072773703505077452795402984339284890109683702584921296131737245478223242813633895009345139605954330605487395849639794196025882962585218410041041429164367732771713486946842899444326395469338024741363056416431094423601582895344849458557569072143815600281853202226854482541926313966220609663653863085267317512426610902406967587585145668827935607177770167562516200765317627419446873064701802764040551347065283472151903752719308428159105984289801003877027690073436219093706923712506639592307178568316033439073153303229391098307418523745556949162370839618754825331714657520945252013875481051845919728709239722269244770125576684572285165138692025972298962448488064282487593614865073188125074142887636760634331369470666365999529301391916359895775328977931402715320155854718004339702657310779570651367343411980684708960460486854085813610752944735823372229719711477975083318919444329411604351499806575223073087721623022082458857799250279934773245731569510756715017313617596479814682740942606042680619141077209118785093772744481092324182153082120461148314509548822990848713228383587947163388561905319606931240687609278063872344362746752319253909833481608694446649396658474584472355022720916237042652989203977511744555535046390355716747577476430768291790028136110008828218535184055926064540415942043081374080942301716267577776825913761241698826441242707207132111082549055297779800869982368478064129006255786388275389167279944085935618049212708094398002773133828203282452806125310544290636953095062867364164973356884934487769366520655412414671998178217851002471623636416831521977100539461389358348201695611378431285352130979354332581354421771886107996693593322598686163173091956900566100319732711910014276847848482784607549460708071287982503797286563627735864685203387781411711447488662580506919074616983249559689439820043740266093359451795279470837398893812510457712164918416267341168526716387812302708234976506100956892054099586007977404466522826031043604785853756197203659574797542326864743641930696275983938639039383976918529453645314080185326049716458396631545041942484131324627562348361695524825293457752765911242135039196794110091975825747570795386505568799966389696249682246280342966618524092015699346105263218024163990791087132083482297903130763979613473913387176208922928712094682675515949616267443388284705478374658029384543881572979624256705070684391120324441805258828422852509250787864822604748651961772908816194380783959811159097025994482453404926919796944922483742026319123452985413278017571278566886309150358857124522190490885881345265863704746228263588956571919236644608937090368268874303754973376288862484085353465640115041462926017035394130089878665138771334776409467909158695157752579971217718909443837122861551887220981191484052592382920068292711250569816439601772572259768012623447983369317370268885112258821014795706180517495609583877032038048223764780202857829613900087634097949867241477820722398981112549887784310561560787017925696945478944574899189450789104776948969124427698064774021771308210774498675118083848377140246948789789200127922544042988206918987941080213229730827690255539103739275582043076502307615545309193623059515142968291118529600993950169553663464472074240224949614572614109928901068324130068211147114566598653975234575260644389185930565044366393116001108968881017090742771477265223806396303581603252017467829710954822985343413521574441176308265778385626082663160908651082450850219494390316261203030852320657614703993356424039212793921477017152023812702975090180642248767216176787186820146640075049858959179489141898945811981166766767170808958417303432764811446543595418634015844195047934691554050223561608312574096058566460662719383507164351661101386660993035073313069955716804706013822525515533056761110682353978362144060302654190404145577230935702804278403687876413224776226002198161508963623553291372473425796690649269790459891949449662734434497162619543058824618041217236890350648441493035341339677722497236966734545138008331189365802094164092973437751412787668677178386372246386901815475375282245813809318446288294605920682942075072774629822880638169371477662359989082379276962773285629649665570212988295554230364047191993415244940920604530986966933515031262488004170410349415695604383630856473825495652469190529276541843602095979249080866386859816410557433030131120597006919307418842721380676606492045017393675143982663469887726869561867405220787200566946232894314890798822098147226028444874947376198263353641501588628128443875786381112926797179439990922916825839092357124168749174656866448968685552166470253991097450460836745665776472567072345311249003579071254220431847829346190277916865241513339550320580978949242251407171309508801142462524615167545251923953553812812796260665256935971137006909979688518557390466617284338472954227671934777936276788589891063819758889652011751278052432598139972244722591673113941914651135780718062103411861458368484552768493818792461621795938862063507451763056325760717280557051015665570040719485293645791748867210332743309567807945264041911552088112683723606891810553846521465344581837340337575816983786603970147034983592476490445618714709223745252830335030049582105783537791929412139077666889615999658819848049169039429437562782426105040077835870008683383707489836861848947846519033195580928067520781916779357919581684434751406228043820330757395441949923732785636347709074020264905031104602407841853676929169108066940640934182483936811287487300187931038293402458787582994845693268663457343886526115370317989144981530950100566693608492368194385097064324657539024043053941959974602378726196174219543946708813954653192301733919067704673869912462150060977427632515602398636678171393136327767037299342951693778873671329147637095788215580934326288840911910852018852545035243020530629293621139561443932574144697089598068829122935731776730489045717358325562473156966942186455302127002114022039974608747779644709489115244797796589906384418770997189567851284837589695124739467392960938675720763779185299900011086163519213780957046726615385324925492817408567133339731588076377367093080077926628622522134161015406886491016458182682593162761762379998002418582226999896385410590275161171583552341286538648885208081413890952551752752797152221884999513693097781447598139937479799584372915499176297136232836731630374010313502043942856037083079284572855603421118286922603912225520993199838422159918448395641159089305976756705607255697017154184132277599592427392938983213868915348765539995943077594858133294717775720439621772454892132175003496794944803486399576292334316087142198570183000261767196592083498937714834808242405965785655310308867240264750725084240104837398367051824521123066238391904852929941093000718163245431136851931524669736901982562996216814232339219187517362249544143838108073634560101557169614027499080920897378574498357297870125151949273252611161270439044500436215339165600634590130638837538406159637912104127317075279667888957046588281010056971189276119613442952242095845370940420408785438221448450917300404499485015618821325815982156305406684467854915034867591295681736123801644123903472484880982695945490420745637844789016272486813545684665580677166106400066529378041174791179705123454191196373928042558220338091435619540304355802434014630796745807381153118372758265098581751614693253118459658201085261240929239816470742412216818546733542986999607169421929800394326943465975730067446356260970304813476771890576978631310520918610986809549213489461855270160970352221518582845449240776827108303819094494349973652345765519749649310958102444092065522056161957615174661219101969136249516408701120946402626071662270491861796002047372616649580878748688354792295293871534443385552049753198229230272437336753678022532393043874055184367911111756841551329365459321352608483315813334374337310568596237612671310603149703958105283852010022577250217733701047198419667300512304972779175103484703105288038490648270726239725182927861156936432252693896147533649924016941277794467332256579075124762539427709667169335313670086668318029176967310803557640237231328476703794053310311820101309395685542141383864830782211759227453232247222599993480652705495692598122075926249149059025080339063266945367639035599443590872363729278907201041022180650203892026357573097811468229412919246771523165703253446140387755383761517408100583680263192942088900969832791145099411098175243011028495152388183916902688052544899401372205613020195513891997531637831222041877674524454439472945945212254095374591974227370351556447699278732972179879420749801974327671114047748851166038416940672866245738532130035162815316105688928284265191769628703870398388478524535797061411200689742531616776934946758693566097915215363781852121921266589221146009676114370113880990427548952197197793587964394675135785553969275488255012991794910026117762758243938305646893882803367448467823194897238658298949353783762585384450212168523959099319015548041035269244644024724153384295951342588169331291340066513552922950611042664665784552557527329526991222642332215088273248516866665361603520835955238201517248244853520194287825971728930306223831381541107286874995748916814798772743186221871346550267849457341258409383121259355173215564802573398512742704407407353903309711766205739603005850572880227927179705863585546462587859618635376158672896533233699549913407067756479576671402085350179079209249233543131557488175982125732060048551988337610948620176856392229720122234214910003609592928397806655297646929652255915926843451405045566792524234905885047768125291074726237865711707059430190638416289880363751650390879052030444196453432195347346546471973595196025067314493203517091225798046431962802290239671550536465115332623149980169153056475053547607860207391885581969225821190724446164347656307844194594110576792306538361726391459536687379047485098306982872205684718711398869858317294785706246042607703321866399929168556274085551900157149582074858798858927963962886642316870029583741380775822184803732565395060022164330511870278833384757665789177983496628191962352707765946493535189857347970687549875458419045145213049730996897937959794156202605143810611598713734230136901890281412728525398320287477523443561838173293818292316049345833632539136167226924039140406480460644135895289197019166310421168967015930147894946958187321911099505281897711988711986440711206781762152755466176871831112451052660929435148527879081317378330218707839157868046840119670787750254465819236549430724723180882781380800498009997681913741209779008348640190124094824911594977145019009747796649127544460467428600868260071783252436776499503307448874271267037441639349631669659614339079901183854967640661714971402324716688608371364540073251883464247008581361272298946073942177695211713468753824764056219306029960615714963478676063271289460377364780779908789119694374694948721756119137458611220931626554435268407506342063623259853423754193831196822960510641939047408041517463239276398036147791768823711124554469403650924174273895189888261773301296597176093238168673898602284494223265973033503023529023169812999040854518427316573312766087472511745078594697118939720977713302594750217872938788577622688281692810911636801747417784941249725383961109844305428477014392159551331431076168788988569290084440324079103589355431543999281199292075106877733449820167248665228704540250235452159420892950731047234328569696921783329007157636061574786939467398213664407458777725098055171191943136064714165161316072512894042066104560945492786017799288070461971906640229475346422951137664902689538880023720233208657917884402752519306741337770701896574672161185533453422328642339907867753444909885936388031154743698567644292878171602323173273194876934667058056987393758751001171478861250884636993226549158207023070147724477550431365239144561160487466568984511452077444385275342682659058686754277070638882719331385445448903571853607535211471856374412735709013764283377436284460290231937342006032339701827707922817442089847588744750494996349517641320120671806850677834301397403339936324196914179019238540804491813927635863888947846261154343056708076375323933598767814935726758167789515936496642310804474947475865687661340840217148070121244073595708069268852618981241845239625501954372889470019480473741407998604411900951037029193441263418405020994094303361480076149295100962624745446550467217847414473500041749715164653532302920687277804823616802221784964851015064347929101622179630648327637687380603612754752974970029149053744377497534328571746960809258496336943458129317117108749110943530231269560651773367664239430832362186295189004611440592803547913033137146900023343642270506956296218655251529600728827340284662917217550133975294701804836435603468062751800831292702336291596085862177615293016738724534504884272841122349359660602202190360922370551132725799910004522848934386417702739100885687810909977641047143363695788010064393522909865656672138344979003352840989665576735791189768139643655400593235417439345892545613635058062893557581403178518529678550854034011830876857075004332710375269005275398156726238886594609684164522894656666643117415552255406921470418708233253877054918082927050214470427530282060399553781104384375329931827341236247969602131021426032878342743245861195045306133939322074780233254643933422730663181976488755094378227681335718503138551807719931614750344541719384731755237076027863556146460738410843506758494102586700860138868618715321908492007126865589707875689858105219292094170543344099565493690834388075882098724877634249396705111127634773665575252350634275462563176731500256038365869233021602990256900032352927488655490124416903452271837447299576242220639010907061858064097277856086727174377391537703531304601984931766854839949112775796533738980020917645130808081778526229854568799545636474153830960355056110667221970651174118436424704955422926114611808924206118633986104009778463930878802091271348693806759042132848977432544907839407229894124083874975784340941411789865437199229987857679079972812278866111383228117434403231935742412951943355777337320738797039792870381403337389249836994358066884293071110536418096095489031736481868834142904129262251299674149240088681775282677536767206682131494660086697105301879195912692669752737013459414707875332326832316805520209926198362044238796117915453474668621065495507685425295760656476351263333253557053579391889347869918730826586903927618911562012746134707451077209085361192437234954620077993720817707292652708920276099798204463859903235184577063288658339775658030543696920328358660586443711471963490741241704808567130613058265648429056733041283618448067490882859963365870952030401758438815166830096400653200589361857914073145024511257892789282012220366162507932778645783796644097201418760841458244803535271505188446325364600228373038329001148344983727415780410763608177474534085659766722855438779553141472201463883660140533273604776967204250729068893701780448002308249402131898895961276065230462135625138814289282424482034365894100618732231319262029630825600077324878984657127034891232398030151880850241090275223242683618285738275138652335488836850092016887233957720005123868359875312327017035129899936666445612378536864845904651190457646440643419208135324042038936473647725455300569901618785250323245030220455885019543920298770089651967385349965131986410066329735724022730291043988913669457208725464761438891007894401376051232101305572947867492280324821625860898937283773095038586551924151489767910591860630091629894310383726671100588154173294223723532094395594361641772465744163614789556332071501898580910681585287558325199372423177803751934338469445772702432876660006353837836703326676911276499512012962582693758329854966142867564873486417870035100330795449024284598485149429540972856737011140039980827119239141453802229603530372324417112527376064694011108981738030056876113314966941924915704431558708610086023561762708054622649049338521931180300209671257547211129794234628485633664404045197995878735616750046586846414924027073838323950629857186400659775611342196592070598169552997720795851864641489120086666175562439645778515180160384529046359837419156435243229978218877327828099325455308008277836672418275750435346665325739671985506750834857577562045612641496395264482426347660689847274946791804353362366051874308617906390474552359039812115785633662445482431920223051425348154020780114779718873485466160750066983756633375027947280911825376031437610838390417455312417927418478813239767795436873710212137850412494991847465160047196051375938686881233218288388039855640742456557676359641088365920800229589580739998212276979988060059286433886029676374980065493978457898258899695626513870863967195189417628051186051143850527902484536697960050092080018734068164574345216950905142467408231172362206509108459790789900935688249765506819076585037292263329658400840334443703911651918318863206224084506177979352979979285550048957452854769917110802987647100565140080883702332581718307479417361622995966993017794884062651434505397196069395116054966387078372208286495937249742717634708016775907594277259435004301089035868485896786714358190271668478971333623690298798338050336370164705382206735887598487705212548608557462124012177788808319104211003460062057906595584891542518494477419946177808481450736030647936524026490478748604770354459201268694152330901493672916895616887540284078399037382994770715721275703971619812251168155469894038647837135488907360139008313193339134501666772312541329083212102053108202297680534247758836007215220486139071741091128638505452260822036101738481918768120578834529930885032843468332338214627474749848240644896029175385104045688659856645221426062024389308831897432888911414414944316010763331281262581235973890151347909426838718615554968270002332886411059869219763135610736692850809498283104418349888858763568626218359772693675365334335478813100341812132988089348275392076257605274171608160729989915222663996382159687340262377596184844167241877430499467266696525961873922792118255327000888738216608308731076862754700201872012123299536865580913664556003609198864693989255054400782510467971752863106194886628216151529602069027034319849447481284632401402237915640524566126561377818427940870089696647162768112040175042203777960661383494935285891145967925288239477168587336692115864894200011358348022914538241180031723440081229178541616281104862485893862931314781580929099849929790025723663385256738050541378141257540675818027576504555692856993175194886865046922723986839223166952291510690890165099157192201938772180073744361395520795773414273656501934718321083650656676350516063046085473676585281605009155309372032971540546011226179858420919660100034986158006779424245268971529623483525659750103449182862259059710785618881444488273733830185781054259823531070834521256848926296318580901514461365294130225580731088689780519225535627633596308381077143519930759854675257282942009805297410267669201305522661882855813495497652520497056053749341782487262654372295554021810241157615877726221411357389852569916914983039078011639115242061369651371401013692164044884974391754028877524959096257867901994221198623002816636508756310729679857551117387731256752689642880393660681171598157168842922124970023435776343451437495070027872413143136382052730545706647770154682968890759108065134153342367104434332811695524280188861318426064822703530749854578337218868094306156272452304474994533083367209766079100311153501642596737484121665343039295709715162425462481765140610641555838017962917754230969231794114357430700387322717740738700586105183786602763547733814371035174551077017360266838442258888747614643313397379662416429156052575407391376193894937027042516265648175002807819642603937857799995239621182362330573252823250875082493043588960464387981115975753794299806069252212548430384332671093753746804835254281830285779599456875555812405004701236669125054076108557987921717995111107562970578244152387726255085686848362480641995183322918564509299994938762357299373267298403967538867641015301737963037778935533677014535475081011324338102251375453801006253492365919689556561806644926238039334003165876996374577216681658198479696434174576239983489285798119562279428430558802982138691171545290362097942755344284308392470149696692385008832170298237602126371562027732535865155136205379622116039954181782634415852155025443272581908624586124718784401841161075490255822610513885381104394407242095324645046737970945278053048720938057263899032107869608840684733339344162087061315569141541690358031957803785560435492216633041206749563324626493755605530361499281079517131761927349415342519441964635054465887408014195734522524559152447637762736882907199165483902875080669207754106332336256502832340626975864600210262400101441051902364927900090207197793645715907214990645793468082625989637516323092550321713708619296231930612607825968554907168407524424310608239531294860686660184589407429093110615079805651419178750377809588496473618838710537934025083717492051238501689615871861837795819859955137418083137190691464237122867857076941113699916940827867146546635155598183891552561999272509207582038186215300842416270615518293669136213077130202556885240270140233207568925519285405771849714349471020896876819018560735591774498811447805373682376709486718830434425059480764671062008087684322053388648762910271810955868607713741226069257158205406990492338283398598719259050095358273501618694951416638366242854951116180369522536621635584125214368967250494375705502954384661673054380970138541985618333307703413139071875739741609451613880135268595475819406443893674820007777916208203877574152238813569011666641007250697809462612754152291481878329339085734557254848138124936556185175334404245302932807118460919917012991472799316658902876636875604608849255271382448180701117467463509579827179311312155647669973918331820253398718845511467390114875450661531306595628856340586820203397692389477774363747053287232618196637648971073255115453659333031131019093837523754490397623506257940717326344758993739373009238759217149207727342988082941988655737337424383671105894614626266075399694177676862204501649525445460526198676572751698707949663525811638304723613463002135975787275725219470228977700513200757408099214966882862640139754551084791362693587493746696253240644150216789661628399342329702628214903408580361406044014865241815646434858794634740793744505042692975348467389001436204130244618877930798247365606706702153056279968717165902109591520761795948311965675398848465582109509788726131456674473360619242298493294306142893529140284629321460464139719168132403285421872814168793663610126392388471464309607701426225262223971884231211723241178528251170093721871534270061933311595498730543615131823936392577568967539517223475649003844997070368418613474674308765914208900631304862392751757847981277864004326705435717501130544568703269262181355349929067903403360424878045142937824589905520457189140714116930371407937881364516096680848055029622052790141508054303412531022029881056493817180956519513504013831135447586861323098418168321323757426239151245839501767790833857439105288430536520736402976318014980944312078301338747341912237683935233667387056271874000661136024717667617300205568593418411197402206628045098944517305843697594277739425160369909705027815638484482958311632383602361876126761221791635737974614019349604656322329612011064354929806407903660084039298666417004372296693731604322471838653582941761393122932124245459427083911147218652760745724866541400780804430839314587578113265531861843024870552342479925640847791089732550690026132077594543080636376137051201361452908792574156595525593276359496205983398608460565235736958415647552120820624337542814051703358253495253346020518449244995570377607785573434495947148424224572744751333165970865223005975038198457701646057586609251267367198979242242018515250637248688088871295146174992472816153707592002816226506493229697005533132193458466936497983217095620954670749188705355212240606036419133669480054626067267215568269605394789349499180845560667795288877079118365476136004044472585959458435736732884420822122890055697499620834968636670013561346785109748994354356515605620136568323207434115673380351968083658867696759771496500802578150156205511916453484276295580223652617612841420795331185687514955890841972539396331337316916351046072476706623699657385491293952910671198152781372078025150413035333790575059925316323076926234904691078439693919503812227253037319722474445107099146554139139585293136217432533683023927670384608882517657875687679367688826802695940687804841146418106685395001137486599604050942632173426026287127546531963762849816204839507096419762831052044956594159855004016940136789708720248178961350768270834378321868474677540495878377199733504049533538772454398417964054190556459785157395626879579992047816425017023482764979268964008018829532737403651620554211646915489164186182798316074919088977587575253262157720481892314821402725214316039005468056289053399124229893419377122172234826209868816665230233616502919564441257594581002453851979454393138900571698717665775892740867944879706667133985387529742552504368290666490233018000734096980479808073945050477005629620854568828395501105762860460748314986895073828914679474789748527513182033344638134277887902612963472901444517018438143417821376462657187420280605697389887995845254366288678659909456591066483923766921200942698991230878027491810036505479997723983042656597143100832318711397560932673606500607519587893898968006511950931308681524097327560388960449834255195599188432513217605952122193310060569405443670914525358791994638454429432326366615887989248283154920673603470580706613831867548250046983629614530832844894203115195024594470646988053908339618926329288307421635764352491973317395839783857928097959775462224577413155778815280270140280183489248197763398347358664975682943231645235787590879860390876066246240379451402426464566223188847688056924183288654691332901016380627219840395868061686735569710546245018166634138876378118656412460912988305033297231269719605327649849145386179128799275341959272146560632299549028810907091312356730423946815705261442498829696311632781749438332180642260451002539535926743011856879965684711808678271008917936930854554716587677417568858142399652272251496972961508077595477789735977166069206523904688265871486630416729839097194434388762595270762952480989071480850435073905871744681266533585665209763017293860317850306798448933509154741534217851834293717229819114541440577969862986380475729358654211570390196288226634588777383624005694618664604870482825275085166715081846966912011861668904757769629316542538464272966966702546856591634179170709790375852721660931710156886246555638054452364617443736259004578487317781662207444596091645029647595952532876958226373385749776121833977179892556808444531368422986141522654432213299872447682929801506860334099132784318954437215905328766159443181948841547946909751109178351160298054745607824597883460815700319418238597794230052904049854114762246201612608843569776717411765428764240033085327597705212634848400300748421128101784787599628399531772422652689523483453978463030948044199270373213609678688893993034604283598130447131074079839261197575844478543836718669148410596408518698649459932637590029734297837119733638416379734691214400231064602461058933789261762335312910074998462409709331485382264652492013791865251784211461623485811942971957458982269248373677379612275941200724619920657380899508626812125097502369559452314833258864413444720065537952020975396495991850901486731351518109598195687443139747651552324013557805886418933529947085566865372077889287252337948184687538937257038729540045045833436319085659052025791360048431816233635756387365413718971976625464688697596872128350645949087909756974073666125132452461233459265630928358888029908714397813123863792474307470691350937641561754523107565386801177756340991837065258690416650489911759226201293310124738536232750688214749827030955510983784128325372475161469965488404257495219056316372602483751466340010554492025083921368942015863898425791246738845851872718854832637858632363569243155707638645306391476136889149752807275946394403861412170215765362418180470323040380570108221370431503601899546230178315197685525715751551466151447719649094281690954346804349549315803597832004615651346211887077409928332658606628047657899854892509258886520396187956748336897332390926965463883841175378026821488605835558124650258632093049329910306812195104846742621837268128757419047426852922265868309214297082105469372575975176929180118434696948478735635004350260201072124473173510817529991708783527540203507444126568487182014012707333059916456897528833512138866463890054511850816447254550449860466339675370632744853836099597683423899729790361675693473167044458084656898049689383627760480335392379511841670954300312096099484678253036901110456621552286014981635335946702031364827302207937992625799382112541273652331824416795506012521275422939402357983947734074160692210440586935413034290060455485616966151091517939235565251322529005706626616399840747556161292409265342001828229214224771889207206563499360255538814431913796473292313626240757295374922151541505481486161439447708184391503375595637129668920933750343455058857906266102795051632484347517785978295775323313411556403338574996054791232512815178829995016073083615911762912807140943265709421880676954040922156791249216105364614646174270237019981464259861076961147343871418287024208577454102744157251374605807559652989668103983522331773005856798736211784358073721485893715199859942143076831892246250938439460795076346481880361828367706783175298020954885880573255887648742217293879553030687797055720059330561244848166263936991471959611810810988600032990009574880224663426077308171049142086505869148868192698897864934503622373256781630869980093411805561454357990857799965478299502781275790717707902607222618674689348285072030524157074910082856597144675664428920309135370902987523038654736312562578641361947882296467413488060279839437488088867599828236051930534701304652672217445735590772535403370902678093448222682680053593274050927198651958864999928587927875397210715075391153809797413174486913411766000980892551332294603430136868166360279931872592391424354929275993507786607438760277234827033453019219188269528949249774088459798992834262074116509659699273948423691240298934697772845831203728284342734080440582279279449385500813880860469186297615049748852512933782219769723482671459702540254235044536179822421216874614525001775749713947605392725371515410220051017826506129249370210074713215702646718970176529713529170846693381051341914295151409449535274191100251786675606588089286740192896220173361061377707404659207467549180382211210880569761422139184898779660299310669338557566288780097323071845964934545679097449303139272190049957007922314583636747895359566529361116457007403202909831940409008408006455189265916040115644007700978224902795314347419690556022233793451243422812163267353732124081552859052790805333444858580117846540174528080705596298960709801527940509275683218397940646245808634695942020582766084267011458198139134217769109493631186188584034555691133503811542411654924031597346116788156563936844605336064630810599891078683964173599911243401859150132908382095509344410768769312197988782293593537198007096111765417917288730733276028826279830984888069336133917241494472894000984748321005289428136407417143383750862604881892027565094938513244107402464312659770144751611495298642336640575468116437589335038757968609333810029938311287642384822983177956957457919821467535466615144194479940271281199097752277123252119610598482866706058077704801683207381237291016268712673697468663510162172182951210923396488561245335863030883344219370043264835426428832682045085253755391670342298510101240791652815282178053877948977154259387833692525521791097260735254755618317567726589263934090236977898070488889533001768033080964352020515624465895005372854060191248104423340744299475277063476859885100620036971367756235206040881659896008808970295379153880140188652519053561359286184993498714652572977374716481459400154748588295102164232072066728177279872344476533302549821537503226858890572258422159433131778568064332111856079614287771157174759861565675947119039965526059445784239886587228092494363643338630209966115619657624250037371779165687655095648387588685585792363772629008898474154430690326056968717544653041367105232246651558722455468732326955756053401047309862796011602372894278565100868637091089758266599361238734206663049144555150539070595637588187554293181813486405153628836709662862512993035807782770529389089919949664542622271445208193476990560947875444134292560734053337063940557698527728823901527391674988890430190248277740962123437623771908281171405783186441817996291976810993186075556557998226961899670505172503176970478318494381174105275028007164338657876084119897513726133620867213265307058021024183986849152145662738263711400764695322920097385398830140165112304853506792641405855223258965232350377597738969524234776253945915473091909670635824951733894422842441690890589660074437808252302182164094347365335981091810165325498936236852670961537328994524144662622431693237259802425553316465647703219931940096947383304113797575355299426165435216249264901202435937549720565760272838440903152626779553219325273970382404419424587985859846781540788635587515948941100411778748944502650203511973915518963080129984974652062938675447263343703802103216183312660101358702610588424035217529640766864782156402917035720017055514736724330170550520652178702579779484955594393385996288966604084534992808757887299465721086827531800822034503669206341119390769408551044063234359031185562305536043937417842317487170226200062346072656604035728764188813684832337862573503838491030861586594880626236663590941386623327835927321717242261635468987759100931389908205337030770125738718912435770089268772646148830404363784732440617363888102030072243083955413007193831439679970456749005959094031979836487634126392952125001974832070209779717836871185108707618032380023315277752035894893300486819522695218370814949896932469516548422492744407152604262917839754341539982172145176473319158732484361020100096843159572114232745239469462523284332950336060642864278383011730314933243463477469646126012777763143946081809278161847363459726085802082993954311369716895213259145683275933972210865623028510820734195492283984272237171447600320627621860145163832082725642648053305440108558000290856661858612943374585011721473586332779871910908665438633411015793112979556722608816324261617218240188630575982778748753216923065833352233711992412960663285551058869264633439446795915954686294614812267851897476985265416264653881588951986235110499785126886178087546621762307192867904079329799033213058893242834314134564638404027209296264546084794193282406062348821824423155096768904504497061310235195168378920891210746365273129740636575425724775096719685973840576077625549226389290134994901861591563708501023107317433094683524423566926509537438379112112112658879915751136317409207119917901667329649860100149711346557414843299024723560695387656137649394843018433478356786091791751305745282035536083934703526256356798287317181098199795831694546370237474853953650490965856766206827600821037559521394063663183057061934454436641882284337706578013703943005306609352594266289781854950351898955694436213541830663431623291621695983012038496943108637122750855537092780036012131708176091919272216046545333582484727067579416840034091823452982412452608419924000653635798647992947937057854184661089608239599508185063613570334829533970740227350035397393155717000491010204512679354461400115671394772335434139709506541341677872172226232919488944890308313364141651038254765895622435753193383680251800772959113895329441321721859304347096223992276458699860095587401063244938903631524427854527566729843925507208921156170380241316676078047203333145097818042063695366164952250125868882199360300793348864318938743538350779520736015874513241645425213979256676823982493109630427250526950543131849623812953265194125672661660564722217583709880675198616844293991683931488262348199697465820163923974650871923890267949940031368580963834738838382045223106716399600585770193305784153142999204994212344264185603545510277282390117483700082920984635953011329815361699580130063349632704773033869225243280908569596520924798977694322277132318091865693169389910910818137796930753149498399877281880235453475339256418983891401212406155809988252657479354535872175784013808059440368582374626977844863590704640726364297744401319292782694774852043441693789987538844035071829495800277347848392945872711029439190143738835446051406882570211233732353055205031785601381001751490539891533463476060914684491865795302793124812634292938729258908548785949974381609026349427257680016784008319822904823431224402746515750618877298990789566549591167421981146525982486041286695660346918649040893890529952835320375384828169153724378204160041109679640628149360050340719362200395015558988046003444392907438562636648996672619995607099011884690679787327881837494215470994195935009191107945020127290308719121239731563844162352311262518412437733499009201665458264015815084041372907673911545500186625364412514055512709567948836632239882862499529369150873406945635957430892689287223897788917209404656390186123754643704792312526659721911710831620882926714044399797932937935874846204682834735444913029508832604600747171792330300686670068879045983191414914556440968290589354551936445290932282717284780345437528663826658911009721234328805723634742252808426175723315214034767241558579691071299808539939227912672632135448482769304015962884348742552654461754813556572068845625918388293019201590573776635466348340225490519233570427113140964091080026750991318428149521130592552801650429338683804247951667750614813969302526367422406457815563011843737461106370447413823835929427571149495806735636579636505246039196761251582998379113194960798374548881126167046083541577264690350164040695374390403760483232487426907969264701730604605917641115872186492751601401540768096893232247106816237370071431262516928009116525918031071732149607695717330287664400388449004944403498864333360834519927216481199359488483600349580811081108803258488028117205380233106944766633970369772033836667500635856303866070883281834303457907185374443436889871019188538271949884260374458219127304807439449908032641760467442676895825187712284759765538892708197843487425672698947785306797456136861074026466056025262726253521599259674374717153826626922252778432014097817849155420887280472049764295288679353452257281475683610989060632309587905680120375957627610190163630854609626389444794718618646337790455190841902049220437390756944540835564472841204458038075119485233019599800644385006444878260393031248453798817756948921281426853927876203467130843966604509890604936184239397768012564657747251009692110704436962950828733238200269704213001973708578284212609185512288364053406427420303718076236718966075921928082423103412412810073729438174264930535115279310370809436535349704372122092772808311205709694838483480566612422178866540874830727924909126015149114122361383532493824266615853045739591845281785115924981801565811135432910818553666710891431263810106402449405293846623437189678807007567580086177116082086508543729472080209244417461996105698618463632958636895512937468286886682404553092230351494222523983785368113123054100219201694508508160335783567635083767105664768942661296097468283896289743762752819459804356761526930363403745840765716926799790752853383204561001290717065254048726204539116643589665766760207503852419405772018558805297914315650481025104791231536384841908392109956913137298910477627531090150672724521128080344094934375618956437285199128164017185489864055505480273524163381538021863534274161007995170494627712376739573174171577949643459882973059466169081648635125606820015220192986268562363724238995378028616673102128718868859658319934729971451370770952241624919178579880792404688510246051074486244400907290665535504891210734791442862664527925011154938086489761748830213420041441410795441427287670967734944140175009830148176010626330199995334445025129924805020099189346881861627509479431811633412006466439570334316748863076684188151895455803823629487713358007691599760014770387051723147876917505701098914898156122133031445729257132348607973498863402998273351611396186096977683334633642642475919666944082526369731541662808000659382179410786966504805500337258129350693101053207255202279770041500327998007405564901936828562060547815868627270776451890278957005689876700179680660140928575716108494803686725737227355919718772745097589449324636885629611882714228876922922654727015549270728493342955748787958683652293011241684802436474270400250339991796631824618261137921681148269031570836386231758265876473874785409074213192879447679603339755275165096464233516262846292240987012113005142402910732427670326800972269997556931810321969623075167947349664420039190015168031606911955116810359733062178050525928264724932867089085518874155222323826592938411100883237239419184717929853250063224262081910303242946266965212686054995542914328193708056213167768755029525425228121730715134066039136166913974313475237170559641391942930559556154768506208515234225281915601010429907045194668938269933118586223266628686524560667715561982855423538455341489501453565071388554543413749648778431986954572055748058525780086179666897015651026699461670974852804355186180055286280122388273709964778105732046855525585709331418308186257861378324726572970321067236186259757164365173062037174367307490246762922896153572456886183623969935172618995367851903065774032456161997373528485650562680301728277393976085706730015645692751763089210426842212469752577387265542210891229336053451882108895436093074719896835353915251316716889023128918198142247183496249375669742767821529802640336650566896509306560107164502860459284808453346020497140593686897163253179398741826121969231913899808762316510754425254214527198383609803492073431918205384313892349547927187330484542497846422247526867514548760491877160241712023567624788494434928841060712611775246913294873725213093415321346717577035639780758614167683275903632702235317671179998350358779664152708154826805626435810369727777705898847828223156530818093922760967429057841723216560880367472838031056702612438620596147962493894376430630634116658168081135637041043896498551610069029594620049986471482218095442076018635583292167262827239525881900914642855602062909618153167647301300257865177260440887047235966117406219906959148898946796785265630682107773324332816340438606462744761386084650946327756033944718602019303703826129060200685372385470410133550988380528141702110978409620807711997699979439215477794486894243415014562775659596501840302648309615813601078200240905076464301671678264357564791487825545492125005154563158399916778472384307047774025570427119515500850043845083569416806784433720974794127733799440155379312546033451236785670015641768344045426759121074314580788072339328233175418935760151263459569043791957344628793101241465836126365790826768941084010864182013856048108214272807421492723962155717422052392349992253004762661603830133636670865974026200369994082612122983027641984627467154924303293174679552820647120298635038596422626633367131070921212257380172519157892095091006266106336238865213631462749009201939446412199279992873912379794575302535380996591374368875867370683269214009907039303435258154034127358427240703569235722463117102489618311505265338894364396016170821820757424555729645751950938013045267030484071132579919704000383695297637175849308803685050271199402133951319424587426894270817726814085078707537025481185285217124747104571388430808225434616852501972955318332785066003160125045393202099220242221786632325664086168705178937882742242277165746617028186480005318789740910675334686262814998827237874071631478811776664224908230911808824944065082991981015553822387296404044844386735156296816936867251534686678253214752937639262632738482524494801384379332337480470709169945386371509647614941509343253879599228405683359341651150369200331627869129155068673882533164331711203264432784443794776075453809372085505973211287995413910137967773765035075707572416004974965375019430059449672115197114300308341296634363994018174330297705356895856527977484502082739452667191333702984833554618443509315932958410103837594032571605948350008824847778370755659616793205222944442367310107768568426622743058753667993503486152316260847004083332330934165984957571364648033739868094656854766500386094226118684316127496335727719622159618075553247931102450101054149694376997536689230943684015239637005008436776961362604652305250764577945044856588556303130337937637584568226098090221625852840065007874359290321320280588570788290885914502093892780043884142856683543161582956314949949293426434596312557816405452813904309919340117762606091291396350276557361466960427486323083036243880609805853987508200972976388861815215602054945816834928203725847667673945028734389184344497300002237854372859747728736574566265858956786353570529323722805481645627762807379385975585544049928360987093531707819283823266536710961820867633924800590269133451145478524723280221339382378445922687713943891845750409806611868670907219748024381644678781086851605483002667174026633942147115787092007842782089215280932470301448694378940120771506628624553222556977274369136892021197129214123263594672095597217355486420574693213184565388870349400407812238002050221101397933292440154429190620445874493260329716007771129191303341536040030592428787830710953329225322053382433402794995593643743855620097211156641499198323985531338448063465927345270793522844317122045095552926565677044820428094261462968855508105089039793320121397450575464235778223558550701675483599212849144814888133652970620146615312291602056113346547334646776467996624798663764467372375580618750128640544861527721799710886350650036297025492806666030463115163910449108678407169818833956842794038931950535234731256377643639809891076870027413672509017278335449342724752031217068013036299854864486679298821254140700140508370654161486627989944339229164887984150478813186460524403077637832381364584373993133638828939106376978010829730086696447469524751600169514925248184909347552458371906402894112143342913042425119075991498804897744279855393295019487193322201900767227385856948221965134031470815752979578234072872870864061610195683636663998136823702282925492401514502031130436657684615954108211084629706091437805772721273839178639131717887443026589301934722580722282264602230721192844748786432122622694374886983998153642178727677253887329096529940391620545690681265076676045454676208253215929693285211021809327343955990867532051223585898112036475970871713426656434583507474132880978383694284993881783628246832043836734870487600118712075146229509088907333216562883425010474157959519802753737353207074615734359950917633034041867497697849394985536732586580997316744690441713867540958059446378852789930297620222604833786957027197184006698392559628539458758277975628750775171072662357262156099911422044199119776211668331641095917636420244676259499477748560348602202823573665983770426282922735568820780900244211134532936029986419370700261488011130066473681600843990864279445635536649030253558266681746134732163994916058042638442347875574571919294921314038478195707704847242887613666027599240203590166042241934340471174690849959178248913783842199708330094706059766141282204703771349261845465467303949686774733804213775764864721402325034567509568877330744461204344698138303194549623159225216894758100480008789347237834635276279450652193595454415121670770058993190908223195136491307771401008770891360107630083958316519855924342524280718239245765071497107790470268951510947850084898361951159837168287131598618856023948505123054067976955802164238423731900524591132981388533153613275526318590113074530233657968268278701964894939858312848555329420551346758763412603037648991945626571950767817366711356065267604903640125757089182806339341468885796378166403252061915963576346584214070960520321235843301919111542224330257078627857685831760336918405043623623218177322286607121028025353816376982875087437289188692242440448124529064238399893918617384521476474527290475856945769548940414733949928109239080949364363998094818608866216883201409871009567794548425101533234569090375516630089610312693060075013396845329775390573341511572845753442124574506855139857087672290632520712822836898675653699908618283594666925898009548939833508608607260599779909008815361203081003227157528415246740299200554995948799831259966967806525309956398417425352543861623538307011474134635803745731847267250875746770766982302626792659921211234941731833882053196324508227865888959093887982719859970809616249967455654558771431045850598961881187639794534438030685376039310828691341548451406951017195388733834499617507054365137344410662419697760348536748426469448604793483530932640750916469203634994632111695419146368359339833746929053805269210488100993581075171407008234382621736446155623650688385406664750263808383762293216297895345148809644306105202242490456731839143553416517872397784142627170207117616546800488510968748159534050146410010900225410460505272717611800300176174751886985947613572282512798560845822104300231710375396317277094328371470734178310033428183218610039541143092072548258959267043864464067019986182140080743256758222364998974188269708680978061703088007330850301817979954406980309944743153559891729237589541344018176990147496150015837818215855483607900022663732655686300110093239694453332639499744272024497667341832341518261996223270150217325539338388475444196708640955072180280866107249608125454281286619085805121430852989367325716034183142321846736567033177166764958622722078083381202042487964418622425320574164505509217667075489286611913040599708716195534534575866921679871342975350542397202975526974957753497844993170014618854346782804011500877397090911335389729777688425147425653707225659768549265335006445942228732041557055574363071671478315218985234976551488390132425423807503054634266265542137826213300655078857699962239752567691950051475299821394882915795308134086830649337794708684433794705369036429172880274031644626953416473124875929802116738429300846368258041108589443155064127547730578769498657997299214316929898935573100095777193327343666456136807739936208212526323179690927158138732929201188422171096903075703929226961371897912656149953213489477096201294742738385902136137967167055346799290500698397301715510874102818517964855215115172099528516768891486769291346230843087259403358807539071183504277202836323683179078265380290655140041083740719498772639494011706018523988193688596387804837137717786509367084073068391855320094340208363746054252695211873108044187555617609150757296353758504243240978194894253561488051648399185550325409817923941633018831897300169815827459443001516839520793289738300462307725198142286148951142478439440317937819911800743416221271375057013264558879247432237718340532156058990251445907985761617469374174049678441215679716738971752972094145855349507157006920996807623674653318376939138922242997007311089636286145640685321012699136080416760311519093495183273488320240136224855610240134003134626860317310814142381469445745744312988970092743783644851419704393831404193089809870336977181337096190347252542337246633577184269223080133659191757033533670445433368346875296299597712382816252387319226452809710623121348465020836521844818866184432708251643138892691346300397967516905108567723009576758783140251278160521197786504211118003803877658280629033901085979269565501357187891176745582524331542155000436234325332651773064604028627338774142790245242183923664463705762075155544467497176172763469820054986252146724511695147486423691645218403742894405229905590313564067061881281936147158516087644390217739145563590052556448005684212375509470449959832354588039994963950899048481525477275883542383419590884309029779786306296038796100137911094697557722558499278494833301800755207967534234274887248989499965603683949638931118762378569545423932834137939138021647616118285271041532031479967768967462808938358947703060275473914250749974237751018161294576026327190979017858527604259806672994861552349980466179473571652046506342195244663206688176556106240872502147025613296682721844457249268312486837310823230261360564387698331214742713878609427817727747014502988707165820279954505779956773797633115663620397397289508489929230073829872744566111631572338222471484278324491268058258977023497243998988844939067198209483010356271863466864726221166286092829190808860962867602907791265041424348316701049279913939388016706714493232090945822681407566101660625138000793051663759617024346749625055889316850459372609378181761805626424927044621708514952079284031715105093449061273621226386882727965380249642434080605888446776533493338058135061734807525410509222833360336289595102939226655200812022605140049324644218351814904241332076450281003498689306907751777566101994377544114969360082451954596671173255725992859952119981246044186943505451985484433714684204234607713930938280777325979074551646211563456576877418149487019493256147325630113073449915110046253186604961336164705987026471007687253247036526105011083795161210599213425560459092290947785338107951611009854710399684225861046708990969462210054298677268685138827493436368017381290491823802175884434858199763060018402455043639347525831184432193636078822342855272045714074737369255993115783930109736819090487924888661206532460152000335168141422972804477193676562839111651217927275006871239204489224560659499951882162445251561519251541248698539440557530254984069771032438283335078495458321119998635017531513927437392901084739392972242542692195276630589584769378343518462089531228431076626920567680291911716197358785828771504571705365988485439338455687452361582509297690532338080100239588158759601890869057946746760040728484613767290873389593701930186035809192800969562487800035954203504649282600218351160276500359007615300515757508898779709877246512623459434858447146969974708619341633908471726486305914339279858862338017846384694050699293616338270067608418255741154878091279432910863846947853495266842413245686736164003947230214150059728260677166998592152224446922722452662753747553137462434046326231320967634891045845244598715834085735563556630887023572750027903905856709684257476157704227887757124631483082575613673921608702672850353548863884440900066221903279112207312376948419523363518890952580963345764362987689019978287277952578086509868522185854654213618794096811802407819350928688707440238724062879588975043085326106396878515638060391081322698344181591025607591793497200486019243990420559792338398268709614517166098033509667819207870694670445052964510380048754656246144268720559930338804756155067939792354864468392917295248902411941414395004555151105274496092565798501994597445334832292324136115789201898749628600240683858562935279953952763525046396599512968205865885738109875833622381771863255911903200835095037665281452075692485455860174792407834667524564755230285139131803587488375127641654069323952591318391877310092234823466809945560512533544279271701158598689104477558802992722469475457343409971488630110503021626875573525751934778139174961643122972879514029762422373759765314287522934382892975362750581751132453671903657267884376036661342843964219541887566119884579693381298937901406563419516192474661306516511725267669323609419087733340690450558165213454487297074862553371635331581087738855095802330159523967268648400713750438601474834235330437085390227380449117576988953079133406811397562588492545284394178380123683157531767298914314054054266990963190681914906510208311130377896728687657942468534543011606591877413631321762198303416289445543557360297724554881458955418542210450999122832422240671256313535578227419398806196547685103176356379705213628453476087647191624882510939310918226676457010246503649076887174058871800489062109983884602249535444174934077227481562851572448302453765047321847532378940907877851143226417167207865271313548633238344810072504878677344464081608772771449481960020157980944682498260587592717763415996642278042914584234546121362414297976133124187195363825151679773423909103521409278990450682793503356406863155407032340671391506418478690860575345041992163225409754423164352434991500264140292956147699696135281539726892935453106876852742287916824480432608704463478624349069682252057662741054671106465204178936003473244014157701024500525111785668386033963806047470587868478677866005941018778147625395184562630317637358327298263546058429323574557986170934591291167804403130173996890297165284394825291332954976005579513856860519351140890707453397241952980145879886978105344437928598187338219021315887361960592742773315472002853239408397789239344686421601638980426095208234422381784439647101937884365289752765795163630751895935377213417194091471158931428412311647990508749331887496749119177625623516517274409813373547097884797343831223446489714488277146796704707528417151005177758584705360452208655868043224502154261560328310031904546602778549929217020935777114230574433742647869213136054226574013575310385064398286790589577389246677367491487536907339515858623562466719142440369524996637703770985252803613777816346232435468253332516733074960201249413720878443642861735790578481437239478915479884748129025766655262300741908124515803036992955037147164379926226167619218381593549727846720152665688420845010280046156910091842431075734179979783749230883487520580468055061820398994057860895824863813246156474145956952950257440684073664889904226040560602079193578678161126084813574082600007829756702414971176685873724094152073889241847585711465880388970146267953322313509070101452690127057210105779022277343195276782480856529188340361561348550929855796859839712262320837313667484421485838926042660191699304201533766491830909468499432157653212172381580140823486192736058717317466163847683264531184832681703369211623877310612543643962337345035839522545922383698407681015377194206583397155612108653083191645988670212720030129762880942895247190983775045851394570956574880254102538475085951906008554776417154677487089697871874700602935649391122591469261263511710087692787102960769193239654139233235563061366787913078401419567070881356320830880213526970725503189214741870398652371928414023072687812809490256436240867996383840921607586376700609603866327956945454200216914054497140193729992601076381319927344795034858657960779221356583223536408862834118876504409798505054654654340618816822304137332216455898377580961438429059850323819755090293443799336410337513679189169504960056663576720505647998532197059594358470817219206875917266453374606287085863099056469497814288864827362802618046077223206196839764684021703896226885242604920443377925672122905761457061866837202922236817090556108848373230317984179859950962146699137111763195890862038319018061032059854841643758537559118461458584528636882655994870662977243594811242593731963776359913818723798612690418725118495457562018917042825869646026822042170164938176626617811529465195189729743965577948535312848582920828318037995320941088406331146501838211945555989460999499266195976995452899102082423620367295339270261124959008335815158764211599728620891355269369880777066243495576565602414466461313951949093817390758101911627280585346834490256559339783660736784597741875456385440960717762071157152054663841375517012505847417609854817536768451158381471816080654008826680154523338651980071906453012628196539678057912794047592200584891296694888963217168962672527132555070744099176536736468323874720058609140609125633443807501075614691579295085050547070656868116338927157780046853815222838857263960105057058243307334956179789792708461912072633112251197557082335365279102007024268161463397894521512991183827518360244054304112902681963889699612182085241809012781165396831190827645273329640058674414682090257661164073139455063771453745016860874539922946234522818828837496340942470763000717491170722821267660042795470521180204638104755668948924724039745847695888633985075452182680439794593084627425060093791510138248701420978485908934470218315026316537964710422414848508953653174885833202738382864411676022315464960073515324718648310766369966940592029950073626018052003382192830878675968406343999421251846765507910757723562376860823556630936746998493392075127302143459749574953145597189522407961223123553409134909993234776071487196398726480243384457525538908352522657598897188751829310731782947814194860357498926797639375692780897942649640984709512814089650303781983675097553142351844585048052518999108785885084128715673248602784852202625103212672429865661527695246604319778947900124911930886867136656012397500815427149001629595311461521909491378190818735821252571605128316359578846573762774931071481719546509212499934584164870580273389017244188393954501649198066523773617773603148318070338133033338972591051988165809681695447229880713273435088736826826770722034381291341169095581164119393086610843233071610442261294455334123815147843960365561837877205018038913232670227465189079832876850186118464035832178304638050199921558206268148596626835738621220408323149112415323716735712682952546582245705117230412997688385500025680894367542856812391925356804836843226527830989696461401860946353979452432274274964920385141721059486526602561621700757001951723017250514112376787574823102663139662690924447844096274279748103136259643012732398383704025649960014459222375208937377135086960530601311256939481230368773686301164318462671604583327430309190082530180667483584749343753766607113653497482984301901089950970913459388149100613517153938432877737734771821280254447470438819087196192237223304078940382387097398511730500403660027910360212920875397242062759420082766066071073341577474795254519604098132952303380378722701930037663925484469314023785380625108348136087828800437117299693827825611561606438539305841566582411873588437947478804984065159864435345076088007997181939891110871504386314503554946209094365654392650941459734437752499801655609105275249481281179902173573014492328741267556064260298802557836413692016016617669748043542306072551697935735746825089695874826948731881544269818023315400606701953197215378857346583566060188867877883402696009264891214523761321850570390767193931751146569912952896078615794446670090410139420800171065178067033197994516163258550311481959276610659074044524985800229299228966543054067588746481449229311460408549457355981220577363061921476421011073334112714243475459628100874153150699878674569108206416345365903297922921012380381007569387269116011092957834426860655788441475726921085179645009860474953277920185440079838954484886707511916628030508605658217777697998220345113976466651924617025416334341044221145733295408504392807954396151307885264705378477983896727073836856837620235140207456693911087053479132411488788790158615971668352740445806936367038922357337268462210096916521348168176682743961853038638673061119918119187716359164169444571406379455424290874419543670817530677676541875022056511296774022477450002728679040664986471899711013362194181815184472591061447488424875027349454680510566851684048259975803596168445168373243003982331546478158041588277779460034850719864600409493977640398092361316514907508342421422902139051990165573319189692423186174767104600600148134265471179386165793927640354534589543137690424787165731974481919188300904505418400996882308154835099253666611841538312312998231819699109801429636853713921345260197299766841937950906406548032602340054884977654139891095815240233234467133442021495220744851782237688425688959031252711264762708767338357468592642121004081137201237521417098050822536684007206712882631152148490890523814401714196984944804679489675174776184049404631094279956737122753825775748085792754776105710867256129753274940581094794847870606374893196903901621417734653625666077403420493919792655024777067311768016577482896998471910716852097033010898010186445031926303162374116046753551168125391955617905343365937938089282722859914768508181201172867540470665654742948597222563280678451402182626324367627789943262937705557087265579856057809551086296577566990613910362180278129785662042808063521713920147250640452588776439271155252643537150490630447948841296952179190073624651786379689854808868529795126378890858504242865541942872273056884845871457476143153314718677063731935291546180195217512217731081929119956154340451468735032164383282109523299782542573539172290016513396984876017270183825894574556108791029901424155246809340828709852267349158535664375031049444588500491485483180968913365990395654771006567422899781917903880556974077808484614702490694200671838213724208851280759884631990288078363988372431080994688444143679764701359755518252438059867085825863935412502662727657199067541943193285433812175474512578521148274909532958863395251951656595291321511692041940837930800910247884453729889188341633145491480408091982281173152722432780262445509782321678235044878025855705718538907483505898554256099969620966130090965658274503055056304302205589701600825504127756601491826803917988196135982155843447379573702413895350487644347515252532802411844463140907913400762357692797913754689226884736149676856077439534956014628788995262183121832769384699326248204543358092547676462813616252866002903472891134064144250270608421664146813965398780967700813244277543465345874410359433720560138908410081960804386664051419536311000388461950017124667515147440366134559808879788950521931999172295176273037788753694443728709322519027105308073803344250662527867491541720713646960403245267328210151103865256574620291837156086589496185518608531139968035120710186676603591051690907519688103777386210264556171179825957862984636184672745364037121364433025001866944845893062929771460245708428537857217531391554082579635931071315989384210450732463188365244921677970430073450551852731279385366659239344190124417726744852219108768490083445392411318877611652510551507575859804011711680935050414745944483162589233546375855776767002031155304479918355861115050998041016086837193337357975553651024649345386759740045299465443507262891914362838579825472072300373383314140809137622653162428553463542462300076344744853432331717707644082936407500448460168077342282673654690211705120825871739934721949817495250924250726925642789857144682543911295027774569440308524614307137969039330836064040018859177956858262686679114699075516215713058458238926200549247748286076368766901533212848354177289041468683550109704090524777537298208489933703135462881564099431841848525123082824584262118062924394370484670057600731014483833794809349939449513215416659281982338744013219843698812101653169164961442714143245482547387629724500143589118257677641415351286224243126644694731445894464907012370826536309474640534463336976668148365069960714298144682556320014978368933051669087408158855984456703270505669128365644980537540195891176195932619380439852108327520574536278469874845019532470297825798400478093569804309947662567686031949573083415953921209066913357170933142936795525992559921024120101313417481679563312303503160869343508168983778370718810001468711081456752658660638884619648395491000804102621263814323434264516893555329375430827852957296723644138547682740396981624166189947325058111521969662924312118815724801397142272873868447289013964235982967010968586926180105408495917618647401412474267934889758834498858014189818668698566257552425115133889558784816299389496397417033311988726873131528027212434926334053497309720298910228004908373296479534316950778781520725900232954876062179302157414640607899306414205889014396961918180959152949138198462355194937194456512982188462378681558730644868873850415529812634340472775726538865787580204790312618484890551873888725947776814785942928251702376169625542673210477924328163129048539475711728834200324746845178811691006259463580546059295237249941449674655889780033821763324072532714591843213015032197235641764896047227129055747346130958417293148044805889632654064150538697516962493630444716415940433176064306038719972147798773892848955893028582296350937617680827682919135911466714042777926514452512292960800340786722340541320649179899342782139190630921424731548524409813721719049277450147536299714482855123942922188882872165823371928562075908049597357931836592697073626866846662967056473414696012289054649334216959657450094861720796723399048221426950965351576190183628497897472913885974861195482287233272330631073272906238657963912961558017968672419636993357507327926654753450832552123516981295456326013018790230598241273242036157017241368719980083222349838069075595238052192860532054572107246906693777913015221780039950986575108200809776528168571461898916911635158704269356305188550156111768320987228764381341870572861116475331926890642183771521971835146026562830353905646181730936806570256764236706591127446751335707108810195680022570551336875595585544273574341544072591447472845400028098970682853724683437493734410851193196097453241753890472845085958747424602856097878528545187775407997154621177303031339100172669288976201057951121885825950956918526102107090036450824200069159718001599236330078833562106398636742717199392085787672934536134885946613681541796565247637961760715070517432423497976271253568381906775894367733653120631963151801986593531388967149711435973775550871188943713859848091954630234668612328899619278198946718625627630057172226198717255668223923904890768146987080707751220177091609648770120434768279559338063610192024519833268119705454153308595651538813921780342498141963164905511260143454931265701556562158264090824648351579043435702893453635054819012476149728370681444278505199006903212896548769236882909068546671150995589760754891507625492685131792418299782542728547778448453461101792924207968158552174577602546294984095234678192840960476386210024350185606609410667690932843429705931268359659552164788030824711745176610929643714782697763464025941436376119883442043651405819785395750254618094489169401030013543819259121122854238722988776519602373221724050916405650079014770648187623734031750235491964410642041932852871687936595663020518293155034697291267571007407824355433018154958785858475434507850904892164905683726569122392614760515053956908698779269999187649883835020011034268265026969018909896424000140656288941654229991152436190033893023874485198177367035859326595056483973691102528528964240238162690169769797872053924417306882145869496570622068064152567048641672910089034466482148259576598883675676559305620962774588428084766784414116997805736320364832583212662721001886011390639353175491376666606897406774841966431435260003955902744717191497660803060479889578097868601071357264140408520715503208109783638446056461520984027952828516557607719738796731794525772221096980949945273561032910012006494033523485945355873048645021280439047580017537220142423121774893185173329466211269176408088586862489556539533649460684315877915679859150495016361992776208222457743409154600833608278358758581453060018874654806158469935209424129086588097007658952952942711111315126687583428566179129561920536410044079683799872613222554918639288601507650870472774003701806254718086876319171696486793614727732979757046379755146280328266354020758820986430077712971580486344586381703953969346321181169192104636494630154711153619666625612026906439506854218786812240993780516646058740408377608389717211889712944024277671668754396479044681943854146770948657994287785792979803623008497859770742430848349599307423855758769983547158184688235373094032850678988103388739359527893501071404914173640804862181613420873011412458842231120289553227515291208261892442680444656692441590713999797893022991343828360615540663044391445778085139945599094074239762612456772578548076328639557450793670916499825916076795474644981946658952214795605488453772955033488494865214498815920404443957690438775163101524744668822878389148182995253640866407630244850888822773889814481442580382544887918223306200047057093191744017116590681555324789182407775866665100435926469674592435181453789517497170913007733429647167891477189372321676652882834647772070310297542094397523932163345722780599675988114774549208494809224706159973495073321478676741593210626463245533420320135047805255300115734651077808653087217338440136071977085011680526600480673446362453506269853330351107802011024714941904163599640702033334178009708280027243676240239632839833190086800100058785505242035602151193311212381125806324264054598875454442839222700398014359114677186893678295446859099994129657734990682460457444371064184692311755752541422151199708105198384237430802858411911034947006709981625809080232934922144135663658449085571277501979917843893240809260006508919841301015540362593229032108072689825169873993483717822344427052288062898849905137744969579079629178617645467526962720055032628667023552336797726063643852366606175531613341317196197864392121268769055177347789594578286793751698667802479410433905992805940732000255661814631962700778143239536096104701729340494466620042894434699772502523362436113819044501776630394960920395546918993072887803159200038513497548607143872818383086380817680722559842374631006953530567999908324197175226060014824313203037348268169926095288097144322551789684890648663457922550958843785072651487101659277551662918941361681291844882428584914633290399404985318303936955530378939063462556418941415029264319234049598323408367493224900433835477731924409751183050397065819857193854143426088211957823771085106209820471610682278689620969757921676775517314616530623257688107672947682658597173652390580624930436511108825021373017722979145548745526360319873068471900353622658246145403431408136194441206504994577360905054778745696917584830341379595574153259059234508991895104113725321454131921375733178112506607565288638393093800774772362121100123864093486021508415014831723894064495994297265569568730807876269888569731031755846775128444574553397997813792654431921834421363070757915775647019542518885598183471508749639882165975381022375915486437492344074425523139962629180384112629956456129401567847766137658011123670830980985007918997025977030110831796067951569965572007575902702144061044911452833206811316731088885223390097768175624261207932093558751202518412009102502007023386813814634972054308310984171324107369665562496654937381813957760624019775704510736176400350162938954403024939727373854471651438233295189222680764895418150428010246315726137001519913632525676047478506575714031274113457537113188910649703107854178914089554130455302878654582163342569616634049525997099279447905529226719538257258587393274130154916630672048328356066972804687652587441088521105876230763044801393780365032533142790361470708396485178111545244300098858104533794718403395346580859879503012075351566479135465214976248731740221718399842254842989306171139607700220638169440749741888701799889068347341403175965274567786320642727227656038739437174585149316301185870988806202046350716742616122073255219743263265181032576138673817502982223737574646083182965575011782438275471222775799172556149461261270904660505267167223932500389201907340426107384301197825454396941178367831034191888309584133979272805382546626473199829417047335138373106220916975733273156589158399416510189572510284174693874373753133185652978668579739303451944894907199782629217544087253869509690256364913361662649103302968370399404779514747755870330411967687050772107617321483418530312001893714042946479603145311350066416700023524669310259433718669444400963997152321649187814086836681368125870117467589428150519860600640710086475174958709157959905729767405260915067140443398013208738176994367507976640722447299842158803184305897947861652814216645807199421852517436374675233515223073367877374551529844461509573192306345037036313453322168768871805379018319904446550904855025013177324986195190433459157524173696890570121205948432263283565890164054944492494351263003114712693604264490550542501889653141667181313000917724453608551190885106698104041467588804923153077182674791076853804068398921227580309702149594473809868273473312340587938036654043442190717164560665129378355602095649072482648351965488556846296156897637715040962462010579776075850857781777376501426558909658580563413806753500690392254667257452261154877591099601883907846796078591115005269420617357121701976371785105596442959618559023720438391967628002735526981355323275637931672939282477623932022778544033100210379546063147023481872886415248211452729969152894850131780271188121472084090813830635493161325791646756216819484619434213399002311094007368175499040105370285459703462333608878126345166364275991309512708416171091252888271665752450769886751300197665033144009722236940513663503005517281624212062955587593905225204836125872420287156842497966510035381857017390496082026717117234446921374861682933593570817241106919584808267765255054877674327988929228526399335672320294573301001520843029197879539804218174400897658113932684317529388849754954547596665544635912594206180442533467344212032289410055743489598571841851117728886296883795457231078767117936640524239691929950908446099602437176001623544091050434889834488714558740591334803757508108213516471546244015687292725425961643005362084352528358998024484653362422817109599601827699239352698885776941029330533541192182033534815267864184300550859195484210442525809817478579086995239359572577878359857446016518293777772864837474595440203648840299944295003769029699812826670409448793305461680584150168511183561532408798094923463652836206847759544700761192784929675948448992774264756317901512710819515240377741714381578912318556683115599448809641013883431262041387895097129237574051734778907972947159713776030845364618737701437543788226417693517009464573693269163629836955181552453496432755298484707463786288236903178335220459845956025360838502442970340189970392285865395671330968107511680246013657146012292592726485990026067413336342912103988713654170966139605163811546859346092725013904046570958813090147586439690356080526002237067236208245581181104709820327435557479421048052102582945221727461079444883918690338568109856888473513216220902224916728774326675355246632875935193968645350659198408253015704540743454421175757722114992310792258682019154490386219338234855437019047513801817401966723441526965608853765796515819930902713986177822928103138866085869256177002823453937381750059810088988044992163878606494194942003728500483586733358419306065079413977546321632519557047405447758733069812177634710857655153708861398629124189882384961710471521696214316529809386737702792483019120104057983961636647935371498532955879072997143024922657859098831534282291039354692521854358932834033079077749660374347639359192129174608455854501478303286948350836377823786093757486840385379733704303180151630575572859840539517606670680890940314761502410867637720572494875842467283500906724147538683524285131521824679772373745705655291821841553636624574535994728495285140266712799463114681763773933801244847002709448323561838029381738291966632458552074655518389534127169628384377734519284699241471083404269760700018182204794404287701819691216381554007876115119366692872982493573130991180381561849948696022256167794093781010683628532555609969925503390052027633657135364055586665400097666209196786378997827923885723733291301616727422693871941122400000852137552752735919034668718884001271277947100817035228006279688274415192053253373855168093694549786789710733924396709597311514345638326570413189498231548126537259395975675283269228288437973242922424415919423396209042686615963781323856273642608141820472118230036648391889539721693265027529331515394513993428691615334165115485101112923744798941721691321577793251660840054500252718711487093865529781654778907992517365552078125868472676816797487586252427646134096661776029377149391080559672415449995426515067850638413525415089100674005993952074787337038441672320733134525556389880446580080915750147942037139997249753619127876102451083024162313175339423890521136479018002018284869981683123004832474627600914139214330016395652367362789835704364262039618514932181766121720953319121045210670266874090641919066784531915512931161152675968995662200513952927276870774262354013616729425606192170846845084136763603683726050134796690309333172432767501077016178941879137036576410003615620374169634228827967205498547282836561829082987166479810334518370009378884652334426945447921995955901150236225598284371072480043530582240830473314363170265028896465972017758373959256362854059666662550126674583687965776797215056816760067845756991797032721491730412298066456848713671526919843460994186809763222427245889347264252765604238690439311764137594322453250858384001622021750225328190551116273623414797841749098958001' ) ; diff --git a/test/src/integer/arithmetic/sub.js b/test/src/integer/arithmetic/sub.js index 6b7a6de..9dd119a 100644 --- a/test/src/integer/arithmetic/sub.js +++ b/test/src/integer/arithmetic/sub.js @@ -12,6 +12,43 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `sub(${A},${B}) = ${C}` ; +test( macro , '0' , '0' , '0' ) ; +test( macro , '0' , '1' , '-1' ) ; +test( macro , '0' , '-1' , '1' ) ; +test( macro , '0' , '3' , '-3' ) ; +test( macro , '0' , '-3' , '3' ) ; +test( macro , '0' , '7' , '-7' ) ; +test( macro , '0' , '-7' , '7' ) ; +test( macro , '0' , '9' , '-9' ) ; +test( macro , '0' , '-9' , '9' ) ; +test( macro , '0' , '11' , '-11' ) ; +test( macro , '0' , '-11' , '11' ) ; +test( macro , '0' , '17' , '-17' ) ; +test( macro , '0' , '-17' , '17' ) ; +test( macro , '0' , '22' , '-22' ) ; +test( macro , '0' , '-22' , '22' ) ; +test( macro , '0' , '24' , '-24' ) ; +test( macro , '0' , '-24' , '24' ) ; +test( macro , '0' , '27' , '-27' ) ; +test( macro , '0' , '-27' , '27' ) ; +test( macro , '0' , '29' , '-29' ) ; +test( macro , '0' , '-29' , '29' ) ; +test( macro , '0' , '1234' , '-1234' ) ; +test( macro , '0' , '-1234' , '1234' ) ; +test( macro , '0' , '5678' , '-5678' ) ; +test( macro , '0' , '-5678' , '5678' ) ; +test( macro , '0' , '94906265' , '-94906265' ) ; +test( macro , '0' , '-94906265' , '94906265' ) ; +test( macro , '0' , '94906266' , '-94906266' ) ; +test( macro , '0' , '-94906266' , '94906266' ) ; +test( macro , '0' , '1073741824' , '-1073741824' ) ; +test( macro , '0' , '-1073741824' , '1073741824' ) ; +test( macro , '0' , '51676101935731' , '-51676101935731' ) ; +test( macro , '0' , '-51676101935731' , '51676101935731' ) ; +test( macro , '0' , '717897987691852588770249' , '-717897987691852588770249' ) ; +test( macro , '0' , '-717897987691852588770249' , '717897987691852588770249' ) ; +test( macro , '1' , '0' , '1' ) ; +test( macro , '-1' , '0' , '-1' ) ; test( macro , '1' , '1' , '0' ) ; test( macro , '-1' , '1' , '-2' ) ; test( macro , '1' , '-1' , '2' ) ; @@ -80,6 +117,8 @@ test( macro , '1' , '717897987691852588770249' , '-717897987691852588770248' ) ; test( macro , '-1' , '717897987691852588770249' , '-717897987691852588770250' ) ; test( macro , '1' , '-717897987691852588770249' , '717897987691852588770250' ) ; test( macro , '-1' , '-717897987691852588770249' , '717897987691852588770248' ) ; +test( macro , '3' , '0' , '3' ) ; +test( macro , '-3' , '0' , '-3' ) ; test( macro , '3' , '1' , '2' ) ; test( macro , '-3' , '1' , '-4' ) ; test( macro , '3' , '-1' , '4' ) ; @@ -148,6 +187,8 @@ test( macro , '3' , '717897987691852588770249' , '-717897987691852588770246' ) ; test( macro , '-3' , '717897987691852588770249' , '-717897987691852588770252' ) ; test( macro , '3' , '-717897987691852588770249' , '717897987691852588770252' ) ; test( macro , '-3' , '-717897987691852588770249' , '717897987691852588770246' ) ; +test( macro , '7' , '0' , '7' ) ; +test( macro , '-7' , '0' , '-7' ) ; test( macro , '7' , '1' , '6' ) ; test( macro , '-7' , '1' , '-8' ) ; test( macro , '7' , '-1' , '8' ) ; @@ -216,6 +257,8 @@ test( macro , '7' , '717897987691852588770249' , '-717897987691852588770242' ) ; test( macro , '-7' , '717897987691852588770249' , '-717897987691852588770256' ) ; test( macro , '7' , '-717897987691852588770249' , '717897987691852588770256' ) ; test( macro , '-7' , '-717897987691852588770249' , '717897987691852588770242' ) ; +test( macro , '9' , '0' , '9' ) ; +test( macro , '-9' , '0' , '-9' ) ; test( macro , '9' , '1' , '8' ) ; test( macro , '-9' , '1' , '-10' ) ; test( macro , '9' , '-1' , '10' ) ; @@ -284,6 +327,8 @@ test( macro , '9' , '717897987691852588770249' , '-717897987691852588770240' ) ; test( macro , '-9' , '717897987691852588770249' , '-717897987691852588770258' ) ; test( macro , '9' , '-717897987691852588770249' , '717897987691852588770258' ) ; test( macro , '-9' , '-717897987691852588770249' , '717897987691852588770240' ) ; +test( macro , '11' , '0' , '11' ) ; +test( macro , '-11' , '0' , '-11' ) ; test( macro , '11' , '1' , '10' ) ; test( macro , '-11' , '1' , '-12' ) ; test( macro , '11' , '-1' , '12' ) ; @@ -352,6 +397,8 @@ test( macro , '11' , '717897987691852588770249' , '-717897987691852588770238' ) test( macro , '-11' , '717897987691852588770249' , '-717897987691852588770260' ) ; test( macro , '11' , '-717897987691852588770249' , '717897987691852588770260' ) ; test( macro , '-11' , '-717897987691852588770249' , '717897987691852588770238' ) ; +test( macro , '17' , '0' , '17' ) ; +test( macro , '-17' , '0' , '-17' ) ; test( macro , '17' , '1' , '16' ) ; test( macro , '-17' , '1' , '-18' ) ; test( macro , '17' , '-1' , '18' ) ; @@ -420,6 +467,8 @@ test( macro , '17' , '717897987691852588770249' , '-717897987691852588770232' ) test( macro , '-17' , '717897987691852588770249' , '-717897987691852588770266' ) ; test( macro , '17' , '-717897987691852588770249' , '717897987691852588770266' ) ; test( macro , '-17' , '-717897987691852588770249' , '717897987691852588770232' ) ; +test( macro , '22' , '0' , '22' ) ; +test( macro , '-22' , '0' , '-22' ) ; test( macro , '22' , '1' , '21' ) ; test( macro , '-22' , '1' , '-23' ) ; test( macro , '22' , '-1' , '23' ) ; @@ -488,6 +537,8 @@ test( macro , '22' , '717897987691852588770249' , '-717897987691852588770227' ) test( macro , '-22' , '717897987691852588770249' , '-717897987691852588770271' ) ; test( macro , '22' , '-717897987691852588770249' , '717897987691852588770271' ) ; test( macro , '-22' , '-717897987691852588770249' , '717897987691852588770227' ) ; +test( macro , '24' , '0' , '24' ) ; +test( macro , '-24' , '0' , '-24' ) ; test( macro , '24' , '1' , '23' ) ; test( macro , '-24' , '1' , '-25' ) ; test( macro , '24' , '-1' , '25' ) ; @@ -556,6 +607,8 @@ test( macro , '24' , '717897987691852588770249' , '-717897987691852588770225' ) test( macro , '-24' , '717897987691852588770249' , '-717897987691852588770273' ) ; test( macro , '24' , '-717897987691852588770249' , '717897987691852588770273' ) ; test( macro , '-24' , '-717897987691852588770249' , '717897987691852588770225' ) ; +test( macro , '27' , '0' , '27' ) ; +test( macro , '-27' , '0' , '-27' ) ; test( macro , '27' , '1' , '26' ) ; test( macro , '-27' , '1' , '-28' ) ; test( macro , '27' , '-1' , '28' ) ; @@ -624,6 +677,8 @@ test( macro , '27' , '717897987691852588770249' , '-717897987691852588770222' ) test( macro , '-27' , '717897987691852588770249' , '-717897987691852588770276' ) ; test( macro , '27' , '-717897987691852588770249' , '717897987691852588770276' ) ; test( macro , '-27' , '-717897987691852588770249' , '717897987691852588770222' ) ; +test( macro , '29' , '0' , '29' ) ; +test( macro , '-29' , '0' , '-29' ) ; test( macro , '29' , '1' , '28' ) ; test( macro , '-29' , '1' , '-30' ) ; test( macro , '29' , '-1' , '30' ) ; @@ -692,6 +747,8 @@ test( macro , '29' , '717897987691852588770249' , '-717897987691852588770220' ) test( macro , '-29' , '717897987691852588770249' , '-717897987691852588770278' ) ; test( macro , '29' , '-717897987691852588770249' , '717897987691852588770278' ) ; test( macro , '-29' , '-717897987691852588770249' , '717897987691852588770220' ) ; +test( macro , '1234' , '0' , '1234' ) ; +test( macro , '-1234' , '0' , '-1234' ) ; test( macro , '1234' , '1' , '1233' ) ; test( macro , '-1234' , '1' , '-1235' ) ; test( macro , '1234' , '-1' , '1235' ) ; @@ -760,6 +817,8 @@ test( macro , '1234' , '717897987691852588770249' , '-717897987691852588769015' test( macro , '-1234' , '717897987691852588770249' , '-717897987691852588771483' ) ; test( macro , '1234' , '-717897987691852588770249' , '717897987691852588771483' ) ; test( macro , '-1234' , '-717897987691852588770249' , '717897987691852588769015' ) ; +test( macro , '5678' , '0' , '5678' ) ; +test( macro , '-5678' , '0' , '-5678' ) ; test( macro , '5678' , '1' , '5677' ) ; test( macro , '-5678' , '1' , '-5679' ) ; test( macro , '5678' , '-1' , '5679' ) ; @@ -828,6 +887,8 @@ test( macro , '5678' , '717897987691852588770249' , '-717897987691852588764571' test( macro , '-5678' , '717897987691852588770249' , '-717897987691852588775927' ) ; test( macro , '5678' , '-717897987691852588770249' , '717897987691852588775927' ) ; test( macro , '-5678' , '-717897987691852588770249' , '717897987691852588764571' ) ; +test( macro , '94906265' , '0' , '94906265' ) ; +test( macro , '-94906265' , '0' , '-94906265' ) ; test( macro , '94906265' , '1' , '94906264' ) ; test( macro , '-94906265' , '1' , '-94906266' ) ; test( macro , '94906265' , '-1' , '94906266' ) ; @@ -896,6 +957,8 @@ test( macro , '94906265' , '717897987691852588770249' , '-7178979876918524938639 test( macro , '-94906265' , '717897987691852588770249' , '-717897987691852683676514' ) ; test( macro , '94906265' , '-717897987691852588770249' , '717897987691852683676514' ) ; test( macro , '-94906265' , '-717897987691852588770249' , '717897987691852493863984' ) ; +test( macro , '94906266' , '0' , '94906266' ) ; +test( macro , '-94906266' , '0' , '-94906266' ) ; test( macro , '94906266' , '1' , '94906265' ) ; test( macro , '-94906266' , '1' , '-94906267' ) ; test( macro , '94906266' , '-1' , '94906267' ) ; @@ -964,6 +1027,8 @@ test( macro , '94906266' , '717897987691852588770249' , '-7178979876918524938639 test( macro , '-94906266' , '717897987691852588770249' , '-717897987691852683676515' ) ; test( macro , '94906266' , '-717897987691852588770249' , '717897987691852683676515' ) ; test( macro , '-94906266' , '-717897987691852588770249' , '717897987691852493863983' ) ; +test( macro , '1073741824' , '0' , '1073741824' ) ; +test( macro , '-1073741824' , '0' , '-1073741824' ) ; test( macro , '1073741824' , '1' , '1073741823' ) ; test( macro , '-1073741824' , '1' , '-1073741825' ) ; test( macro , '1073741824' , '-1' , '1073741825' ) ; @@ -1032,6 +1097,8 @@ test( macro , '1073741824' , '717897987691852588770249' , '-71789798769185151502 test( macro , '-1073741824' , '717897987691852588770249' , '-717897987691853662512073' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '717897987691853662512073' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '717897987691851515028425' ) ; +test( macro , '51676101935731' , '0' , '51676101935731' ) ; +test( macro , '-51676101935731' , '0' , '-51676101935731' ) ; test( macro , '51676101935731' , '1' , '51676101935730' ) ; test( macro , '-51676101935731' , '1' , '-51676101935732' ) ; test( macro , '51676101935731' , '-1' , '51676101935732' ) ; @@ -1100,6 +1167,8 @@ test( macro , '51676101935731' , '717897987691852588770249' , '-7178979876401764 test( macro , '-51676101935731' , '717897987691852588770249' , '-717897987743528690705980' ) ; test( macro , '51676101935731' , '-717897987691852588770249' , '717897987743528690705980' ) ; test( macro , '-51676101935731' , '-717897987691852588770249' , '717897987640176486834518' ) ; +test( macro , '717897987691852588770249' , '0' , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , '0' , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770248' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770250' ) ; test( macro , '717897987691852588770249' , '-1' , '717897987691852588770250' ) ; diff --git a/test/src/integer/arithmetic/subn.js b/test/src/integer/arithmetic/subn.js index 069e50d..61e00ab 100644 --- a/test/src/integer/arithmetic/subn.js +++ b/test/src/integer/arithmetic/subn.js @@ -10,6 +10,41 @@ function macro ( t , A , B , C ) { macro.title = ( _ , A , B , C ) => `subn(${A},${B}) = ${C}` ; +test( macro , '0' , 0 , '0' ) ; +test( macro , '0' , 1 , '-1' ) ; +test( macro , '0' , -1 , '1' ) ; +test( macro , '0' , 3 , '-3' ) ; +test( macro , '0' , -3 , '3' ) ; +test( macro , '0' , 7 , '-7' ) ; +test( macro , '0' , -7 , '7' ) ; +test( macro , '0' , 9 , '-9' ) ; +test( macro , '0' , -9 , '9' ) ; +test( macro , '0' , 11 , '-11' ) ; +test( macro , '0' , -11 , '11' ) ; +test( macro , '0' , 17 , '-17' ) ; +test( macro , '0' , -17 , '17' ) ; +test( macro , '0' , 22 , '-22' ) ; +test( macro , '0' , -22 , '22' ) ; +test( macro , '0' , 24 , '-24' ) ; +test( macro , '0' , -24 , '24' ) ; +test( macro , '0' , 27 , '-27' ) ; +test( macro , '0' , -27 , '27' ) ; +test( macro , '0' , 29 , '-29' ) ; +test( macro , '0' , -29 , '29' ) ; +test( macro , '0' , 1234 , '-1234' ) ; +test( macro , '0' , -1234 , '1234' ) ; +test( macro , '0' , 5678 , '-5678' ) ; +test( macro , '0' , -5678 , '5678' ) ; +test( macro , '0' , 94906265 , '-94906265' ) ; +test( macro , '0' , -94906265 , '94906265' ) ; +test( macro , '0' , 94906266 , '-94906266' ) ; +test( macro , '0' , -94906266 , '94906266' ) ; +test( macro , '0' , 1073741824 , '-1073741824' ) ; +test( macro , '0' , -1073741824 , '1073741824' ) ; +test( macro , '0' , 51676101935731 , '-51676101935731' ) ; +test( macro , '0' , -51676101935731 , '51676101935731' ) ; +test( macro , '1' , 0 , '1' ) ; +test( macro , '-1' , 0 , '-1' ) ; test( macro , '1' , 1 , '0' ) ; test( macro , '-1' , 1 , '-2' ) ; test( macro , '1' , -1 , '2' ) ; @@ -74,6 +109,8 @@ test( macro , '1' , 51676101935731 , '-51676101935730' ) ; test( macro , '-1' , 51676101935731 , '-51676101935732' ) ; test( macro , '1' , -51676101935731 , '51676101935732' ) ; test( macro , '-1' , -51676101935731 , '51676101935730' ) ; +test( macro , '3' , 0 , '3' ) ; +test( macro , '-3' , 0 , '-3' ) ; test( macro , '3' , 1 , '2' ) ; test( macro , '-3' , 1 , '-4' ) ; test( macro , '3' , -1 , '4' ) ; @@ -138,6 +175,8 @@ test( macro , '3' , 51676101935731 , '-51676101935728' ) ; test( macro , '-3' , 51676101935731 , '-51676101935734' ) ; test( macro , '3' , -51676101935731 , '51676101935734' ) ; test( macro , '-3' , -51676101935731 , '51676101935728' ) ; +test( macro , '7' , 0 , '7' ) ; +test( macro , '-7' , 0 , '-7' ) ; test( macro , '7' , 1 , '6' ) ; test( macro , '-7' , 1 , '-8' ) ; test( macro , '7' , -1 , '8' ) ; @@ -202,6 +241,8 @@ test( macro , '7' , 51676101935731 , '-51676101935724' ) ; test( macro , '-7' , 51676101935731 , '-51676101935738' ) ; test( macro , '7' , -51676101935731 , '51676101935738' ) ; test( macro , '-7' , -51676101935731 , '51676101935724' ) ; +test( macro , '9' , 0 , '9' ) ; +test( macro , '-9' , 0 , '-9' ) ; test( macro , '9' , 1 , '8' ) ; test( macro , '-9' , 1 , '-10' ) ; test( macro , '9' , -1 , '10' ) ; @@ -266,6 +307,8 @@ test( macro , '9' , 51676101935731 , '-51676101935722' ) ; test( macro , '-9' , 51676101935731 , '-51676101935740' ) ; test( macro , '9' , -51676101935731 , '51676101935740' ) ; test( macro , '-9' , -51676101935731 , '51676101935722' ) ; +test( macro , '11' , 0 , '11' ) ; +test( macro , '-11' , 0 , '-11' ) ; test( macro , '11' , 1 , '10' ) ; test( macro , '-11' , 1 , '-12' ) ; test( macro , '11' , -1 , '12' ) ; @@ -330,6 +373,8 @@ test( macro , '11' , 51676101935731 , '-51676101935720' ) ; test( macro , '-11' , 51676101935731 , '-51676101935742' ) ; test( macro , '11' , -51676101935731 , '51676101935742' ) ; test( macro , '-11' , -51676101935731 , '51676101935720' ) ; +test( macro , '17' , 0 , '17' ) ; +test( macro , '-17' , 0 , '-17' ) ; test( macro , '17' , 1 , '16' ) ; test( macro , '-17' , 1 , '-18' ) ; test( macro , '17' , -1 , '18' ) ; @@ -394,6 +439,8 @@ test( macro , '17' , 51676101935731 , '-51676101935714' ) ; test( macro , '-17' , 51676101935731 , '-51676101935748' ) ; test( macro , '17' , -51676101935731 , '51676101935748' ) ; test( macro , '-17' , -51676101935731 , '51676101935714' ) ; +test( macro , '22' , 0 , '22' ) ; +test( macro , '-22' , 0 , '-22' ) ; test( macro , '22' , 1 , '21' ) ; test( macro , '-22' , 1 , '-23' ) ; test( macro , '22' , -1 , '23' ) ; @@ -458,6 +505,8 @@ test( macro , '22' , 51676101935731 , '-51676101935709' ) ; test( macro , '-22' , 51676101935731 , '-51676101935753' ) ; test( macro , '22' , -51676101935731 , '51676101935753' ) ; test( macro , '-22' , -51676101935731 , '51676101935709' ) ; +test( macro , '24' , 0 , '24' ) ; +test( macro , '-24' , 0 , '-24' ) ; test( macro , '24' , 1 , '23' ) ; test( macro , '-24' , 1 , '-25' ) ; test( macro , '24' , -1 , '25' ) ; @@ -522,6 +571,8 @@ test( macro , '24' , 51676101935731 , '-51676101935707' ) ; test( macro , '-24' , 51676101935731 , '-51676101935755' ) ; test( macro , '24' , -51676101935731 , '51676101935755' ) ; test( macro , '-24' , -51676101935731 , '51676101935707' ) ; +test( macro , '27' , 0 , '27' ) ; +test( macro , '-27' , 0 , '-27' ) ; test( macro , '27' , 1 , '26' ) ; test( macro , '-27' , 1 , '-28' ) ; test( macro , '27' , -1 , '28' ) ; @@ -586,6 +637,8 @@ test( macro , '27' , 51676101935731 , '-51676101935704' ) ; test( macro , '-27' , 51676101935731 , '-51676101935758' ) ; test( macro , '27' , -51676101935731 , '51676101935758' ) ; test( macro , '-27' , -51676101935731 , '51676101935704' ) ; +test( macro , '29' , 0 , '29' ) ; +test( macro , '-29' , 0 , '-29' ) ; test( macro , '29' , 1 , '28' ) ; test( macro , '-29' , 1 , '-30' ) ; test( macro , '29' , -1 , '30' ) ; @@ -650,6 +703,8 @@ test( macro , '29' , 51676101935731 , '-51676101935702' ) ; test( macro , '-29' , 51676101935731 , '-51676101935760' ) ; test( macro , '29' , -51676101935731 , '51676101935760' ) ; test( macro , '-29' , -51676101935731 , '51676101935702' ) ; +test( macro , '1234' , 0 , '1234' ) ; +test( macro , '-1234' , 0 , '-1234' ) ; test( macro , '1234' , 1 , '1233' ) ; test( macro , '-1234' , 1 , '-1235' ) ; test( macro , '1234' , -1 , '1235' ) ; @@ -714,6 +769,8 @@ test( macro , '1234' , 51676101935731 , '-51676101934497' ) ; test( macro , '-1234' , 51676101935731 , '-51676101936965' ) ; test( macro , '1234' , -51676101935731 , '51676101936965' ) ; test( macro , '-1234' , -51676101935731 , '51676101934497' ) ; +test( macro , '5678' , 0 , '5678' ) ; +test( macro , '-5678' , 0 , '-5678' ) ; test( macro , '5678' , 1 , '5677' ) ; test( macro , '-5678' , 1 , '-5679' ) ; test( macro , '5678' , -1 , '5679' ) ; @@ -778,6 +835,8 @@ test( macro , '5678' , 51676101935731 , '-51676101930053' ) ; test( macro , '-5678' , 51676101935731 , '-51676101941409' ) ; test( macro , '5678' , -51676101935731 , '51676101941409' ) ; test( macro , '-5678' , -51676101935731 , '51676101930053' ) ; +test( macro , '94906265' , 0 , '94906265' ) ; +test( macro , '-94906265' , 0 , '-94906265' ) ; test( macro , '94906265' , 1 , '94906264' ) ; test( macro , '-94906265' , 1 , '-94906266' ) ; test( macro , '94906265' , -1 , '94906266' ) ; @@ -842,6 +901,8 @@ test( macro , '94906265' , 51676101935731 , '-51676007029466' ) ; test( macro , '-94906265' , 51676101935731 , '-51676196841996' ) ; test( macro , '94906265' , -51676101935731 , '51676196841996' ) ; test( macro , '-94906265' , -51676101935731 , '51676007029466' ) ; +test( macro , '94906266' , 0 , '94906266' ) ; +test( macro , '-94906266' , 0 , '-94906266' ) ; test( macro , '94906266' , 1 , '94906265' ) ; test( macro , '-94906266' , 1 , '-94906267' ) ; test( macro , '94906266' , -1 , '94906267' ) ; @@ -906,6 +967,8 @@ test( macro , '94906266' , 51676101935731 , '-51676007029465' ) ; test( macro , '-94906266' , 51676101935731 , '-51676196841997' ) ; test( macro , '94906266' , -51676101935731 , '51676196841997' ) ; test( macro , '-94906266' , -51676101935731 , '51676007029465' ) ; +test( macro , '1073741824' , 0 , '1073741824' ) ; +test( macro , '-1073741824' , 0 , '-1073741824' ) ; test( macro , '1073741824' , 1 , '1073741823' ) ; test( macro , '-1073741824' , 1 , '-1073741825' ) ; test( macro , '1073741824' , -1 , '1073741825' ) ; @@ -970,6 +1033,8 @@ test( macro , '1073741824' , 51676101935731 , '-51675028193907' ) ; test( macro , '-1073741824' , 51676101935731 , '-51677175677555' ) ; test( macro , '1073741824' , -51676101935731 , '51677175677555' ) ; test( macro , '-1073741824' , -51676101935731 , '51675028193907' ) ; +test( macro , '51676101935731' , 0 , '51676101935731' ) ; +test( macro , '-51676101935731' , 0 , '-51676101935731' ) ; test( macro , '51676101935731' , 1 , '51676101935730' ) ; test( macro , '-51676101935731' , 1 , '-51676101935732' ) ; test( macro , '51676101935731' , -1 , '51676101935732' ) ; @@ -1034,6 +1099,8 @@ test( macro , '51676101935731' , 51676101935731 , '0' ) ; test( macro , '-51676101935731' , 51676101935731 , '-103352203871462' ) ; test( macro , '51676101935731' , -51676101935731 , '103352203871462' ) ; test( macro , '-51676101935731' , -51676101935731 , '0' ) ; +test( macro , '717897987691852588770249' , 0 , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , 0 , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , 1 , '717897987691852588770248' ) ; test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770250' ) ; test( macro , '717897987691852588770249' , -1 , '717897987691852588770250' ) ; From a29d142ee479748eb1dac79c67dfc54567be41d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 30 Jul 2020 19:05:17 +0200 Subject: [PATCH 18/23] :mag: test: Better titles for generated tests. --- test/generate.py | 10 ++++++---- test/src/integer/arithmetic/add.js | 4 +++- test/src/integer/arithmetic/addn.js | 4 +++- test/src/integer/arithmetic/div.js | 4 +++- test/src/integer/arithmetic/divmod.js | 4 +++- test/src/integer/arithmetic/divmodn.js | 4 +++- test/src/integer/arithmetic/divn.js | 4 +++- test/src/integer/arithmetic/iadd.js | 4 +++- test/src/integer/arithmetic/iaddn.js | 4 +++- test/src/integer/arithmetic/idiv.js | 4 +++- test/src/integer/arithmetic/idivmod.js | 4 +++- test/src/integer/arithmetic/idivmodn.js | 4 +++- test/src/integer/arithmetic/idivn.js | 4 +++- test/src/integer/arithmetic/imod.js | 4 +++- test/src/integer/arithmetic/imodn.js | 4 +++- test/src/integer/arithmetic/imul.js | 4 +++- test/src/integer/arithmetic/imuln.js | 4 +++- test/src/integer/arithmetic/ipow.js | 4 +++- test/src/integer/arithmetic/ipown.js | 4 +++- test/src/integer/arithmetic/isub.js | 4 +++- test/src/integer/arithmetic/isubn.js | 4 +++- test/src/integer/arithmetic/mod.js | 4 +++- test/src/integer/arithmetic/modn.js | 4 +++- test/src/integer/arithmetic/mul.js | 4 +++- test/src/integer/arithmetic/muln.js | 4 +++- test/src/integer/arithmetic/pow.js | 4 +++- test/src/integer/arithmetic/pown.js | 4 +++- test/src/integer/arithmetic/sub.js | 4 +++- test/src/integer/arithmetic/subn.js | 4 +++- 29 files changed, 90 insertions(+), 32 deletions(-) diff --git a/test/generate.py b/test/generate.py index ee8e21a..a56b608 100644 --- a/test/generate.py +++ b/test/generate.py @@ -75,6 +75,8 @@ def write ( f , left, right , name , t , ispow = False , isn = False , isi = Fal f.write("import test from 'ava' ;\n") f.write("import {{ parse , stringify , {} }} from '../../../../src' ;\n\n".format(name)) + f.write("const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19);\n\n") + if outputsize == 2 : if isn : @@ -124,20 +126,20 @@ def write ( f , left, right , name , t , ispow = False , isn = False , isi = Fal if outputsize == 2 : - f.write("macro.title = ( _ , A , B , C , D ) => `{}(${{A}},${{B}}) = [${{C}},${{D}}]` ;\n\n".format(name)) - if isn: + f.write("macro.title = ( _ , A , B , C , D ) => `{}(${{fmt(A)}},${{B}}) = [${{fmt(C)}},${{fmt(D)}}]` ;\n\n".format(name)) LINE = "test( macro , '{}' , {} , '{}' , '{}' ) ;\n" else: + f.write("macro.title = ( _ , A , B , C , D ) => `{}(${{fmt(A)}},${{fmt(B)}}) = [${{fmt(C)}},${{fmt(D)}}]` ;\n\n".format(name)) LINE = "test( macro , '{}' , '{}' , '{}' , '{}' ) ;\n" else: - f.write("macro.title = ( _ , A , B , C ) => `{}(${{A}},${{B}}) = ${{C}}` ;\n\n".format(name)) - if isn: + f.write("macro.title = ( _ , A , B , C ) => `{}(${{fmt(A)}},${{B}}) = ${{fmt(C)}}` ;\n\n".format(name)) LINE = "test( macro , '{}' , {} , '{}' ) ;\n" else: + f.write("macro.title = ( _ , A , B , C ) => `{}(${{fmt(A)}},${{fmt(B)}}) = ${{fmt(C)}}` ;\n\n".format(name)) LINE = "test( macro , '{}' , '{}' , '{}' ) ;\n" for a in left : diff --git a/test/src/integer/arithmetic/add.js b/test/src/integer/arithmetic/add.js index dd74815..aa3e235 100644 --- a/test/src/integer/arithmetic/add.js +++ b/test/src/integer/arithmetic/add.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , add } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const b = parse( B ) ; @@ -10,7 +12,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `add(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `add(${fmt(A)},${fmt(B)}) = ${fmt(C)}` ; test( macro , '0' , '0' , '0' ) ; test( macro , '0' , '1' , '1' ) ; diff --git a/test/src/integer/arithmetic/addn.js b/test/src/integer/arithmetic/addn.js index 5de4de2..7fd7e47 100644 --- a/test/src/integer/arithmetic/addn.js +++ b/test/src/integer/arithmetic/addn.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , addn } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const c = addn( a , B ) ; @@ -8,7 +10,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `addn(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `addn(${fmt(A)},${B}) = ${fmt(C)}` ; test( macro , '0' , 0 , '0' ) ; test( macro , '0' , 1 , '1' ) ; diff --git a/test/src/integer/arithmetic/div.js b/test/src/integer/arithmetic/div.js index f77986d..3074db3 100644 --- a/test/src/integer/arithmetic/div.js +++ b/test/src/integer/arithmetic/div.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , div } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const b = parse( B ) ; @@ -10,7 +12,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `div(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `div(${fmt(A)},${fmt(B)}) = ${fmt(C)}` ; test( macro , '0' , '1' , '0' ) ; test( macro , '0' , '-1' , '0' ) ; diff --git a/test/src/integer/arithmetic/divmod.js b/test/src/integer/arithmetic/divmod.js index 0faa4b1..78974df 100644 --- a/test/src/integer/arithmetic/divmod.js +++ b/test/src/integer/arithmetic/divmod.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , divmod } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C , D ) { const a = parse( A ) ; const b = parse( B ) ; @@ -11,7 +13,7 @@ function macro ( t , A , B , C , D ) { t.is( stringify( d ) , D ) ; } -macro.title = ( _ , A , B , C , D ) => `divmod(${A},${B}) = [${C},${D}]` ; +macro.title = ( _ , A , B , C , D ) => `divmod(${fmt(A)},${fmt(B)}) = [${fmt(C)},${fmt(D)}]` ; test( macro , '0' , '1' , '0' , '0' ) ; test( macro , '0' , '-1' , '0' , '0' ) ; diff --git a/test/src/integer/arithmetic/divmodn.js b/test/src/integer/arithmetic/divmodn.js index 44d41d9..36989f2 100644 --- a/test/src/integer/arithmetic/divmodn.js +++ b/test/src/integer/arithmetic/divmodn.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , divmodn } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C , D ) { const a = parse( A ) ; const [c, d] = divmodn( a , B ) ; @@ -9,7 +11,7 @@ function macro ( t , A , B , C , D ) { t.is( stringify( d ) , D ) ; } -macro.title = ( _ , A , B , C , D ) => `divmodn(${A},${B}) = [${C},${D}]` ; +macro.title = ( _ , A , B , C , D ) => `divmodn(${fmt(A)},${B}) = [${fmt(C)},${fmt(D)}]` ; test( macro , '0' , 1 , '0' , '0' ) ; test( macro , '0' , -1 , '0' , '0' ) ; diff --git a/test/src/integer/arithmetic/divn.js b/test/src/integer/arithmetic/divn.js index 2a79924..a312e43 100644 --- a/test/src/integer/arithmetic/divn.js +++ b/test/src/integer/arithmetic/divn.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , divn } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const c = divn( a , B ) ; @@ -8,7 +10,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `divn(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `divn(${fmt(A)},${B}) = ${fmt(C)}` ; test( macro , '0' , 1 , '0' ) ; test( macro , '0' , -1 , '0' ) ; diff --git a/test/src/integer/arithmetic/iadd.js b/test/src/integer/arithmetic/iadd.js index 41d48e8..d64c83e 100644 --- a/test/src/integer/arithmetic/iadd.js +++ b/test/src/integer/arithmetic/iadd.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , iadd } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const b = parse( B ) ; @@ -10,7 +12,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `iadd(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `iadd(${fmt(A)},${fmt(B)}) = ${fmt(C)}` ; test( macro , '0' , '0' , '0' ) ; test( macro , '0' , '1' , '1' ) ; diff --git a/test/src/integer/arithmetic/iaddn.js b/test/src/integer/arithmetic/iaddn.js index b614755..c0f8db9 100644 --- a/test/src/integer/arithmetic/iaddn.js +++ b/test/src/integer/arithmetic/iaddn.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , iaddn } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const c = iaddn( a , B ) ; @@ -8,7 +10,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `iaddn(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `iaddn(${fmt(A)},${B}) = ${fmt(C)}` ; test( macro , '0' , 0 , '0' ) ; test( macro , '0' , 1 , '1' ) ; diff --git a/test/src/integer/arithmetic/idiv.js b/test/src/integer/arithmetic/idiv.js index d28cacf..cbbd02e 100644 --- a/test/src/integer/arithmetic/idiv.js +++ b/test/src/integer/arithmetic/idiv.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , idiv } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const b = parse( B ) ; @@ -10,7 +12,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `idiv(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `idiv(${fmt(A)},${fmt(B)}) = ${fmt(C)}` ; test( macro , '0' , '1' , '0' ) ; test( macro , '0' , '-1' , '0' ) ; diff --git a/test/src/integer/arithmetic/idivmod.js b/test/src/integer/arithmetic/idivmod.js index 9aedd31..a447702 100644 --- a/test/src/integer/arithmetic/idivmod.js +++ b/test/src/integer/arithmetic/idivmod.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , idivmod } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C , D ) { const a = parse( A ) ; const b = parse( B ) ; @@ -11,7 +13,7 @@ function macro ( t , A , B , C , D ) { t.is( stringify( d ) , D ) ; } -macro.title = ( _ , A , B , C , D ) => `idivmod(${A},${B}) = [${C},${D}]` ; +macro.title = ( _ , A , B , C , D ) => `idivmod(${fmt(A)},${fmt(B)}) = [${fmt(C)},${fmt(D)}]` ; test( macro , '0' , '1' , '0' , '0' ) ; test( macro , '0' , '-1' , '0' , '0' ) ; diff --git a/test/src/integer/arithmetic/idivmodn.js b/test/src/integer/arithmetic/idivmodn.js index c1b2ee8..3e0fa8c 100644 --- a/test/src/integer/arithmetic/idivmodn.js +++ b/test/src/integer/arithmetic/idivmodn.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , idivmodn } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C , D ) { const a = parse( A ) ; const [c, d] = idivmodn( a , B ) ; @@ -9,7 +11,7 @@ function macro ( t , A , B , C , D ) { t.is( stringify( d ) , D ) ; } -macro.title = ( _ , A , B , C , D ) => `idivmodn(${A},${B}) = [${C},${D}]` ; +macro.title = ( _ , A , B , C , D ) => `idivmodn(${fmt(A)},${B}) = [${fmt(C)},${fmt(D)}]` ; test( macro , '0' , 1 , '0' , '0' ) ; test( macro , '0' , -1 , '0' , '0' ) ; diff --git a/test/src/integer/arithmetic/idivn.js b/test/src/integer/arithmetic/idivn.js index 6c13ef1..b316899 100644 --- a/test/src/integer/arithmetic/idivn.js +++ b/test/src/integer/arithmetic/idivn.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , idivn } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const c = idivn( a , B ) ; @@ -8,7 +10,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `idivn(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `idivn(${fmt(A)},${B}) = ${fmt(C)}` ; test( macro , '0' , 1 , '0' ) ; test( macro , '0' , -1 , '0' ) ; diff --git a/test/src/integer/arithmetic/imod.js b/test/src/integer/arithmetic/imod.js index 48cf031..fcfc5e5 100644 --- a/test/src/integer/arithmetic/imod.js +++ b/test/src/integer/arithmetic/imod.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , imod } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const b = parse( B ) ; @@ -10,7 +12,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `imod(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `imod(${fmt(A)},${fmt(B)}) = ${fmt(C)}` ; test( macro , '0' , '1' , '0' ) ; test( macro , '0' , '-1' , '0' ) ; diff --git a/test/src/integer/arithmetic/imodn.js b/test/src/integer/arithmetic/imodn.js index 7d142af..e208554 100644 --- a/test/src/integer/arithmetic/imodn.js +++ b/test/src/integer/arithmetic/imodn.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , imodn } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const c = imodn( a , B ) ; @@ -8,7 +10,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `imodn(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `imodn(${fmt(A)},${B}) = ${fmt(C)}` ; test( macro , '0' , 1 , '0' ) ; test( macro , '0' , -1 , '0' ) ; diff --git a/test/src/integer/arithmetic/imul.js b/test/src/integer/arithmetic/imul.js index 4ea3cd4..f3e28be 100644 --- a/test/src/integer/arithmetic/imul.js +++ b/test/src/integer/arithmetic/imul.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , imul } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const b = parse( B ) ; @@ -10,7 +12,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `imul(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `imul(${fmt(A)},${fmt(B)}) = ${fmt(C)}` ; test( macro , '0' , '0' , '0' ) ; test( macro , '0' , '1' , '0' ) ; diff --git a/test/src/integer/arithmetic/imuln.js b/test/src/integer/arithmetic/imuln.js index cdcbc4c..df629ae 100644 --- a/test/src/integer/arithmetic/imuln.js +++ b/test/src/integer/arithmetic/imuln.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , imuln } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const c = imuln( a , B ) ; @@ -8,7 +10,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `imuln(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `imuln(${fmt(A)},${B}) = ${fmt(C)}` ; test( macro , '0' , 0 , '0' ) ; test( macro , '0' , 1 , '0' ) ; diff --git a/test/src/integer/arithmetic/ipow.js b/test/src/integer/arithmetic/ipow.js index d27a92e..ef22f20 100644 --- a/test/src/integer/arithmetic/ipow.js +++ b/test/src/integer/arithmetic/ipow.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , ipow } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const b = parse( B ) ; @@ -10,7 +12,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `ipow(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `ipow(${fmt(A)},${fmt(B)}) = ${fmt(C)}` ; test( macro , '0' , '0' , '1' ) ; test( macro , '0' , '1' , '0' ) ; diff --git a/test/src/integer/arithmetic/ipown.js b/test/src/integer/arithmetic/ipown.js index 70d37fd..6e14efe 100644 --- a/test/src/integer/arithmetic/ipown.js +++ b/test/src/integer/arithmetic/ipown.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , ipown } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const c = ipown( a , B ) ; @@ -8,7 +10,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `ipown(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `ipown(${fmt(A)},${B}) = ${fmt(C)}` ; test( macro , '0' , 0 , '1' ) ; test( macro , '0' , 1 , '0' ) ; diff --git a/test/src/integer/arithmetic/isub.js b/test/src/integer/arithmetic/isub.js index fae2256..40c49bd 100644 --- a/test/src/integer/arithmetic/isub.js +++ b/test/src/integer/arithmetic/isub.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , isub } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const b = parse( B ) ; @@ -10,7 +12,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `isub(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `isub(${fmt(A)},${fmt(B)}) = ${fmt(C)}` ; test( macro , '0' , '0' , '0' ) ; test( macro , '0' , '1' , '-1' ) ; diff --git a/test/src/integer/arithmetic/isubn.js b/test/src/integer/arithmetic/isubn.js index 8619281..70b9437 100644 --- a/test/src/integer/arithmetic/isubn.js +++ b/test/src/integer/arithmetic/isubn.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , isubn } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const c = isubn( a , B ) ; @@ -8,7 +10,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `isubn(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `isubn(${fmt(A)},${B}) = ${fmt(C)}` ; test( macro , '0' , 0 , '0' ) ; test( macro , '0' , 1 , '-1' ) ; diff --git a/test/src/integer/arithmetic/mod.js b/test/src/integer/arithmetic/mod.js index 0c141d1..a2ede2f 100644 --- a/test/src/integer/arithmetic/mod.js +++ b/test/src/integer/arithmetic/mod.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , mod } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const b = parse( B ) ; @@ -10,7 +12,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `mod(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `mod(${fmt(A)},${fmt(B)}) = ${fmt(C)}` ; test( macro , '0' , '1' , '0' ) ; test( macro , '0' , '-1' , '0' ) ; diff --git a/test/src/integer/arithmetic/modn.js b/test/src/integer/arithmetic/modn.js index 1b0b570..ad5a4ea 100644 --- a/test/src/integer/arithmetic/modn.js +++ b/test/src/integer/arithmetic/modn.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , modn } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const c = modn( a , B ) ; @@ -8,7 +10,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `modn(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `modn(${fmt(A)},${B}) = ${fmt(C)}` ; test( macro , '0' , 1 , '0' ) ; test( macro , '0' , -1 , '0' ) ; diff --git a/test/src/integer/arithmetic/mul.js b/test/src/integer/arithmetic/mul.js index f925fcb..acaea0b 100644 --- a/test/src/integer/arithmetic/mul.js +++ b/test/src/integer/arithmetic/mul.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , mul } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const b = parse( B ) ; @@ -10,7 +12,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `mul(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `mul(${fmt(A)},${fmt(B)}) = ${fmt(C)}` ; test( macro , '0' , '0' , '0' ) ; test( macro , '0' , '1' , '0' ) ; diff --git a/test/src/integer/arithmetic/muln.js b/test/src/integer/arithmetic/muln.js index 9963f84..c1a4160 100644 --- a/test/src/integer/arithmetic/muln.js +++ b/test/src/integer/arithmetic/muln.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , muln } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const c = muln( a , B ) ; @@ -8,7 +10,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `muln(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `muln(${fmt(A)},${B}) = ${fmt(C)}` ; test( macro , '0' , 0 , '0' ) ; test( macro , '0' , 1 , '0' ) ; diff --git a/test/src/integer/arithmetic/pow.js b/test/src/integer/arithmetic/pow.js index f835a99..288cb5c 100644 --- a/test/src/integer/arithmetic/pow.js +++ b/test/src/integer/arithmetic/pow.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , pow } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const b = parse( B ) ; @@ -10,7 +12,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `pow(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `pow(${fmt(A)},${fmt(B)}) = ${fmt(C)}` ; test( macro , '0' , '0' , '1' ) ; test( macro , '0' , '1' , '0' ) ; diff --git a/test/src/integer/arithmetic/pown.js b/test/src/integer/arithmetic/pown.js index e122f14..66ab501 100644 --- a/test/src/integer/arithmetic/pown.js +++ b/test/src/integer/arithmetic/pown.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , pown } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const c = pown( a , B ) ; @@ -8,7 +10,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `pown(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `pown(${fmt(A)},${B}) = ${fmt(C)}` ; test( macro , '0' , 0 , '1' ) ; test( macro , '0' , 1 , '0' ) ; diff --git a/test/src/integer/arithmetic/sub.js b/test/src/integer/arithmetic/sub.js index 9dd119a..0659604 100644 --- a/test/src/integer/arithmetic/sub.js +++ b/test/src/integer/arithmetic/sub.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , sub } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const b = parse( B ) ; @@ -10,7 +12,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `sub(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `sub(${fmt(A)},${fmt(B)}) = ${fmt(C)}` ; test( macro , '0' , '0' , '0' ) ; test( macro , '0' , '1' , '-1' ) ; diff --git a/test/src/integer/arithmetic/subn.js b/test/src/integer/arithmetic/subn.js index 61e00ab..7fbaef9 100644 --- a/test/src/integer/arithmetic/subn.js +++ b/test/src/integer/arithmetic/subn.js @@ -1,6 +1,8 @@ import test from 'ava' ; import { parse , stringify , subn } from '../../../../src' ; +const fmt = x => x.length <= 40 ? x : x.slice(0,19) + '..' + x.slice(-19); + function macro ( t , A , B , C ) { const a = parse( A ) ; const c = subn( a , B ) ; @@ -8,7 +10,7 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `subn(${A},${B}) = ${C}` ; +macro.title = ( _ , A , B , C ) => `subn(${fmt(A)},${B}) = ${fmt(C)}` ; test( macro , '0' , 0 , '0' ) ; test( macro , '0' , 1 , '-1' ) ; From b8b418d95ee8fd134d70da728150b7f6ab6997d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 30 Jul 2020 19:05:39 +0200 Subject: [PATCH 19/23] :mag: test(ava): Increase timeout. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4116fb4..66061a2 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "files": [ "test/src/**/*" ], - "timeout": "5m", + "timeout": "10m", "concurrency": 8 }, "babel": { From be87d6f8d24fef14c4f4dcdf438ba86d9e9e5622 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 30 Jul 2020 19:06:34 +0200 Subject: [PATCH 20/23] :unamused: chore(deps): Upgrade js-integer-big-endian to v10.0.0. --- package.json | 2 +- yarn.lock | 779 +++++++++++++++------------------------------------ 2 files changed, 222 insertions(+), 559 deletions(-) diff --git a/package.json b/package.json index 66061a2..ffbf9bc 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ }, "dependencies": { "@aureooms/js-error": "^4.0.0", - "@aureooms/js-integer-big-endian": "^9.0.2" + "@aureooms/js-integer-big-endian": "^10.0.0" }, "devDependencies": { "@aureooms/js-algorithms": "3.0.7", diff --git a/yarn.lock b/yarn.lock index 990dc83..4b3c2b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,10 +24,10 @@ resolved "https://registry.yarnpkg.com/@aureooms/js-error/-/js-error-4.0.0.tgz#cea0a145f5290f443911b3d1890d7254a18eeb9b" integrity sha512-omwmz82cPxqRnorZ8tqeIcPj1QcJnCsMiVYcwOh/QfUXhJ+DmiBPgWOm5WWAQvQzYVKe0/k7+s2ie+UoRJagjA== -"@aureooms/js-integer-big-endian@^9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@aureooms/js-integer-big-endian/-/js-integer-big-endian-9.0.2.tgz#4747d9d1586d66d11ec21c2cd3d81a68680e0717" - integrity sha512-9rlrO1UaJ6X5CxK1YxIf74u2XWbh5TX0XA9lx5RIu8HgCrhQDO3PKhZl6oOSSsY2/s8SWd4/RAd4IigziPvYng== +"@aureooms/js-integer-big-endian@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@aureooms/js-integer-big-endian/-/js-integer-big-endian-10.0.0.tgz#e3e46af63e7b900822abba3f216e64c812aa6532" + integrity sha512-Fa8v0V40FDZ09j/UP+c0x+Xd0Un3zuBc1K0T8EIZI4mAXFq7wDcd2mRCmR/djcKCcfPIR1Wgm0ucltNR6snm1g== "@aureooms/js-itertools@4.0.0": version "4.0.0" @@ -68,14 +68,7 @@ optionalDependencies: chokidar "^2.1.8" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== - dependencies: - "@babel/highlight" "^7.8.3" - -"@babel/code-frame@^7.10.4": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== @@ -83,15 +76,15 @@ "@babel/highlight" "^7.10.4" "@babel/compat-data@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.4.tgz#706a6484ee6f910b719b696a9194f8da7d7ac241" - integrity sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw== + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.5.tgz#d38425e67ea96b1480a3f50404d1bf85676301a6" + integrity sha512-mPVoWNzIpYJHbWje0if7Ck36bpbtTvIxOi9+6WSK9wjGEXearAqlwBoTQvVjsAY2VIwgcs8V940geY3okzRCEw== dependencies: browserslist "^4.12.0" invariant "^2.2.4" semver "^5.5.0" -"@babel/core@7.10.5": +"@babel/core@7.10.5", "@babel/core@^7.7.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.5.tgz#1f15e2cca8ad9a1d78a38ddba612f5e7cdbbd330" integrity sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w== @@ -113,38 +106,6 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.7.5": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376" - integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.6" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helpers" "^7.9.6" - "@babel/parser" "^7.9.6" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.9.6" - "@babel/types" "^7.9.6" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.4.tgz#e49eeed9fe114b62fa5b181856a43a5e32f5f243" - integrity sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng== - dependencies: - "@babel/types" "^7.10.4" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - "@babel/generator@^7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.5.tgz#1b903554bc8c583ee8d25f1e8969732e6b829a69" @@ -154,16 +115,6 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" - integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ== - dependencies: - "@babel/types" "^7.9.6" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - "@babel/helper-annotate-as-pure@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" @@ -171,13 +122,6 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-annotate-as-pure@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" - integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== - dependencies: - "@babel/types" "^7.8.3" - "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" @@ -198,12 +142,12 @@ semver "^5.5.0" "@babel/helper-create-class-features-plugin@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz#2d4015d0136bd314103a70d84a7183e4b344a355" - integrity sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ== + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== dependencies: "@babel/helper-function-name" "^7.10.4" - "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" "@babel/helper-optimise-call-expression" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-replace-supers" "^7.10.4" @@ -218,23 +162,14 @@ "@babel/helper-regex" "^7.10.4" regexpu-core "^4.7.0" -"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" - integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-regex" "^7.8.3" - regexpu-core "^4.7.0" - "@babel/helper-define-map@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz#f037ad794264f729eda1889f4ee210b870999092" - integrity sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA== + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== dependencies: "@babel/helper-function-name" "^7.10.4" - "@babel/types" "^7.10.4" - lodash "^4.17.13" + "@babel/types" "^7.10.5" + lodash "^4.17.19" "@babel/helper-explode-assignable-expression@^7.10.4": version "7.10.4" @@ -253,15 +188,6 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-function-name@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" - integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== - dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.9.5" - "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -269,13 +195,6 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-get-function-arity@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" - integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== - dependencies: - "@babel/types" "^7.8.3" - "@babel/helper-hoist-variables@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" @@ -283,19 +202,12 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-member-expression-to-functions@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz#7cd04b57dfcf82fce9aeae7d4e4452fa31b8c7c4" - integrity sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-member-expression-to-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" - integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz#172f56e7a63e78112f3a04055f24365af702e7ee" + integrity sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.5" "@babel/helper-module-imports@^7.10.4": version "7.10.4" @@ -304,27 +216,7 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-module-imports@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" - integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-module-transforms@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz#ca1f01fdb84e48c24d7506bb818c961f1da8805d" - integrity sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - lodash "^4.17.13" - -"@babel/helper-module-transforms@^7.10.5": +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz#120c271c0b3353673fcdfd8c053db3c544a260d6" integrity sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA== @@ -337,19 +229,6 @@ "@babel/types" "^7.10.5" lodash "^4.17.19" -"@babel/helper-module-transforms@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" - integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== - dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-simple-access" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.6" - "@babel/types" "^7.9.0" - lodash "^4.17.13" - "@babel/helper-optimise-call-expression@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" @@ -357,36 +236,17 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-optimise-call-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" - integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" - integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== - -"@babel/helper-plugin-utils@^7.10.4": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== "@babel/helper-regex@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.4.tgz#59b373daaf3458e5747dece71bbaf45f9676af6d" - integrity sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ== - dependencies: - lodash "^4.17.13" - -"@babel/helper-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" - integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" + integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== dependencies: - lodash "^4.17.13" + lodash "^4.17.19" "@babel/helper-remap-async-to-generator@^7.10.4": version "7.10.4" @@ -409,16 +269,6 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-replace-supers@^7.8.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444" - integrity sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.9.6" - "@babel/types" "^7.9.6" - "@babel/helper-simple-access@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" @@ -427,14 +277,6 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-simple-access@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" - integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== - dependencies: - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - "@babel/helper-split-export-declaration@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1" @@ -442,23 +284,11 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-split-export-declaration@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" - integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== - dependencies: - "@babel/types" "^7.8.3" - "@babel/helper-validator-identifier@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== -"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" - integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== - "@babel/helper-wrap-function@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" @@ -478,15 +308,6 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helpers@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580" - integrity sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw== - dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.9.6" - "@babel/types" "^7.9.6" - "@babel/highlight@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" @@ -496,34 +317,15 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.8.3": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" - integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== - dependencies: - "@babel/helper-validator-identifier" "^7.9.0" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64" - integrity sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA== - -"@babel/parser@^7.10.5": +"@babel/parser@^7.10.4", "@babel/parser@^7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b" integrity sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ== -"@babel/parser@^7.8.6", "@babel/parser@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" - integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q== - "@babel/plugin-proposal-async-generator-functions@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz#4b65abb3d9bacc6c657aaa413e56696f9f170fc6" - integrity sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg== + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" + integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-remap-async-to-generator" "^7.10.4" @@ -602,7 +404,7 @@ "@babel/helper-create-class-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-unicode-property-regex@^7.10.4": +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== @@ -610,14 +412,6 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" - integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.8" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-async-generators@^7.8.0": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -712,12 +506,11 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-block-scoping@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz#a670d1364bb5019a621b9ea2001482876d734787" - integrity sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A== + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz#b81b8aafefbfe68f0f65f7ef397b9ece68a6037d" + integrity sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" - lodash "^4.17.13" "@babel/plugin-transform-classes@^7.10.4": version "7.10.4" @@ -747,7 +540,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-dotall-regex@^7.10.4": +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== @@ -755,14 +548,6 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" - integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-duplicate-keys@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" @@ -808,11 +593,11 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-modules-amd@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz#cb407c68b862e4c1d13a2fc738c7ec5ed75fc520" - integrity sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA== + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" + integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== dependencies: - "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.5" "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" @@ -827,12 +612,12 @@ babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-systemjs@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz#8f576afd943ac2f789b35ded0a6312f929c633f9" - integrity sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ== + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" + integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== dependencies: "@babel/helper-hoist-variables" "^7.10.4" - "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.5" "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" @@ -867,9 +652,9 @@ "@babel/helper-replace-supers" "^7.10.4" "@babel/plugin-transform-parameters@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz#7b4d137c87ea7adc2a0f3ebf53266871daa6fced" - integrity sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ== + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" + integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== dependencies: "@babel/helper-get-function-arity" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" @@ -918,9 +703,9 @@ "@babel/helper-regex" "^7.10.4" "@babel/plugin-transform-template-literals@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz#e6375407b30fcb7fcfdbba3bb98ef3e9d36df7bc" - integrity sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ== + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" + integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== dependencies: "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" @@ -1047,10 +832,10 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f" - integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ== +"@babel/runtime@^7.8.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.5.tgz#303d8bd440ecd5a491eae6117fd3367698674c5c" + integrity sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg== dependencies: regenerator-runtime "^0.13.4" @@ -1063,31 +848,7 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/template@^7.8.3", "@babel/template@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" - integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/traverse@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.4.tgz#e642e5395a3b09cc95c8e74a27432b484b697818" - integrity sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.10.4" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/traverse@^7.10.5": +"@babel/traverse@^7.10.4", "@babel/traverse@^7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564" integrity sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ== @@ -1102,31 +863,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" - integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.6" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.9.6" - "@babel/types" "^7.9.6" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/types@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee" - integrity sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.10.5": +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.4.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15" integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q== @@ -1135,15 +872,6 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" -"@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7" - integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA== - dependencies: - "@babel/helper-validator-identifier" "^7.9.5" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - "@concordance/react@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@concordance/react/-/react-2.0.0.tgz#aef913f27474c53731f4fd79cc2f54897de90fde" @@ -1152,12 +880,13 @@ arrify "^1.0.1" "@istanbuljs/load-nyc-config@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" - integrity sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg== + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" find-up "^4.1.0" + get-package-type "^0.1.0" js-yaml "^3.13.1" resolve-from "^5.0.0" @@ -1233,17 +962,11 @@ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - "@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== dependencies: - "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" @@ -1270,9 +993,9 @@ integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= "@types/node@*": - version "13.13.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.5.tgz#96ec3b0afafd64a4ccea9107b75bf8489f0e5765" - integrity sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g== + version "14.0.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" + integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1326,10 +1049,10 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.5.5: - version "6.12.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" - integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== +ajv@^6.12.3: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -1606,9 +1329,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" - integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== + version "1.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== babel-code-frame@^6.26.0: version "6.26.0" @@ -1728,9 +1451,9 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" - integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== bindings@^1.5.0: version "1.5.0" @@ -1740,9 +1463,9 @@ bindings@^1.5.0: file-uri-to-path "1.0.0" blueimp-md5@^2.10.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.15.0.tgz#ae945f87ca6c2c11e2562983e11450b0545f9bb3" - integrity sha512-Zc6sowqlCWu3+V0bocZwdaPPXlRv14EHtYcQDCOghj9EdyKLMkAOODBh3HHAx5r7QRylDYCOaXa/b/edgBLDpA== + version "2.17.0" + resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.17.0.tgz#f4fcac088b115f7b4045f19f5da59e9d01b1bb96" + integrity sha512-x5PKJHY5rHQYaADj6NwPUR2QRCUVSggPzrUKkeENpj871o9l9IefJbO2jkT5UvYykeOK9dx0VmkIo6dZ+vThYw== boolbase@~1.0.0: version "1.0.0" @@ -1795,14 +1518,14 @@ braces@^3.0.1, braces@~3.0.2: fill-range "^7.0.1" browserslist@^4.12.0, browserslist@^4.8.5: - version "4.12.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d" - integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg== + version "4.13.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" + integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== dependencies: - caniuse-lite "^1.0.30001043" - electron-to-chromium "^1.3.413" - node-releases "^1.1.53" - pkg-up "^2.0.0" + caniuse-lite "^1.0.30001093" + electron-to-chromium "^1.3.488" + escalade "^3.0.1" + node-releases "^1.1.58" buffer-from@^1.0.0: version "1.1.1" @@ -1892,10 +1615,10 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001043: - version "1.0.30001055" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001055.tgz#7b52c3537f7a8c0408aca867e83d2b04268b54cd" - integrity sha512-MbwsBmKrBSKIWldfdIagO5OJWZclpJtS4h0Jrk/4HFrXJxTdVdH23Fd+xCiHriVGvYcWyW8mR/CPsYajlH8Iuw== +caniuse-lite@^1.0.30001093: + version "1.0.30001109" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001109.tgz#a9f3f26a0c3753b063d7acbb48dfb9c0e46f2b19" + integrity sha512-4JIXRodHzdS3HdK8nSgIqXYLExOvG+D2/EenSvcub2Kp3QEADjo2v2oUn5g0n0D+UNwG9BtwKOyGcSq2qvQXvQ== caseless@~0.12.0: version "0.12.0" @@ -2079,9 +1802,9 @@ cli-cursor@^3.1.0: restore-cursor "^3.1.0" cli-spinners@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.3.0.tgz#0632239a4b5aa4c958610142c34bb7a651fc8df5" - integrity sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w== + version "2.4.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.4.0.tgz#c6256db216b878cfba4720e719cec7cf72685d7f" + integrity sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA== cli-truncate@^0.2.1: version "0.2.1" @@ -2104,6 +1827,11 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -2295,9 +2023,9 @@ coveralls@3.1.0: request "^2.88.2" cross-spawn@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.2.tgz#d0d7dcfa74e89115c7619f4f721a94e1fdb716d6" - integrity sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw== + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -2601,10 +2329,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.413: - version "1.3.432" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.432.tgz#3bf7b191978ff2e8bc3caf811bb52b1e9f9eab25" - integrity sha512-/GdNhXyLP5Yl2322CUX/+Xi8NhdHBqL6lD9VJVKjH6CjoPGakvwZ5CpKgj/oOlbzuWWjOvMjDw1bBuAIRCNTlw== +electron-to-chromium@^1.3.488: + version "1.3.514" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.514.tgz#107499c28cb3c09fe6a863c19fc2202d5d9e8e41" + integrity sha512-8vb8zKIeGlZigeDzNWWthmGeLzo5CC43Lc+CZshMs7UXFVMPNLtXJGa/txedpu3OJFrXXVheBwp9PqOJJlHQ8w== elegant-spinner@^1.0.1: version "1.0.1" @@ -2644,9 +2372,9 @@ entities@^1.1.1, entities@~1.1.1: integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== entities@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.2.tgz#ac74db0bba8d33808bbf36809c3a5c3683531436" - integrity sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== equal-length@^1.0.0: version "1.0.1" @@ -2665,6 +2393,11 @@ es6-error@^4.0.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== +escalade@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" + integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== + escape-goat@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" @@ -2696,9 +2429,9 @@ escape-string-regexp@^4.0.0: integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^1.6.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" - integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== dependencies: esprima "^4.0.1" estraverse "^4.2.0" @@ -2840,9 +2573,9 @@ esutils@^2.0.2, esutils@^2.0.3: integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== execa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.1.tgz#988488781f1f0238cd156f7aaede11c3e853b4c1" - integrity sha512-SCjM/zlBdOK8Q5TIjOn6iEHZaPHFsMoTxXQ2nvUvtPnuohz3H2dIozSg+etNR98dGoYUp2ENSKLL/XaMmbxVgw== + version "4.0.3" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" + integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" @@ -2921,9 +2654,9 @@ extsprintf@^1.2.0: integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.2.0: version "1.2.0" @@ -2931,9 +2664,9 @@ fast-diff@^1.2.0: integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.0.3, fast-glob@^3.1.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.2.tgz#ade1a9d91148965d4bf7c51f72e1ca662d32e63d" - integrity sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A== + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -2953,9 +2686,9 @@ fast-levenshtein@~2.0.6: integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.7.0.tgz#fcd79a08c5bd7ec5b55cd3f5c4720db551929801" - integrity sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ== + version "1.8.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" + integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== dependencies: reusify "^1.0.4" @@ -3021,13 +2754,6 @@ find-cache-dir@^3.2.0: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -3078,9 +2804,9 @@ fragment-cache@^0.2.1: map-cache "^0.2.2" fromentries@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.2.0.tgz#e6aa06f240d6267f913cea422075ef88b63e7897" - integrity sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ== + version "1.2.1" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.2.1.tgz#64c31665630479bc993cd800d53387920dc61b4d" + integrity sha512-Xu2Qh8yqYuDhQGOhD5iJGninErSfI9A3FrriD3tjUgV5VbJFeH8vfgZ9HnC6jWN80QDVNQK5vmxRAmEAp7Mevw== fs-extra@1.0.0: version "1.0.0" @@ -3309,11 +3035,11 @@ har-schema@^2.0.0: integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: - ajv "^6.5.5" + ajv "^6.12.3" har-schema "^2.0.0" hard-rejection@^2.1.0: @@ -3393,11 +3119,11 @@ hosted-git-info@^2.1.4: integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== hosted-git-info@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d" - integrity sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ== + version "3.0.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.5.tgz#bea87905ef7317442e8df3087faa3c842397df03" + integrity sha512-i4dpK6xj9BIpVOTboXIlKG9+8HMKggcrMX7WA24xZtKwX0TPelq/rbaS5rCKeNX8sJXZJGdSxpnEGtta+wismQ== dependencies: - lru-cache "^5.1.1" + lru-cache "^6.0.0" html-escaper@^2.0.0: version "2.0.2" @@ -3467,9 +3193,9 @@ ignore-by-default@^2.0.0: integrity sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA== ignore@^5.1.1, ignore@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" - integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== import-fresh@^3.1.0: version "3.2.1" @@ -3554,20 +3280,20 @@ inquirer@^6.2.1: through "^2.3.6" inquirer@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" - integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== dependencies: ansi-escapes "^4.2.1" - chalk "^3.0.0" + chalk "^4.1.0" cli-cursor "^3.1.0" - cli-width "^2.0.0" + cli-width "^3.0.0" external-editor "^3.0.3" figures "^3.0.0" - lodash "^4.17.15" + lodash "^4.17.19" mute-stream "0.0.8" run-async "^2.4.0" - rxjs "^6.5.3" + rxjs "^6.6.0" string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" @@ -3975,9 +3701,9 @@ js-tokens@^3.0.2: integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= js-yaml@^3.10.0, js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -4117,7 +3843,7 @@ kind-of@^5.0.0: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -4231,14 +3957,6 @@ load-json-file@^5.2.0: strip-bom "^3.0.0" type-fest "^0.3.0" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -4324,12 +4042,7 @@ lodash.zip@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= -lodash@^4.1.0, lodash@^4.15.0, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.0: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -lodash@^4.17.19: +lodash@^4.1.0, lodash@^4.15.0, lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.2.0: version "4.17.19" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== @@ -4379,12 +4092,12 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: - yallist "^3.0.2" + yallist "^4.0.0" make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" @@ -4489,9 +4202,9 @@ merge-stream@^2.0.0: integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.2.3, merge2@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" - integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" @@ -4543,9 +4256,9 @@ mimic-fn@^2.0.0, mimic-fn@^2.1.0: integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-fn@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.0.0.tgz#76044cfa8818bbf6999c5c9acadf2d3649b14b4b" - integrity sha512-PiVO95TKvhiwgSwg1IdLYlCTdul38yZxZMIcnDSFIBUm4BNZha2qpQ4GpJ++15bHoKDtrW2D69lMfFwdFYtNZQ== + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" + integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" @@ -4558,9 +4271,9 @@ mimic-response@^2.0.0, mimic-response@^2.1.0: integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== min-indent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.0.tgz#cfc45c37e9ec0d8f0a0ec3dd4ef7f7c3abe39256" - integrity sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY= + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== minimatch@^3.0.4: version "3.0.4" @@ -4570,12 +4283,13 @@ minimatch@^3.0.4: brace-expansion "^1.1.7" minimist-options@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.0.2.tgz#29c4021373ded40d546186725e57761e4b1984a7" - integrity sha512-seq4hpWkYSUh1y7NXxzucwAN9yVlBc3Upgdjz8vLCP97jG8kaOmzYrVH/m7tQ1NYD1wdtZbSLfdy4zFmRWuc/w== + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== dependencies: arrify "^1.0.1" is-plain-obj "^1.1.0" + kind-of "^6.0.3" minimist@1.2.0: version "1.2.0" @@ -4656,10 +4370,10 @@ node-preload@^0.2.1: dependencies: process-on-spawn "^1.0.0" -node-releases@^1.1.53: - version "1.1.55" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.55.tgz#8af23b7c561d8e2e6e36a46637bab84633b07cee" - integrity sha512-H3R3YR/8TjT5WPin/wOoHOUPHgvj8leuU/Keta/rwelEQN9pA/S2Dx8/se4pZ2LBxSd0nAGzsNzhqwa77v7F1w== +node-releases@^1.1.58: + version "1.1.60" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" + integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== normalize-package-data@^2.5.0: version "2.5.0" @@ -4871,9 +4585,9 @@ onetime@^5.1.0: mimic-fn "^2.1.0" open@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48" - integrity sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA== + version "7.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-7.1.0.tgz#68865f7d3cb238520fa1225a63cf28bcf8368a1c" + integrity sha512-lLPI5KgOwEYCDKXf4np7y1PBEkj7HYIyP2DY8mVDRnx0VIIu6bNrRB0R66TuO7Mack6EnTNLm4uvcl1UoklTpA== dependencies: is-docker "^2.0.0" is-wsl "^2.1.1" @@ -4953,13 +4667,6 @@ p-is-promise@^2.0.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -4967,13 +4674,6 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -5022,11 +4722,6 @@ p-timeout@^3.1.0: dependencies: p-finally "^1.0.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -5068,9 +4763,9 @@ parse-json@^4.0.0: json-parse-better-errors "^1.0.1" parse-json@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" - integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== + version "5.0.1" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.1.tgz#7cfe35c1ccd641bce3981467e6c2ece61b3b3878" + integrity sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" @@ -5200,13 +4895,6 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - plur@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/plur/-/plur-4.0.0.tgz#729aedb08f452645fe8c58ef115bf16b0a73ef84" @@ -5236,11 +4924,6 @@ pretty-ms@^7.0.0: dependencies: parse-ms "^2.1.0" -private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -5381,9 +5064,9 @@ regenerate-unicode-properties@^8.2.0: regenerate "^1.4.0" regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== regenerator-runtime@^0.11.0: version "0.11.1" @@ -5391,17 +5074,16 @@ regenerator-runtime@^0.11.0: integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== regenerator-runtime@^0.13.4: - version "0.13.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== regenerator-transform@^0.14.2: - version "0.14.4" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" - integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== dependencies: "@babel/runtime" "^7.8.4" - private "^0.1.8" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" @@ -5424,9 +5106,9 @@ regexpu-core@^4.7.0: unicode-match-property-value-ecmascript "^1.2.0" registry-auth-token@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479" - integrity sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA== + version "4.2.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da" + integrity sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w== dependencies: rc "^1.2.8" @@ -5438,9 +5120,9 @@ registry-url@^5.0.0, registry-url@^5.1.0: rc "^1.2.8" regjsgen@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== regjsparser@^0.6.4: version "0.6.4" @@ -5614,10 +5296,10 @@ run-parallel@^1.1.9: resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== -rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.3, rxjs@^6.5.4: - version "6.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" - integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== +rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.3, rxjs@^6.5.4, rxjs@^6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.0.tgz#af2901eedf02e3a83ffa7f886240ff9018bbec84" + integrity sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg== dependencies: tslib "^1.9.0" @@ -5818,9 +5500,9 @@ spawn-wrap@^2.0.0: which "^2.0.1" spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" @@ -5831,9 +5513,9 @@ spdx-exceptions@^2.1.0: integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" @@ -6184,9 +5866,9 @@ trim-right@^1.0.1: integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= tslib@^1.9.0: - version "1.11.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.2.tgz#9c79d83272c9a7aaf166f73915c9667ecdde3cc9" - integrity sha512-tTSkux6IGPnUGUd1XAZHcpu85MOkIl5zX49pO+jfsie3eP0B6pyhOlLXm3cAC6T7s+euSDDUUV+Acop5WmtkVg== + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== tunnel-agent@^0.6.0: version "0.6.0" @@ -6479,19 +6161,17 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.7.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.9.2.tgz#f0cfa865f003ab707663e4f04b3956957ea564ed" - integrity sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg== - dependencies: - "@babel/runtime" "^7.9.2" + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@^18.1.1, yargs-parser@^18.1.2, yargs-parser@^18.1.3: +yargs-parser@^18.1.2, yargs-parser@^18.1.3: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== @@ -6499,24 +6179,7 @@ yargs-parser@^18.1.1, yargs-parser@^18.1.2, yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^15.0.2: - version "15.3.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" - integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.1" - -yargs@^15.4.1: +yargs@^15.0.2, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== From 58f144b6631efaa2f9b6eee4ff741f3d4b6a9bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 30 Jul 2020 20:05:30 +0200 Subject: [PATCH 21/23] :mag: test(gcd): Test edge case abs(a) === abs(b). --- test/src/Integer/gcd.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/test/src/Integer/gcd.js b/test/src/Integer/gcd.js index 4fa9d70..5efd6ce 100644 --- a/test/src/Integer/gcd.js +++ b/test/src/Integer/gcd.js @@ -31,4 +31,26 @@ test( macro , ZZ.from('52310721570994454309603316505452077132504750494613585448247191340916543146521771411345313270814742631') ) ; +function auto ( t , a ) { + t.is( a.abs().toString() , a.gcd(a).toString() ) ; +} + +auto.title = (providedTitle, a) => `auto gcd(${a.toString()},${a.toString()}) = ${a.toString()}` ; + +test( auto , ZZ.$0() ) ; +test( auto , ZZ.$1() ) ; +test( auto , ZZ.$_1() ) ; +test( auto , ZZ.from(2) ) ; +test( auto , ZZ.from(13280123) ) ; +test( auto , + ZZ.from('37650526072328171936695291762250209370684337226819795603338569781977444693437332193180866661042770508342415236941382410000000000000000') +) ; + +test( auto , + ZZ.from('-37650526072328171936695291762250209370684337226819795603338569781977444693437332193180866661042770508342415236941382410000000000000000') +) ; + +test( macro , ZZ.from(-3) , ZZ.from(3) , ZZ.from(3) ) ; +test( macro , ZZ.from(3) , ZZ.from(-3) , ZZ.from(3) ) ; + // test generated with https://github.com/aureooms-research/gcd From 3ed2966152bc0d799a8c7abcd8f8ad384e5f84c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 30 Jul 2020 20:17:30 +0200 Subject: [PATCH 22/23] :mag: test(egcd): Test edge case abs(a) === abs(b). --- test/src/Integer/egcd.js | 52 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/test/src/Integer/egcd.js b/test/src/Integer/egcd.js index ac663b6..e6dbe9e 100644 --- a/test/src/Integer/egcd.js +++ b/test/src/Integer/egcd.js @@ -71,6 +71,38 @@ test( macro , ZZ.$1() , ZZ.$1() , { v: ZZ.$_1() , } ) ; +test( macro , ZZ.$1() , ZZ.$_1() , { + gcd: ZZ.$1() , + x: ZZ.$0() , + y: ZZ.$_1() , + u: ZZ.$1() , + v: ZZ.$1() , +} ) ; + +test( macro , ZZ.$_1() , ZZ.$1() , { + gcd: ZZ.$1() , + x: ZZ.$0() , + y: ZZ.$1() , + u: ZZ.$_1() , + v: ZZ.$_1() , +} ) ; + +test( macro , ZZ.$_1() , ZZ.$_1() , { + gcd: ZZ.$1() , + x: ZZ.$0() , + y: ZZ.$_1() , + u: ZZ.$_1() , + v: ZZ.$1() , +} ) ; + +test( macro , ZZ.from(2) , ZZ.from(2) , { + gcd: ZZ.from(2) , + x: ZZ.$0() , + y: ZZ.$1() , + u: ZZ.$1() , + v: ZZ.$_1() , +} ) ; + test( macro , ZZ.from(2) , ZZ.from(3) , { gcd: ZZ.$1() , x: ZZ.$_1() , @@ -95,6 +127,14 @@ test( macro , ZZ.from(2) , ZZ.from(4) , { v: ZZ.from(1) , } ) ; +test( macro , ZZ.from(73218321) , ZZ.from(73218321) , { + gcd: ZZ.from(73218321) , + x: ZZ.$0() , + y: ZZ.$1() , + u: ZZ.$1() , + v: ZZ.$_1() , +} ) ; + test( macro , ZZ.from('240') , ZZ.from('46') , @@ -308,4 +348,16 @@ test( macro , } ) ; +test( macro , + ZZ.from('27464428722379302537066207419729547039001666019484342119914191943374771553192802830064910464708682216') , + ZZ.from('27464428722379302537066207419729547039001666019484342119914191943374771553192802830064910464708682216') , + { + gcd: ZZ.from('27464428722379302537066207419729547039001666019484342119914191943374771553192802830064910464708682216') , + x: ZZ.$0() , + y: ZZ.$1() , + u: ZZ.$1() , + v: ZZ.$_1() , + } +) ; + // test generated with https://github.com/aureooms-research/gcd From aa6fcd252b145c760258d58fc738e79b82c3fae7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Ooms?= Date: Thu, 30 Jul 2020 20:23:16 +0200 Subject: [PATCH 23/23] v9.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ffbf9bc..b31317a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@aureooms/js-integer", "description": "Integers for JavaScript", - "version": "8.0.0", + "version": "9.0.0", "author": "Aurélien Ooms ", "ava": { "require": [