@aztec/protocol-contracts 3.0.0-nightly.20251126 → 3.0.0-nightly.20251128
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/AuthRegistry.json +6 -6
- package/artifacts/ContractClassRegistry.json +5 -5
- package/artifacts/ContractInstanceRegistry.json +5 -5
- package/artifacts/FeeJuice.json +5 -5
- package/artifacts/MultiCallEntrypoint.json +6 -6
- package/artifacts/Router.json +5 -5
- package/dest/auth-registry/index.d.ts +1 -1
- package/dest/auth-registry/lazy.d.ts +1 -1
- package/dest/class-registry/contract_class_published_event.d.ts +1 -1
- package/dest/class-registry/contract_class_published_event.d.ts.map +1 -1
- package/dest/class-registry/index.d.ts +1 -1
- package/dest/class-registry/lazy.d.ts +1 -1
- package/dest/class-registry/private_function_broadcasted_event.d.ts +1 -5
- package/dest/class-registry/private_function_broadcasted_event.d.ts.map +1 -1
- package/dest/class-registry/utility_function_broadcasted_event.d.ts +1 -4
- package/dest/class-registry/utility_function_broadcasted_event.d.ts.map +1 -1
- package/dest/fee-juice/index.d.ts +1 -1
- package/dest/fee-juice/lazy.d.ts +1 -1
- package/dest/index.d.ts +1 -1
- package/dest/instance-registry/contract_instance_published_event.d.ts +1 -1
- package/dest/instance-registry/contract_instance_published_event.d.ts.map +1 -1
- package/dest/instance-registry/contract_instance_updated_event.d.ts +1 -1
- package/dest/instance-registry/contract_instance_updated_event.d.ts.map +1 -1
- package/dest/instance-registry/index.d.ts +1 -1
- package/dest/instance-registry/lazy.d.ts +1 -1
- package/dest/make_protocol_contract.d.ts +1 -1
- package/dest/multi-call-entrypoint/index.d.ts +1 -1
- package/dest/multi-call-entrypoint/lazy.d.ts +1 -1
- package/dest/protocol_contract.d.ts +1 -1
- package/dest/protocol_contract_data.d.ts +1 -1
- package/dest/provider/bundle.d.ts +1 -1
- package/dest/provider/bundle.d.ts.map +1 -1
- package/dest/provider/lazy.d.ts +1 -1
- package/dest/provider/lazy.d.ts.map +1 -1
- package/dest/provider/protocol_contracts_provider.d.ts +1 -1
- package/dest/router/index.d.ts +1 -1
- package/dest/router/lazy.d.ts +1 -1
- package/dest/tests/fixtures.d.ts +1 -1
- package/package.json +9 -8
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"transpiled": true,
|
|
3
|
-
"noir_version": "1.0.0-beta.15+
|
|
3
|
+
"noir_version": "1.0.0-beta.15+1a930357477fc0c210dc5a8960680282d4cfa24e",
|
|
4
4
|
"name": "ContractClassRegistry",
|
|
5
5
|
"functions": [
|
|
6
6
|
{
|
|
@@ -5873,7 +5873,7 @@
|
|
|
5873
5873
|
}
|
|
5874
5874
|
},
|
|
5875
5875
|
"bytecode": "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",
|
|
5876
|
-
"debug_symbols": "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+FWJ1wYVVYA158xv9QVqiVp9bVBbRdFq1dckCsp4+cVBFXw7Rl5qRdE4D++xOGkvSeC7TyU/Rv8sUeh4zAoh/5PQs+2mYzvwdcPO/Nql9P/xA4nfkogpXvprUVJ6vHr64Tsc37sQlLle9LZEebUVComXwv2x1kVfNH27Fa8N6t13Xuj0eOnmOy902vW6+87LaXWhsf5u/Xq+oXFcMSJpSJb4dEzjSULiBq1IqkL6jkRnfOWBX2vFiBPvHyuy8ooEXdjjvtILYt9pBb4y9UjHr12I4rMqvbx0IfP7P3E/M15rBT7cVVr+Ut03JFpEyeMpKD+VKHR8HvT+DWKNHeryYbHznUuJ75CW/J7Oqx36ogTKOOckQVd8fuWW2vFsxgsvuKXdh/t3RgM33PmFls/NOAdrOs9EXpLoOADkyu9i/9IZp3Pybr9tS3w8Svze27bHrZS47Z7PhE+Xc3ztSXH3LlqeHt/zlUocivxg4ecqx9eH8arepccB6u8+Dj7+RkbN8ePn8qWplr+4mRfWv17J6UWj+1PteNre3ePVvxphPAuR598herSl/fZ5woRXW3LJ7K+9e/cA0FMx1hcqhPOm5ahyOnfqbqEbnQrdbxa6HVtyu9DNjul7ej13C91ITzP3VqHbORs8RjZ92ZTT0qZcn/vl9DWfeHcozbdWb+cDij2cVvN7lPx5/a/vH6H9EHn/mLSHyNvnpJ01bh5HcP9i9HQx75+jXaj/wFlpX7QEb6pcRQ8tOb3IdO9FWTod1XL71Lazyt1j244qt89tO7fl7sFtZxUqKL47tmUcb7aukJl8OMLqK52758h9oXP7ILmvdO6eJHfu5btHyZ1V7p4ld4ymmy97H8P67mlyZ5Gbx8nRGG/nhnod78RuvkR/bMndfj2P8M3z5L6YtbcPlPtC5/aJcl/p3DxS7nRz2C5BCD2fLfX6gaVCvd5fKhw1bi4V7l/M86XCsfwhbiw/pKVvKDChnLU+X2nU05GDd4/W+ULk3jkl91vyXOQ4TTt+lVs5NEPfn2Enjbsz7PQQ6+5zgkrvPyeoVI6P3/Hpr/y491Pt40PlsKKdXw0LlXH4La/Hjzrd2jv8omNvftOpnt6aIpwldZ0kynElin3MB5dTz57G52Zt6hcqjFe5c0L7pgrFE4wHtpdV4oSfUct4uV8Ydb8ir87bHg8NR+d6mrd3VdKH/L6rEvntgfKiyv3S36/6915d9e2E/XwpW0/n/+GJl+opTZ4P875Zmv2lzs3i7Mclyc8M0UnnXnn2Fxq36rO/0nhaoP2/H//nj//257//y1/+9m9//Mef//bX/3j8vf+eUn//8x//9S9/2v/3//7nX/8t/dt//P//3f/Nv/79z3/5y5//37/8+9//9m9/+j//+fc/TaX57/5w7f/5X31+dqU/nob/73/6Q3n8/1EeP4vj8aD38f/r4/8/tkmY5r+b/7HO8z0e/6PzH8z/us9f88f/0P/+79nc/w8="
|
|
5876
|
+
"debug_symbols": "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"
|
|
5877
5877
|
},
|
|
5878
5878
|
{
|
|
5879
5879
|
"name": "sync_private_state",
|
|
@@ -6031,7 +6031,7 @@
|
|
|
6031
6031
|
}
|
|
6032
6032
|
},
|
|
6033
6033
|
"bytecode": "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",
|
|
6034
|
-
"debug_symbols": "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"
|
|
6034
|
+
"debug_symbols": "tb3driQ5cqX7LnWtCyfNjD96lcFA6NH0DBpodAst6QAHgt79BM3d7IvMOsH0HbHrpvPrqsq16CTNwkk3p//Xb//7z//rP//vv/zlb//n7//+2z//j//67X/94y9//etf/u+//PXv//qn//jL3//2+Kf/9dux/qeX3/5Z/um3Xn/7Z3v8Iecfev5h5x/t/KOff4zzj+l/jOP8o5x/nCrjVBmnyjhVxqkyTpVxqoxTZZ4q81SZp8o8VeapMk+VearMU2WeKvNUKcdx/VmuP+v1p1x/6vWnXX+2689+/TmuPy+9cumVS69ceuXSK5deufTKpVcuvXLplUuvXnr10quXXr306qVXL7166dVLr1569dKTS08uPbn05NKTh15ff9r1Z7v+7NefD71yLJgX6BHwkCyy4KFZ1n+sEqABFtACesBSHgvmBXYElIAaIAEaYAEtoAeEsi3l+YB2BJSApbw6oEmABjyUq0ML6AEjYF7Qj4ASUAMkQANCuYdyD+UVMnV1ywoahxU2J5SAGiABGmABLaAHhPII5RnKM5RnKM9QnqE8Q3mG8gzlGcrzUq7HEVACaoAELOW5wAJaQA8YAfOCFWcnlIAaIAGhXEK5hHIJ5RLKJZRrKNdQrqFcQ7mGcg3lGso1lGso11CWUJZQllCWUJZQllCWUJZQllCWUNZQ1lDWUNZQ1lDWUNZQ1lDWUNZQtlC2ULZQtlC2ULZQtlC2ULZQtlBuodxCuYVyC+UVg1IXWEAL6AEjYF6wYvCEElADJCCUeyj3UF4xKLZgBMwLVgzqsaAE1AAJ0AALaAE9YATMC2Yoz1CeoTyvvFGnBlhAC+gBI+DKSHIcASWgBkiABljAarMs6AEjYF6wYvCEElADJEADLCCUSyiXUC6hvGJQdUEJqAESoAEW0AJ6wAiYF0goSyhLKK8Y1L5AAyxg/aqWBT1gBMwLVgyeUAJqgARogAWEsoayhrKGsoWyhbKFsoWyhbKFsoWyhbKFsoVyC+UWyi2UWyi3UG6h3EK5hXIL5RbKPZR7KPdQ7qHcQ7mHcg/lHso9lHsoj1AeoTxCeYTyCOURyiOURyiPUB6hPEN5hvIM5RnKM5RnKM9QnqE8Q3leynocASWgBkiABlhAC+gBIyCUSyiXUC6hXEK5hHIJ5RLKJZRLKJdQrqFcQ7mGcg3lGso1lGso11CuoVxDWUJZQllCWUJZQllCOWJQIwY1YlAjBtVjUBaUgBogARpgAS2gB4yAeYGFsoWyhbKFsoWyhbKFsoWyhbKFcgvlFsotlFsot1BuodxCuYVyC+UWyj2Ueyj3UO6h3EO5h3IP5R7KPZR7KI9QHqE8QnmE8gjlEcojlEcoj1AeoTxDeYbyDOUZyjOUZyjPUJ6hPEN5Xsp2HAEloAZIgAZYQAvoASMglEsol1AuoVxCuYRyCeUSyiWUSyiXUK6hXEO5hnIN5RrKNZRrKNdQrqFcQ1lCWUJZQllCWUJZQllCWUJZQllCOWLQIgYtYtAiBi1i0CIGLWLQIgYtYtAiBi1i0CIGLWLQIgYtYtAiBi1i0CIGLWLQIgYtYtAiBi1i0CIGLWLQIgYtYtA8BtuCETAv8Bh0KAE1QAI0wAJaQCj3UO6hPEJ5hPII5RHKI5RHKI9QHqE8QnmE8gzlGcoeg32BBGjAUp4LWkAPGAHzhOYx6FACaoAEaIAFtIAeMAJCuYRyCeUSyiWUSyiXUC6hXEK5hHIJ5RrKNZRrKNdQrqFcQ7mGcg3lGso1lFcMtmNBCagBD+VWFmiABTyUmyzoASPgodwe49VWDJ5QApbyWCABGmABLaAHjIB5wYrBE0pAKFsoWyivGOyrzSsGT+gBI2BesGLwhBJQAyRAA0K5hXIL5RWDvS6YF6wYPKEE1AAJ0AALaAE9IJR7KI9QHqE8QnmE8gjlEcojlEcoj1AeoTxDeYbyDOUZyjOUZyjPUJ6hPEN5Xsr9OAJKQA2QAA2wgBbQA0ZAKJdQLqFcQrmEcgnlEsollEsol1AuoVxDuYZyDeUayjWUayjXUK6hXEO5hrKEsoSyhLKEsoSyhLKEsoSyhLKEsoayhrKGsoayhrKGsoayhrKGsoayhbKFsoWyhbKFsoWyhbKFsoWyhXIL5RbKLZRbKLdQ9hj0vf4W0ANGwLzAY9ChBNQACdCAUO6h3EO5h3IP5RHKI5RHKI9QHqE8QnmE8gjlEcojlGcoz1CeoTxDeYbyDOUZyjOUZyjPS3kcR0AJqAESoAEW0AJ6wAgI5RLKJZRLKJdQLqFcQrmEcgnlEsollGso11CuoVxDuYZyDeUayjWUayjXUJZQllCWUJZQllCWUJZQllCWUJZQ1lDWUNZQ1lDWUNZQ1lDWUNZQ1lC2ULZQtlC2ULZQtlC2ULZQtlC2UG6h3EK5hXIL5RbKEYMjYnBEDI6IwRExOCIGR8TgiBgcEYMjYnBEDI6IwRExOCIGR8TgiBgcEYMjYnBEDI6IwRExOCIGR8TgiBgcEYMjYnBEDI6IwRExOCIGR8TgiBgcEYMjYnBEDM6IwRkxOCMGZ8TgjBicEYMzYnBGDM6IwRkxOCMGZ8TgjBicEYMzYnBGDM6IwRkxOCMGZ8TgjBicEYMzYnBGDM6IwRkxOCMGZ8TgjBicEYMzYnB6DI4FNUACNMACWkAPGAHzAo9Bh1DWUNZQ9hicCyygBfSAETAv8Bh0KAE1QAJC2ULZQtlC2ULZQrmFcgvlFsotlFsot1BuodxCuYVyC+Ueyj2Ueyj3UO6h3EO5h3IP5R7KPZRHKI9QHqE8QnmE8gjlEcojlEcoj1CeoTxDeYbyDOUZyjOUZyjPUJ6hPC/lx9P3I6kk1aSH+ihOmmRJD4OhTj1pJM2gFY4XlaSaJEmaZEnpUdKjpEdJj5oeNT1qetT0qOlR06OmR02Pmh41PSQ9JD0kPSQ9JD0kPSQ9JD0kPSQ9ND00PTQ9ND00PTQ9ND00PTQ9ND0sPSw9LD0sPSw9LD0sPSw9LD0sPVp6tPRo6dHSo6VHS4+WHi09Wnq09Ojp0dOjp0dPj54ePT16evT06OnR02Okx0iPkR4jPUZ6jPQY6THSY6THSI+ZHjM9ZnrM9JjpMdNjpsdMj5keMzy8zOaiklSTJEmTLKkl9aSRlB4Z5yXjvGScl4zzknFeMs5LxnnJOC8Z5yXjvGScl4zzknFeMs5LxnnJOC8Z5yXjvGScl4zzknFeMs5LxnnJOC8Z5yXjvGScl4zzknFeMs5LxnnJOC8Z5yXjvGScl4zzknFeMs5LxnnJOC8Z5yXjvGScl4zzknFeMs5LxnnJOC8Z5yXjvGScl4zzknFeMs5LxnnJOC8Z5yXjvGScl4zzknFeMs5LxnnJOC8Z5yXjvGScl4zzknFeMs5LxnnJOC8Z5yXjvGScl4zzknFeMs5LxnnJOC8Z5yXjvGScl4zzknFeMs5LxnnJOC8Z5yXjvGac14zzmnFeM85rxnnNOK8Z5zXjvGac14zzmnFeM85rxnnNOK8Z5zXjvGac14zzmnFeM85rxnnNOK8Z5zXjvGac14zzmnFeM85rxnnNOK8Z5zXjvGac14zzmnFeM85rxnnNOK8Z5zXjvGac14zzmnFeM85rxnnNOK8Z5zXjvGac14zzmnFeM85rxnnNOK8Z5zXjvGac14zzmnFeM85rxnnNOK8Z5zXjvGac14zzmnFeM85rxnnNOPeyodGdSlJNkiRNsqSW1JNG0gwa6THSY6SHx/lw0iRLakk9aSTNII/zk0pSTUqPmR4zPWZ6zPSY6THDw4uKLipJNUmSNMmSWlJPGknpUdKjpEdJj5IeJT1KepT0KOlR0qOkR02Pmh41PWp61PSo6VHTo6ZHTY+aHpIekh6SHpIekh6SHpIekh6SHpIemh6aHpoemh6aHpoemh6aHpoemh6WHpYelh6WHpYelh6WHpYeK86nlxKvOD9pxflFD48pTjVJkjTJklpSTxpJM2jF+UXp0dOjp0dPj54ePT16evT06Okx0mOkx0iPkR4jPUZ6jPQY6THSY6THTI+ZHjM9ZnrM9JjpMdNjpsdMjxkeXrh0UUmqSZKkSZbUknrSSEqPkh4lPUp6lPQo6VHSo6RHSY+SHiU9anrU9KjpUdOjpkdNj5oeNT1qetT0kPSQ9JD0kPSQ9JD0kPSQ9JD0kPTQ9ND00PTQ9ND00PTQ9ND00PTQ9LD0sPSw9LD0sPSw9LD0sPSw9LD0aOmRca4Z55pxrhnnmnGuGeeaca4Z55pxrhnnmnGuGeeaca4Z55pxrhnnmnGuGeeaca4Z55pxrhnnmnGuGeeaca4Z55pxrhnnmnGuGeeaca4Z55pxrhnnmnGuGeeaca4Z55pxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcW4Z55ZxbhnnlnFuGeeWcd4yzlvGecs4bxnnLeO8ZZy3jPOWcd4yzlvGecs4bxnnLeO8ZZy3jPOWcd4yzlvGecs4bxnnLeO8ZZy3jPOWcd4yzlvGecs4bxnnLeO8ZZy3jPOWcd4yzlvGecs4bxnnLeO8ZZy3jPOWcd4yzlvGecs4bxnnLeO8ZZy3jPOWcd4yzlvGecs4bxnnLeO8ZZx72dZsTpbUknrSSJpBHucnlaSaJEnp0dKjpUdLj5YeLT16evT06OnR06OnR0+Pnh49PXp6eJyvNYkXdF1UkmqSJGmSJbWknjSS0mOmx0yPmR4zPWZ6zPSY6THTY6bHDA8v8rqoJNUkSdIkS2pJPWkkpUdJj5IeJT1KepT0KOlR0qOkR0mPkh41PWp61PSo6VHTo6ZHTY+aHjU9anpIekh6SHpIekh6SHpIekh6SHpIemh6aHpoemh6aHpoemh6aHpoemh6WHpYelh6WHpYelh6WHpYelh6WHq09Gjp0dKjpUdLj5YeLT1aerT0aOnhcT6dSlJNkiRNsqSW1JNG0gwa6THSY6THSI+RHiM9RnqM9BjpMdJjpsdMj5keMz1mesz0mOkx02OmxwwPLyS7qCTVJEnSJEtqST1pJKVHSY+SHiU9SnqU9CjpUdKjpEdJj5IeNT1qetT0qOlR06OmR02Pmh41PWp6SHqsOH88iHSsoIC6UBwNbGAHBzgTz7fiTyxgBQXETXFT3BQ3xU1xM9wMN8PNcDPcDDfDzXAz3Ay3hlvDreHWcGu4Ndwabg23hlvDrePWceu4ddw6bh23jlvHrePWcRu4DdwGbgO3gdvAbeA2cBu4DdwmbhO3idvEbeI2cZu4TdwmbjPdvOItsIAVFFBBAxvYwQHiVnAruBXcCm4Ft4Jbwa3gVnAruFXcKm4Vt4pbxa3iVnGruFXcKm6Cm+AmuAlu5JJJLpnkkkkumeSSSS6Z5JJJLpnkkkkumeSSSS6Z5JJJLpnkkkkumeSSSS6Z5JJJLpnkkkkumeSSSS6Z5JJJLpnkkkkumeSSSS6Z5JJJLpnkkkkumeSSSS6Z5JJJLpnkkkkumeSSSS6Z5JJJLpnkkkkumeSSSS6Z5JJJLpnkkkkumeSSSS6Z5JJJLpnkkkkumeSSSS6Z5JJJLpnkkkkumeSSmbmkHplL6pG5pB6ZS+qRuaQemUvqkbmkHplL6pG5pB6ZS+px4FZwK7gV3ApuBbeCW8Gt4FZwK7hV3CpuFbeKW8Wt4lZxq7hV3CpugpvgJrgJboKb4Ca4CW6Cm+CmuCluipviprgpboqb4qa4KW6Gm+FmuBluhpvhZrgZboab4dZwa7g13BpuDbeGW8Ot4dZwa7h13DpuHbeOW8et49Zx67h13DpuA7eB28Bt4DZwG7gN3AZuA7eB28Rt4jZxm7hN3CZuE7eJ28SNXFLIJYVcUsgl5cwlzVFBAxvYwQHOxDOXnFjACuJ25pLqaGADOzjAmXjmkhMLWEEBcau4VdwqbhW3ipvgJrgJboKb4Ca4CW6Cm+AmuCluipviprgpboqb4qa4KW6Km+FmuBluhpvhZrgZboab4Wa4Ndwabg23hlvDreHWcDtzyXQc4Ew8c8mJBayggAoa2EDcOm4dN88lRR0LWMHlVg9HBS3QC+/W2WjVC+8eM9vR/704NrCDA5yJHiEXFrCCAiqIW8Wt4lZxq7gJboKb4Ca4CW6Cm+AmuAlugpviprgpboqb4qa4KW6Km+KmuBluhpvhZrgZboab4Wa4GW6GW8Ot4dZwa7g13BpuDbeGm0dIbY4z0SPkwgJWUEB3644GNrCDA5yJHiEXFrCCAuJ2RshwbKC7TccBzkT/tb2wgBUUcLn5MWVetRfYwOUm6jjAGeile4/c7ljACgqooIHuNhw7OMCZ6L+2FxawggIqaCBunktkOg5wJnrW8JPavHav+PlpXqj3+FlyXAp6/gcDnImeHy4sYAVdtzkqaGADOzjAmej54cICVhA3zw/qA+D54cLlZn6Znh8uHOBM9PxwYQGX2zo9qXoNX6CCBjawgwOciZ4fLiwgbudJmz4s51mbJ7qbODawgwN0N+8Hzw8XFrCCAirobj65PD9c2MEBzkTPDxcWsIICKoib5wfzSev54cIBuptPOc8PFxawgUthnRtSvWCvrMNAqtfpPe5NHAVU0MAGuthwHOBM9JC+sIAVdLfpqKCBDezgAGei3x5cWMAK4ua3B937wW8PLmzgclunhFSv4AuciR7+3bvPw797l3j49+YooIIGNrAneqB3b6QH+oUVFFBBSzzPt62ODVwWw9vr8TbMsYAVFFBBS/S4GN5ej4sLG9jBAc5Ej4sLC1hBAXEbuA3cBm4Dt4Gb/0KuyvnqFW9l+OzzuJg+3B4XFw5wKcw13F72FljACgqooOuuAfCitrLqJ6pXtZVVUFC9rC1QQFcwRwMb2MEBzkQPhtkdC+huw1FABV13TSMvXntsrTkW0BXUUdY/9cv0s2gvNLCBfaH3g59Je+FM9HNpfQ3vdWyBFcRNcVPcFDc/pfbCkWOhjKYxmsZoGqNpjKbH0DmE56nQ3pzzXGgfrMZoNkbTY+gci8ZoNkazMZqN0WyMpv9mnePWGU3/zToHqzOandH0KDyH0E+EPsdtMJoeb+cQ+rnQZ0cN+nfQv4P+9fOhz8EajOZgNP2U6HOwJqM5Gc2J28Rt4jZxmzmaXv312L1zNLCB3pzuOMCZ6Ac1X1jACgqooIHLrXhz/NjmCwc4Ez1wLizgcvOVsBeEBSpooLs1xw4O0N28ZR44FxbQ3YajgAoa6G7Tcen6wt1rwQILWMGlW6vj0vU1mReEPZaajg3s4ADdza/Yj3i+sIAVdDe/Nj9l/Tz02c9ZF2+On7R+Hfy8LOT8azPRz1u/sIAVFFDB5Sbe6372+oXu5s3x89cvnIkebxcWsIICKmhgA3EbuA3cJm4Tt4nbxG3iNnGbuE3c/IxoX1F5xdiJXjIWWMAKCqig607HAc5EP6n9wgJWUEAFDWwgbgW3glvFreJWcau4VdwqbhW3ilvFreImuAlugpvgJrgJboKb4Ca4CW6Km+KmuCluipviprgpboqb4ma4GW6Gm+FmuBluhpvhZrgZbg23hlvDreHWcGu4Ndwabg23hlvHrePWceu4ddw6bh23jlvHreM2cBu4DdwGbgO3gdvAbeA2cBu4TdwmbhO3idvEbeI2cZu4Tdxmuo3jAAtYQQEVNLCBHRwgbuSSQS4Z5JJBLhnkkkEuGeSSQS4Z5JJBLhnkEq9KeyxLHSsooEVGHGcCObGDA8ykO+QAC1hBARXETXAT3AQ3wU1xU9wUN8VNcVPcFDfFTXFT3Aw3w81wM9wMN8PNcDPcDDfDreHWcGu4Ndwabg23hlvDreHWcOu4ddw6bh23jlvHrePWceu4ddwGbgO3gdvAbeA2cBu4DdwGbgO3idvEbeI2cZu4TdwmbhM3bjsGtx2T247JbcfktmNy2zG57ZiHgQ3s4ABxK7gV3ApuBbeCW8Gt4FZwK7gV3CpuFbeKW8Wt4kYumeSSSS6Z5JJJLpnkEi9Kq+ujFtWL0gIFXG6+r+xFaYENXG6+4+1FaYEz0XPJhQWsoLtNRwUNdDdvr+eSCwc4Ez2XXFjA5eabyV6UFqjgcvN9ZS9KC+zgSPSs4fvKXmj22FlwNLCBruAddX4C6sSZeH4GqjsWsIICuptf0PlBqBMb2BM9E/gGsRePVd/09eKxQAO9f93CY/7CAc5Ej/kLC1hBd/NO9Zi/0MAGdnCA80Lx4rHAAlZQQAUNbGAHB+hu1T9747riKKCCBjawgwOciR7dFxYQt4pbxa3iVnGruFXcKm6Cm+AmuAlugpvgJrgJboKb4Ka4KW6Km+KmuCluipviprgpboab4Wa4GW6Gm+FmuBluhpvh1nBruDXcGm4Nt4Zbw63h1nBruHXcOm4dt45bx63j1nHruHXcOm4Dt4HbwG3gNnAbuA3cBm4Dt4HbxG3iNnGbuE3cJm4Tt4nbxG2mWzkOsIAVFFBBAxvYwQHiVnAruJFLCrmkkEsKuaSQSwq5pJBLCrmknLlEHQtYQQEVNLCBHRzgTDxzSXcsYAXdzRwVNLCBHRzgTDxzyYkFrCBuituZS6ZjA3vimTVOdIXhqOBS6N6/nh8u7OAAZ6LnhwtXe7t3ieeHCwVU0N3c2PPDhR10N2+v54cTPT9cuNzG4VhBARVcbuscVDk/Hjm8vZ4Jho+xZ4ILC1hB122OrutX4ZlgeHM8E0x380xw4QBnomeC6c3xTHBhBQVcbtPb6+E/vTke/tNH3sN/enNW+Mt6wCF+tFxgASsooIIGtoXFsYMzptH5UckLC1hBARU0sIEdHCBuFbeKW8Wt4lb9gsTRwAb6BanjAGeiHGABKyigggY2EDfBTdxtzSgvfAssYAUFVNDABnZwgLgZboab4Wa4mbuZo49QdRxg3jmen6i8sIAVFFBBAxuIW8Ot4dZx67h13DpuHbeOW8et49Zx67gN3AZuA7eB28Bt4DZwG7gN3AZuE7eJ28Rt4jZxm7hN3CZuE7eZbucnLy8sYAUFVNDABnZwgLgV3ApuBbeCW8Gt4FZwK7gV3ApuFbeKW8Wt4lZxq7hV3CpuFbeKm+AmuAlugpvgJrgJboKb4Ca4KW6Km+KmuCluipviprgpboqb4Wa4GW6Gm+FmuBlu5BIhlwi5RMglQi4RcomQS4RcIuQSIZcIuUTIJUIuEXKJkEuEXCLkEiGXCLlEyCVCLhFyiZBLhFwi5BIhlwi5RMglQi4RcomQS4RcIuQSIZcIuUTIJUIuEXKJkEuEXCLkEiGXCLlEySVKLlFyiZJLlFyi5BIllyi5RMklSi5RcomSS5RcouQSJZcouUTJJUouUXKJkkuUXKLkEiWXKLlEySVKLlFyiZJLlFyi5BIllyi5RMklSi5RcomSS5RcouQSJZcouUTJJUouUXKJkkuUXKLkEiWXKLlEySVKLlFyiZJLlFyi5BIllyi5RMklSi5RcomSS5Rc4qV+sqpZxEv9AgVU0MAGdnCAM9E/p30hbh23jlvHrePWceu4ddw6bgM3zyVrs1O8hDDQ3YajggY2sIMDnIkrlzx+wB0LWMHltmp9xM/XCzTQ3bxls4MD9HFbYnbmkhMLWEEBFTSwgR0ciSV2scWLEAP9KqqjggY2sIMDnInV+0wdC1hBdzNHBQ10N2+Zr1suHKDvpLuYZ40LC1hBARU0sIEdHIm+QlklWOKliYEC+lV0RwMb6FcxHAfofbYmgZcmBhZwuVUfN1+hXKiggQ3s4ACX23oTS7yMMbCAFRRQQa+Mc7GzYNGHu0U5p3jBYmABKyigggZ6fZ+Psd9VXDjAmTiitFau4sYTKyigggY2sIMjcTLyk5GfjPxk5CcjPxn5ychPRn7myPuJe4EFzJH3Q/cCFTSwgR0cYI68n70XWMAKCqhgjnwrOfJXraVjPcACVlBABQ3MkT9rLS8cYI6811qeI+S1loEVFFBBAxvYwRx5r6qU6i3zmL9QQAV9LM6/1sAODnBehejitZaBBayggAoa2MCeeEa3OhawggIqaGADOzjAmdhx67h13DpuHTf/9a/eXv/1v7CDA5yJ/ut/obt5tIwKCqiggQ3s4ABnov/6X4ibZwLxYPBMcKGCy018angmWCWl4gWWgQOcgV5gGVjACgqooLs1xwa6W3cc4Ez0THDhcluvwomXXQYKqKCBDezgAJfbKn8SL7sMdLfqWEEBFTTQLcRxgDPRNzAvLKBbeJf4BuaFChrYwA66m3eUb2Ce6BuYFxawggIqaGADO4ib3x6sQgbxWsvAArrbdBRQweVm3ut+e2Dek3574Pd9XmsZOBM9gVxYwAr6owynltSTRtIMOp9iLPII9vsqL3YMrKDfrzlpkiW1pJ40gjxK7cTVDeYj6PF4/sOW1JO8x53mRV61eFFJqkmS5Cbd0UB3GY4dHIkecL5a8SpE8Vtzr0IM9EB2WgJesuBFiIEz0SPrwgLWq0vOGsSTNMmSWlJ0p9ccnp3o1YVnJ3p1ofia0qsLA1dD/RGlVxcGeku9h1bIqNOKmItKUk2SJE1yRW+IB0DzhqwA8ADxUsGLJGn97fO/s6SW1JNG0gzyee8POL1EMHCNuz8w9BLBQAW9mT6a/mPYfQj9x/DC1U6/DP8tPDvGfwsvNLCBS7b7aPpv4YUz0SPp7HCPpAsriNvAbeA2cBu4DdwGbhO3idvEbeI2cZu4Tdw8+i4cMdVnTmov+gssYAUl0X+n/HGsV+QFGugPEZ160kiaQX4Pe1JJqkmSpEmWlB41PWp61PSQ9PDfqPVFVfESvEAB/WK6o4GrE9dbp+IleIEDnIn+G3VhASu43Px5sZfgBRrobsOxgwNcbv6Y2UvwAgvot2ZOkqRJltSSepDH4zjRW+rD6ZHnj6i9+C6wgR1cLfVn2F58d6FH6YUFrKBvITm5mfe8R+mFDXQzH1GP0gtnokepP9j2Q94Cl5mvorxOL1DBlb28CStIL+pJI2kGrQC9yBW9szzm/AG6V92JP0D3qrvAeaF61V2gt7Q7VlBABQ1cTRWnnjSSVlPronXveVFJqkmSpEluMhwb2BP9Z/BCb+Z0VHB1aHFqST3JO/TEmSgHuBp6+HWscA1cTV0Pt9Vr6gJ97LwjxQevOfroeT+tcNW1f6heU3eh/0BeWMAKCqiggX5l3l71S/O+U3fz9qq7eSP9x7N4I/3X80IFDWxgB0diczG/zCagggY2sIMj0X8ui3dU97/mo9ob2MEBPq7N/CpXyF1UkmqSJGmSJbWknjSS0mOmx0yPmR4zPWZ6zPSY6THTY6bHDA8vaLuoJNUkSdIkS1oqayZ4odpFJakmSZImWVJL6kkjKT1qetT0qOlR06OmR02Pmh41PWp61PSQ9JD0kPSQ9JD0kPTwwFh3t+oFYlrPf7omzzoSSP3EMF0LFPWaLl2/0eo1XYECrmktrrCmtbnAmtUX9aSRNIPWb89FJakmSZImpUdPjzXXdf1IqldsqfiY+8z2JvrMPsmSWlJPGkkzyGf2SSWpJqXHTI+ZHjM9ZnrM9Jjh4bVaFz081ppHvVLrIkl6eKy7PPUyrYtakvfCymZeg6VrPadeg6VrE0S9BivQwAZ2cIAzcU3swAJWELeKW8XNf23WPot6DVbgAGei/95cWMAKCqiggbgJboKb4Ka4KW7r92bd0KuXYF2kSZbUknqQueJw9Jb6EK/flOZ9sX5SLmpJ62/7wK3fk4tm0LoFvKgk1aR14f4D7iVT6vcKXjJ1YT9AX3R6M/0H5kIBFTSwgR0c4EwcB4jbwG24mzd9KGigu/k4+M3ehe7m3eq3e+rd6vd7nt68ZCqwgsvNfw28ZCpwuZkHzYpWNTde4drcYYXrRfMir5e6qCTVJFdsjqulaxNEvQBKPca9ACqwgKulHuZeABWooIEN9OX6ukAvatK1D6Fe1KQ+Cb2oKdDABnZwgDPRw/DCArqbOgqooLuZYwM7OEB38z7zMLywgA+37le5wvAiTXpYde+OFYYX9aSRNINWaF70MOneaesW8CJJ8uvxETw3UE5sYE9sB+g94tPBfx4vdAUfbb/ru7CDq6XeIStoT1oxe1FJqkmSpEmW1JJ6Unr09BjpMdJjpMdIj5EeIz1Geoz0GOkx0mOmx0yPmR4zPTw2z6Hx2Lywgau/ztFZwRk4A70ESdeKXr0EKdB3x7qjgAoa2EB3G44DdLc1Zl6CpGt7QL0ESdc6X70EKVDA5Ta8kR7NFzZwdaE7rN/fi2bQ+vW9qCTVJFcUx9XS4ZftcbzOq1IvKAosYAW9pX7ZHscXGtjADq6mel/Eh7TVy4l0+D/0KJ5+/b54u3B5TW+tL958oe3lRIHj/PCtnp/VdKk8p1Y1z6lVzXNq1UuBdB09pF4KFDgTPUYvLGAFBfR2ubFH7oUNHNEw/xqPU3yNR/U8mdYv9jyZ9kQB1x3j2W6/qb2wgeum0dfQXvwTuG4bfb3txT+BBXS3EwVU0MAGdnCAMzFPuVbNU65VJ24Tt4nbxG3iNnGbuOUp12p5yrVannKtlqdcq+WJ+Wp5Yr5anpivXvxjvu/gxT+BA/SeXGPt55IFFnDd5/sehZcEBSpooLsNR3ebjn5tp9hMPE+5PtEXb4djBQVU0MAGdnCAM/FcKZ6Im+AmuJ2nXHvvnKdcn9jADg5wJp6nXJ9YwAoKiJvipn5txbGDA5yJdoAFrKCAChrobtWxgyOxFdAV1NEVvL2+1r2wgwP09vpw+3r3wgJWUEAFDWxgBweI28Bt4DZwG7gN3HyR7DtOXhIU6G4+wX2dfOFMPPODT/szP5xYQQEVNNB1F3rxj616HfXiH/MtCi/+CVTQwNXeVVqiXvwTOMCZ6DF/obs1xwoKqKCBDXS37jjAmeh7QhcWsIICKmhgA3HzmF8lIOolQRd6zF/om2Xekx7zvlXjJUGBvl9WHQ30XTnvHengAGeiHmABKyigggbiprgpboqb4Wa4GW6Gm+FmuBluhpvhZrg13BpuDbeGW8Ot4dZwa7g13BpuHbeOW8et49Zx67h13Dpunh98b6idG8OO587wiQVcEXuGXp5sry1PtteWJ9trO8/tPrGDA5yJ57ndJ/pVmKO312Po3P490dvrE/zcAF7Yzx3gEwtYQQEVdN0VDF7mc3aJl/mcV+xlPoECKuj9Ox0b2MEB5mh6mU9gASsooIIGtmyDx/yFA8zR9Iqfqw1nzJ9YQdwEN8GNmO/EfCfmOzHfNedOV3pS6UmlJ8+Y9zYoPan0JDHfiflOzHdivhPznZjvxHwn5vsZ894GoyeNnjR60uhJj/n18FC94idwufn2mp+uFqiggctNT7EODnAmesxfWMAKCuhu5mggE9wDfdVvqB+pdqEH+oUFZGqcT4FOZLAGgzUYrMG0H0z7wWBNBmsyWJPBmgzWZLAmE3EyEWdODS9DMt8D9DqkwAp6Rw1H76jpaGADOzjAmeip4sICVnDprkPh1QuUAjs4wKXr+5BeoRRYwAr6jYD/tfNG4EQDG9jBAc7E80bgRL/Zq44KGuhX4V3t4X+hX4U5zkQP/wv9KppjBQVcbr4N6mejBTawgwOciR7+FxawggLitgLd9xC8vumiGeQf5/We8Y/znlST/NnTiQoa6I+ffMTOZ1wnDnBtCngX+qbASSWpJkmSJllSS+pJIyk9RnqM9BjpMdJjpMdIj5EeIz1Geoz0mOkx02Omx0wPD2rfifaCp8AGeoep4wD9seBS8IqnwAL6k8HmKKC7maOBDXS34TjA5eZbin7MWeBy811lP+YsUMDVf+7rn+09qSX1pJE0gzzIfZPSa6Ws+1V5OPsmpVdLBQ5wJno4dxfz3/gLKyiggu42HRvYwQHORA/yC5ebb3N6xVSggAoa2MAODnAmepBfiJsHuW+feslUoILu5j3pv/G+AellU4Hu5jPBf+NP9N/44b3jv/EXVlBABQ1sYAcHOBM7bh23jlvHrePWceu4ddw6bh23gdvAbeA2cBu4DdwGbgO3gdvAbeI2cZu4TdwmbhO3idvEzTODbzF7WZajeVlWYAHXmmXtzNj5Jc0LFTSwgR0c4Ez07xVc6FcxHL2907GD/mT/cJyJ/nN/YQErKKCCXjBQFkr0r3nZ1XXFHvMXCqiglyFUxwZ2cIAzLRQ3LWAFBVTQwAb2bI4OkNE0RtO4No/59VNiXowV6L3jY+Exf2EDO+jXdorNRI/5CwtYQQEVNNDdfBJ4zF84c7A80KfPBw/0CysooOYAdAarM1idweoMlgf6iR7oFzJYg8EaDNZgsAaDNRisDHQ7MtDtGEyN6SUpPj2ngAqugobD+2GFdDu8Zf4w/cIBzkAv7AosYAUFVNB1xXGAM7EcoOuqYwUFVDB+mu0s+LqwgwOciR7oFxawggK285GZeZHXRSNp3aKuXvQir4tKkre/Owqo4KP967fT/Nixi3qSd9VwnIl6gOV8iGd+5thFkqRJltSSetJImkEr2C9KD0sPSw9LD0sPSw9LD0sPS4+WHi09Wnq09Gjp0XzSese3BnZwXM8yzQvXLvRaGv858NK1wArGE07z6rVAL9zykegN7OC6KB/HFecnrTC/qCTVJElyRZ8lK2xb8ThZv8+tuPv6fQ6soIBeYWaOBjawgwN0t5UkvJYtsIBrlTCcJEmTLKkl9aSRNINWaF9UktKjpEdJj5IeJT1KepT0KOlR06P6hXTHCgqooIEN7OAAV7etxbl5rVtgAd3N2+CxfqGCy229dmte6xbYEz2wL/TXUJwsyf/SiR0c4Ey0AyygF8h5a01ABQ30Irni2MEBLjfx1nqp24UFdDdxFFBBA91NHd3N29td17u/F7CCArrudFy66lfhcaveHI9bdbcVt4EzcUVu4HJTb86K3UABFXQ3b+9wC2/OcAsfdw9v8+Z4eJtbeHhfWEEBFTSwgV5+6G3w8HY8C958Ep0VbxdWUEAFDXSL5tjBAfoFrcv0+rjAAlZQQAUNbGAHB4hbxc3DfFXjmdfSBQqooIEN7OAAZ6KH+YW4CW6Cm+AmuHmYr/cmzavm2tqMMq+aCyxgBZfu2pcyr5sLNLCBnqx83DwTXJi/KF49F1jACgqooIFLt504Ez3mLyygX4U4Cqigge2qfLKzru7CAc7E8xf8xAJWUEDvnRM7OMCZ6DF/YQG9veboCj7tPaSbzz4P6RM9pC90BR9uD+kLvR98PnhIX2jgam/3kfeQvnCAM9Dr5QILWMHltna/zOvlAg1sYAcHOK8iSPPKuLMfvDIuUEHXrY4N7OAAZ6LHsd9de3VcYAUF9KtwN4/jCxvobt1xgDPR47j7BXkcX1hBd1NHd5uOy83vw72WrvkdvdfSBY5Ej+Ph1+ZxfKGACrquX5tHrE8uP3DrQo/YCwsoYLvqiO0sortwgPOqLraziO7CAlZQQAUNbGBP9J9mjzcvngusoIB+8T5Y/tN8YQM7GGXY5sVzF3p5+oUFrKCAChrYQC9E947yQvQL/Sq8fz14LxRQQb8KF/PgvbCDA5yBdtain+hF9tWxggIqaGADOzjAmVgO0K9iOCpoYAP9KqbjAGeiB++F/u7FiRUUUEEDG9jBkehh6ntrXvoWKKCCBjbQl4ROI2kGnStop5JUk/wH0UmTLKkl9aQR5AE7T/Q2ev/7j+mFDfRrN8cBzkSP3QsLWEEBFTSwgbg13BpuHbeOW8et49Zx89j19bIXtgXORP+JvdB7Rx0rKKCCBjawgwN0N2+O/xxfWMAKultzVNDABvYcLI/oC2egn4AVWMAKCqigga7bHWei31Zf6LrD0XWno4AKGugvVxyOHRzgTPRadd9783K3vko7zcvdAgVU0MAGdnCAM1EOEDdxN79MEVBBAxvYwQHORD3A5eY7Lu18RcWv+HxH5UQFDWxgBwc4E/1VlQsLiJu/reLbLF7uFmhgAzs4wJnYDrCA7uaToAmooIEN7OAAZ6K/3OIrRC93C6yggAoa2MAO+g6t0wzyvfKTSlJNkiRX9J71t1fWAV3mxWuBnsn8P/DXyy4UUEEDG9jBAc5AL2nr6wVd85K27lstXtIWaGADOzjAmVj8KrpjASsooLsNRwMb2MEBzkTPARe623Rcbr4f5OVvgQoa2MAOjhgLL3+7UA6wgBUUUEEDGziv8xPsPNrqwgL6VVRHAf0qXMGj/cIG+lX4wHq0XzgTPdp998kL3QIrKKCCy823p7zQLbCDA5yJHu0XFrCCrlscx3V4hHmZWvfbQC9TCxRwtcy3vbxMLdBb5v3gsXrhAL1l3g/+StqFBayggAoa6G4+7f3NtAsHOBM9ui8sYM0rnq7rXT0b2MEBuu6aJV6xFljACsp1IImdh2ddaGADOzjAmehn2F3ovTMdFTSwgesqfC/RK9YCZ6LH8YXlOnjGvGItUEAFDWxgB0eiR+wqfzP/mmeggOsq1oFt5hVrgQ30qzjFBuhX4V3iv9oXFtDdzFFABQ1sYAcH6G5r7njFWmABKyiggnYdk2VesubHfZnXrPm5U3YeynVhASsooIIGtuuMKruO6jpxgDPRjwbyDYLzAK8LKyigggY2sIMj8Tz1zi/zfOW0OwqooIEN7OAAfSw8yM5XT08sYAXXVZwDkOfk2XlW14UN7OAAZ+B5WNeFBfSrmI4GNnBdhS8WvUgtcCb6b7evCL1ILXBdhW+feJFaoILLzUfTy9QCOzjAmegxf2EB3U0dBVTQwAZ20EfeL0hy5KfkyE8RUEEDG9jBAebITz3AAlYwR/488utCAxvYwQEy8sbIGyPvz6E9jr26LFBATfRp7xu/XpcVaGADOzhAH0K/Np/2FxawggIqaGADOzjAcGtel9XX5nPzuqzACi63ldqa12UFGrjc1mZu87qsvvZqm9dl9bWR2rwuq6+CxuZ1WYEFrKCACi634RYeDBd2cIAz8Xzx+sQCVlBABXGruFXcKm4VN8FNcBPcBDfBTXAT3AQ3wU1w82AY3r/+A3ihJvqv09pIbV52FegW3ql+l3nhAGei32VeWMAKCuhu3dHdfHL5mvLCDg5wJvqa8sICVlBABXHruHXcOm4dt4GbB+/wue5hOn1WDwZgMACDAfAwXVv+zc/OCqyggAoa6G4ndtDriU6LGei1VoFLd22iNf/SY193js2rqgK9vYfjjGHxqqrAAlbQdc1RQQNz7pTSwQHiVnGruFXcztBz9LiYJypoiT6r1/qtefVSYAP94qfjAGeilzAd3iVew3Thyuur7q2dVUwXKuglWd7rXsh0YQcHOBO9mOnCArqbj5v/ilyooIEN7ODIMT5DxK/NQ+Qcoc4QdoawM4QeIhd2cIAZ/mUcYAErKBEtflJXoIEN7OAAZ6KH04UF9P71ls0Z6LVKgQWsoIAKGtjADg4Qt4Jbwa3gVnAruBXcCm7F3dRxgDOxHmABKyigggY2ELeKW8VNcBPcBDfBTXAT3AQ3wU1wE9wUN8VNcVPcFDfFTXFT3BQ3xc1wM9wMN8PNcDPcDDfDzXAz3BpuDbeGW8Ot4dZwa7g13BpuDbeOW8et49Zx67h13DpuHbeOW8dt4DZwG7gN3AZuA7eB28Bt4DZwm7hN3CZuE7eJ28Rt4jZxm7jNdJPjAAtYQQEVNLCBHRwgbgW3glvBreBWcCu4FdzIJUIuEXKJkEuEXCLkEiGXCLlEyCVCLhFyiZBLhFwi5BIhlwi5RMglQi4RcomQS4RcIuQSIZcIuUTIJUIuEXKJkEuEXCLkEiGXCLlEyCVCLhFyiZBLhFwi5BIhlwi5RMglQi4RcomQS4RcIuQSIZcIuUTIJUIuEXKJkEuEXCLkEiGXCLlEyCVCLhFyiZBLhFwi5BIhlwi5RMglQi4RcomQS4RcIuQSIZcIuUTIJUIuEXKJkEuEXCLkEiGXCLlEyCVy5pLm6G7rPlXPXHJiASsooIIGNrCDA8TNc8kqPm9+gllgBd1tOCpo4HJbhX3N67QCB+hvNKwbF6/TCixgBQVU0MAGdnCAuAlugpvgJrgJboKb4Ca4CW6Cm+KmuCluipviprgpboqb4qa4GW6Gm+FmuBluhpvhZrgZboZbw63h1nBruDXcGm4Nt4Zbw63h1nHruHXcOm4dt45bx63j1nHruA3cBm4Dt4HbwG3gNnAbuA3cBm4Tt4nbxG3iNnGbuE3cJm4Tt5luXiAWWMAKCphx7EVfYxU2NDvzw4kFrKCAChrYwA4OELeKW8Wt4lZxq7hV3CpuFbeKW8VNcBPcBDfBTXAT3AQ3wU1wE9wUN8VNcVPcFDfFTXFT3BQ3xc1wM9wMN8PNcDPcDDfDzXAz3BpuDbeGW8Ot4dZwa7g13BpuDbeOW8et49Zx67h13DpuHbeOW8dt4DZwG7gN3AZuA7eB28Bt4DZwm7hN3CZuE7eJ28Rt4jZxm7jNdGvHARawgu7WHBU0sIEdHOBMPHPJdCxgBd2tOypo4Iwc1c5UcWIBKyiggkus+rV5qriwg6vpqwKoeY3ZqN50TxUXFrCCAipoYAM7OEDcPFVU7xJPFRdWUEAFDWxgBweYPxKNW4nGrYTXmA3xLvFUcaGCBjawgwOciZ4qLiwgbg23hlvDreHWcGu4Ndw6bh03zw/il+n54UIDG9jBAbqFD5bnhwsLWEEBFTSwgR0cIG6eH8SDwfPDhRV0Nx9jzw8XLjf1CPD8cOFyU5/rnh8uXG6rJqf5mWuBBayggAoa2MAODhC3glvBreBWcCu4FdwKbgW3glvBreJWcau4VdwqbhW3ilvFreJWcRPcBDfBTXAT3AQ3wU1wE9wEN8VNcVPcFDfF7Xyr2xwb2MEButuacv18tfvEAlZQQAUNbGAHB4hbw63h1nBruDXcGm4Nt4abp4pVmNW8mG2s+qjmxWyBS2FVQjUvZgvs4ABnoueHCwvoYsWRIfRAP/vXA/3CAlZwNXKVPzU/Ry3QwAYyYSZuBPog0AeBPgj0QaCPM9DN0cAGdnBEG7xW7UIP9AtxI9AHgT4I9EGgDwJ9EOij5PQcJXty1AMsYM02VAEVxI1AHwT6INAHgT4I9EGgD8lxG2egn0hPCj0pOW5e1xZITxLog0AfBPog0AeBPgj0oVybcm0E+iDQh9KTRk8aPemBvirumte1BXpPuq4H+oUN7KBfW3eciR7oFxawggIqaKC7DccOzgg9L3EbqwSreYlbYAUFZGp0AxmszmB1Bqsz7QfTfjBYg8EaDNZgsAaDNRiswUQkgYzB1PBUsYqtmpe4BSq4dJv3g6eK5i3zVHHhAGegl7gFFrCCAmrimnJznanRvKwqsIMPt+mrDi+runBNucACVlBABQ1sYAdxM9yaK3h7m/+34jjzn/phfutIqOZHeU2/V/ajvAIFVNDABnbQm9McZ6If63ehu3VHdxuO7ubd50f7rYMjmpeMXU33w/0u5IL8B2W6rs+SCwVU0MAGdnCA88LuFWGB7tYd3W04Cqigge42HTs4wJnoPygXFrCCAvqUOxb6IR+rSKN7PddcJRbd67nmqpXoXs8VaGADZ6K4gjoK6Arm6MbeJer/rXeJCqigu3k/nNFyYgdH6nq0nP/Uo+XCAlZQ8oo9Wi40sIFc23lapl/QeVzmiVyxT/Dqf80nePWe9Al+4QBnok/wC5dudbdzKruuT+ULG9jBAbqud4mfVXlhASsooIIGupsP1uzgAGegl1UFFrCCArpFd2xgBwc4E/3ImwsLWEEBFcSt4OYRsF7N6V53FTgTPS4uLGAFJXrdP2MYaGAOlh9ZNdemQ/dqrLle4+l+OlVgBwe4mrNerOl+PlVgASsooIIGNtDdiuMAZ6LH0IUFrKCAltfmgbNe4OpexHWhB855QR44F1ZQQG+691kzsIHedHMc4EyFjlvHrePWcTuPmz2RYekMS2dYOsPScRtY+A9K8wl+3nb4PDtvO7x3ztuOEw1sYAcHOAPPcq0LC1hBAZfbqivuZ7nWhQ3s4ABnov+gXFjACgqIW8Gt4OYrlFUo3c9yrQtnoq9QLixgBQVU0MAG4lZx87XIegekn8VWq9S6n8VWFw5wJvr64sICVlBABQ10C3V0C3Ocib6ouLCAbtEcBVTQwAZ2cIAz0RcVFxYQt4Zbw63h1nBruPn24zoepJ8VVif6oqL7APjyofv09OXDhQ1cYsMnjC8fLpyJvny4sIAVFFBBAxuYFmc50Som7mc50apM7mc50YUCKmig64qjt3cN91k4dGEBKyig65qjgQ3s4ABnoq+7L3S35lhBARU0sIEdHIkeDKvauJ/VQhdWUEAFDWxgBwc4Ew03w83jYpWc97Na6EIFDWxgB0f2ujFYjcFqDJZP8FUg3M8Cn+kTxmf1hRUU0G/ofWr4XL+wgR0c4Ez0uX5hAd3NZ6rP9QsVNLCBHRyJvsF2Xtu5HvL5e658TrS8oHPlc2IHB+hNX3121u9cWEBvujkKqKFw1u9c2MAODnAmlgMsYAUFxK2cFv/93//021///q9/+o+//P1v//If//jzn3/75//Kf/Dvv/3z//iv3/7tT//489/+47d//tt//vWv//Tb//Onv/6n/0f//m9/+pv/+R9/+sfj3z5E//y3//348yH4f/7y1z8v+u9/4m8fr//q425zvWPsf/3B01Licd/8g0h5LeLfjHUJbS0Fevvh79fXf1/WC2r+92VWGtD1/lWU9fzluopa58ur0Ncia96dCkXy7+vtvy5+iNZ5FY/VGS2o4weJtpGQVHgeiKF3BfwgUxd4PPxMgUdS/0FgbDrSv2179oKV8VJi7vphrbXOq3g8FnkpsetK/1G+OuJpMH7uyrKZk4/7s3pp1MevDxpWf9Son47H7kJ8e+hSkPr6QjYa5id4usY6FSU12o+tWDtZr0d1zhxVqy8lNjPL3+Jzhce++VOI1tsKQ+MyHtuerxXuXkZ/fRm7zuxHZLt1OscribrJNdW/9HpOLNPyUqJ82hV1MzMfmTpnd3lKNvqThGwasZYmZyNmf92IXcKsNXrigcyKxy3V/QshcT/Wb+XlhWwmVh0xpHK8FNhH2Gw5KZ7Szc8jOj5PejuN9U37+Bl9LBZeJgs5tvm7Zog89cb6SfxBYzM7/UsA54/IYU8K4/7E8C+8nxPDnqLs54khm+k5LX8DHs8I6I3HfeqPGpt21C4xKo9lHxrtC2MyozPWh35fj8lmfhZ/znaOyeN5Ahry473FCoSXGuvc4RxYtfGk8uMMk/ENs2N+Ojv219KOls1oNl9ei+5+30snAw40HnstP2rUT+fHdpbeTIFbjZvRovZ5tGj7uDe2IzuV28f5fM/088jucmnpIfLA55H9SWPufqQlYq7q02/s487yBw3b5FL1I2uvZc3TDPtZY9sO/7DcdbMwN+3YzNL1JmDe1T/F3M8a25FZrynGyKzXYF6OjOmuJUfNltT2WmMzUx9r5hiZx0K5vqWxPugRP9jlKeq+dC0i2ataNv0xdjcOOvPWvL2p0Tt3pL2+pzG4qx3Ha439DPFzFa8Z8rjdf6nS6h/667Ce60Q7epXXOaRtRvfxaC1b8ni2duiLbNbsD82H3Td5r2uZ9npkWv9D+3Ro7rA8eL6+e2i7XCZ95Ir6KbdX+fFWux+f9um2FZp7HI9nHsfLVmzvyHruDTyejY2Xd2RddpldZmb2H+L2J43dwqNaLu3rfI44va8xWubC+UMe+0mjfX5f2D+epfseHXlH12p5b1T8YyWXxmZUxm4N9Xi0m1E7pcmLWbpvR24SyFHtdTvq7m5KGZXnfdGfZvrYtEP8g6jXuvSHdtzXUNVcA1k9XmvY5zNstD9yhgl73XKM9+JejtyEejyP669Hdv6xM+zxBDCy8eM52+tombs1lOYe0COdPV/Lj88P5maW9pH5+PFrV9/SmEeNdswiGw39fIZN+3SG7WOWLcrxvF/wU6zMvsuDeTf3+I2Ulxrb2SG5rfag/t5Ml5EzTJ8fqfykUY7j0y30bTM015SPSJFNM3bj8rT8eTyhfhIpXxCZmQjrMY6NyG5vrOVu0Gz96QnLT3di5dgt93tczXy6UX88qb5/MY+4yF/Kx8PLzcX0z4OuHOPTqNvmMVPlV19f5o9Stj/7+XNbj6cbqZ+fLuweOkn26ePZ8etnHGU7LiUfL9T+vKP0U5cW2S1/jsLTzKPoyw2h/RzRwu/D3Ez43VOb9cGYuEG1p1v+3z2I2z08uj04/fPBGd8xOPNbBmf70MIaew8vH0Ppbn8rM5H2p/2t3z2c3D2/kYNn9+WHnHh8QYR1kDx+8jYi+vlDzmofP+XcSdx8zHn7SjbPOW936fPDpC+NS8nULHVu8uovHkndKikou2dSd5+v7S/Hv4B3iWwvR3b3u8L97vOdxM/pbC+Sm36PyNvkRPmGp/ry+WN9+fy5vnzDg/1tl07WIVPfHJdRNTLz0DJfi+yeTD3W7bmR2g95edO7n6tz5sPgo27yqsrnM0T14xmyk7g5Q25fyZsp8dGP+Xt36Nx06fiGLp2fd+n8vEvHH/wr8zxLrbz3K/P4mzNFxmZc7DuqpL4hodrnCdW+oVDqGxKq/aE3mHYwJsfYVL+1snvmOHhO1zcpefdYyt/zPLvjeF7HjC/1R6c/xpt9eq/8rGwfS2lWTzzWZ/pao30+03ePpe5WBPaPZ/rtK9nM9G2P+oelokfbexpWedAvL2vIvGjl5eyY+eTTZptvamThw1ZjP8NuVTiW/vlKqn++kto9lLpZXVj6bs1/q7xw24p7xZpl91DqXrVmGbtM6iusM5OWpyenMt4WsTdF9MgtP61lI6Kfjsv+WobmtYx3r6XmE+11Mvm7Irmhuw7PflNEct2xzvPdiOw2pw5+tBc/Dc5P5Whbmbt1cb8QmblVLmW+KcKjtseTtvamyM0SvbJ7QnW3Rq/Mj4tS9u0YNXtkPD1f+n077oq0412R/KF5YHtP5LGDmjeqD+4bme0QWya2+Xwj8cXJNphsz3H8NZE2EdkE4P3f8Jfrobp7VNWzsuS5HOznDGvfUFl/tM+Xh3sRyY0dlV42ImMbe5axp5urmR/fedfdk6p791ZbiZtvoJRveAWlfP4Oyu45iBTNneFHj7781bs/Kq9XEb+YHfkstPahb2mseue8mNnf1Tg+1hBurp7z2Nc0GgUq47XG7kWpmyuiX2jcWhHtr0WZZNrG5xpvzjHhdZTHr8Hrsd29LlV4T/URaJuo2zakZ13741bzdSrcvVtze3DHHzy4/hX561o2gbt7PlWOrI0tj6fh73Zq3u/K2Myy3ROMew+56+6tqcf9Z17L7K9XZ9t2aOGVcNl0x+43W/NxneqmOu0XIlnE9Hje3d4V4Um57u4e5Btera56fP4cdH85M7O7Pa/hf3c5u3en7l+O/MGXYyXvl+15Gf/7y7EP73X3zbCcro8nEJv7VO27sMkp/1RxV3/Xp+PTFeK+FanwHLy/a8X25akqXMnTzlu7L1EOP8nqWtiNoe+JzPG09/9Ug/gVkVWlk+n9eNo7+0qn5vuKj5vNTafaHyrx6Mg66VR7eSm/ELk5MvYdI2PfMDLbyG2dCsRR3vuNaJQOrG/7vSuSb/muzx+9KWK5AFgflnhTRPMucX0U4LVIs2/4jdg94fmW34j1+YC4nB9qMn53Obtf8PWB87ye+VRC8IXJ1jXvrrpuCrPqL16jurUT0cvnOxG7p003dyJ2Ejd3InavQN3didg+bLq3E7F7i+r2TsTtUdmsEvez495OxE7j7k7ELzSOjzVuLjTH3Wei9l6f3t0R2Wvc2xHZvUh1d9G817i3aN5eix45P54f4f2uHeOPbse9nZnbGm/G3N2dmd1rULd3Zkb9hglS/+CBubmrMts37KrsG3JvV2WOj3dV5vyGXZVdO27uqvziJqY/ndHx9BbkT++1H/vX3DKVrVfe6jsiN5eIv7iYm+3YpMP1wZ64I6vHZp+p7cqPa24fcP8hX1rIVA4sOGS+uRrSpzdL2vGyO+bnS6qtyHcs/2/3yPENPfKrt6lu9chO5F6P/OJJ99PFHMfzQ+qvPTA/pD3JvK4AqMfxHc/dtzJt5AZtm8fLTYCtBMuyx/Pm8p4E68M5X47Ovvzm4PDN4+1qovl01s+mhmf/KkTeu4/j6eiTr70KcZSeIvpaRHYvQ5XO4bJdX95ISP28VlXqx7WqW4l769T7V9I3V7LrUfbuy5wv10Minz8R/UU7br2QKZ8/qxLZ57LcCNHNC5ny+bOqbXc8tiAOtiDGW11aC2/bltd3zCLj8y79hhvVbTvudekv3sXK13VGleN1Fvu8Zn9/3OutcnvRz19NFf24oHorcTOF3b6S/l6H3qu230rcK7aX3Z3hzXXyLzTurZPLxzuov7idu1exuz/L916t7VbjZqnt9jDMm8WptzU2tal7jXulqTuNL9whb8uG7xWm7ltyd45s++RmYer+WN/Pr+buXN1fy725uj109eZcva2xmat7jXtzVe075uq+V+/VP98/X/31rdT2udStao7d/csPRcdPO4+/O3VxV5oqueQX0ZcbbVsJPeT/d5v9J4n28VbM9qYyH9TrI3tsOuMbyp+kf8O3JeTjyhTZv/KTT/qfyzDGfYW8E3s8Z3+tsNt9sZwYjxvi+qQx72sopSBW5bXG9mS/m2fZ7c9JvXce5y9OSK/H09W8PhVYxvg4ZrcS92J2fj5H928t5i3yKC/3xefHs3x+PMvHN8zy8Q2zfPsk6uYs355YX/OA5Vrr88m15b6GZZ8+ngS81thHSs8TuYqNY3NK+/5kvzuRspe4FSn6+UOkL3TH8+eGvnRovVIvYfo0MO9qjM81nos3v3J4vrTc8pD++sB53RazD+Gxq7aNyK4lPLut42lb7WsiIz/C9HjqrW+L0JJq3yAix0uR3dcArOX23GN3a743OEoaUevj3RHO85rl+YT197+xoG/1iPK4Q+fYDM3dl6bGJmx2B/vdrEPTus2qB3VGT59Y+F1DtptKxvFi9nzQ2U9r2+3RPkr9xg9HYf3UqXV7VvLxdAq2vtbQ/RPc+vQE115fzf4Y2lw4PJ+H+/tu3YrMpxqw15Nk/5mFkpOktLr78d0tyW4tcH/RjpRY7Xj9SQDdLSEIvcemwdMkGT/eW22L2rXwiaXyuh3bD4JIVk7Zj8cdf+VjHrnKfWB7T4OnYmt/+fUSZDsyyrcsm+rbKnwwqunmgy+tfroG2CrcWgPsP+Uxn6ovprwqEdDde1Oz5umAs76+09xLZNXErK2+tcyVPPekrA/uvjey/ekZTLey+XyWfrw5tZe4d/uuH29OfaE76vudyqGNJm8GXee+6sHteD009vnKyj5fWdkfu7L6sTv68fbQ9CeV8jqT9Y8zWf94N2P7GR4OT3rwJierfby1s5UonYPoHlz0PREWVg+u9qZInt3+YHsrr47KbciQ3SejdnUP3/ORpJr3iFWO5xvN+p7G0wB/ScPyY6LVnp72f0Xj0f7MQ8cPi6KfPkShn+/Ybz9xZJwg33+4Y/7CZ5Io8rX+w0mlPx1nuXs552Zi3krcS8z940rSfWfktoqNH15V/rkzdmXTvMj2uNeUjcju1Us+bViOlyu7bTMsq6aaPZcJfelaLF/wf2yv2NsieTHtmG+L5CcW25uf87r9SbCPfy/7x7+X28+S3dz933/a7N7uv45v2P3ffkWrjqdX+58H5afdoc+fTunnT6f086dT285gva4yXn9STHevS93sjK3Ezc7Qj7PxbpeMezHpb373Tjis+aHx+iNJOvvnj+h1fsOX0LdfjWqFUnp7KWHHN3x2wj+29fnF1O0GRt5XVn3+uln5qSW7Aeb106edx3F8oRktz2ovo7359aq7mXD/CSxrnKb5/Ajjd5/A2n5HK79FPJ9/KL8qktVo7bkq7isf43p+xeh4/ta0femzYIPPgs13L6dLfkevPz0d/prIoGPHU33uzyJW5A8W+aEgXl5/52wvUnPNXetzn3xJRPK8k/r8e/X7Id6m13tHle+eud27LdtL3Lov21/JzRuzX3THvTszq/Ub8tH242L33lKyb/j6lH3+9Sn7/OtT9h1fn9p/ru3WW0pW5+5Zyr2T7Lffa2v5cuEDnyuF5xdE2Dp4YHlP5O6LSvuWmFAa297//NxoPFB9Oqvgd2+R7mX4APaDn8pVviqTHbMkN6c3b3tGJt37/Hvzpe7VPAeqPj8x+73I9gS3W28+7aLn5stke417L5OZbr/uc+dlMtt+t+nmy2Tbdtzt0u3Q5i3nY5Tl3cgplSeRRfTdKV+VyKnt7QCs+RxgSW4iZ3s78LRpJe/eUeTr109J6fcS2zvXpy/aPtfw/K4I4OMNgb3ErQ0BM/1DJW6eFbDv0Pzw+6Nv9WWH7g6iv7kKt2+o+jf7hqr/7WfKez6renTH6+P5dhqjZlnV46HVeE+j5XlWo7XXx79Zk08n+rYZPQtVxuOZ6qYZ9oc2Y+Ru9xht14z+cdhvJe7FbPv4xJPt1zCOmqv3tRH6cnrZp+vDrcKt5eH2fJGbq8Otxt3FYf+GV1P2nwW/uTjsd1f+m8Xh7v2pm4vDncTNxWH/hj2M/YfW7y0Ov+GEsv2X1m8vDut3LA7rdywO63csDuV7FofyPYtD+Z7FYf2OxWH9jsVh+Xwlc3zD4vD4fHG4+524uTjcv1R1c3G4a8fdLq3fsTiU71kcyvcsDuU7Fofbe4Fba8P93cSdpeH4+FFgO77hGOp2fMMx1LvH3qK8ZaLz+Ulvva8xqSMoKq81tiX3miX3Vl8/fh/t0zvNrcKtO83tu8c37zS3GjfvNFv5hsei26fvxq3VGK8nx06jDk7lGl3e0+gZLXXXjla+Yd3fynes+7c9wk3eLK97pO3ep7p98PvulTvNok614/XHsNvuhaqb5763b3hS1T5/UtU+f1LV6uff1W27Ybl37nvbPai6e+57+4anbr+YHbfOfd9q3Dz3/Vcax8ca9859b3L3nHN7r09vnvv+C41b5743+fxjab/QuLVo3l/LvXPfm5Y/uh23zn2/r/FmzN08971tz166ee77Lyb7zQlif/DA3Dv3ven2I9T3zn3/RUNunfvu+/GfLXKb1c8Xudt23Fvk/uoe5ta57217wPjN89a3Ivd2yn91MTfbsXsmzMu6jztKeW8VdGuFvF8F3Vkhbwvtb7VhX6p/pw371424zbanvdQvvbLUeO2pTXlPY+Rbz/X5NPGvvfaU584/8PW16O7LBHffndqK3DsbfS9x62z0X0jcORt9Oyo9f1fq88PXL43sDxr6pkZFQzYz7PNT/drnp/q17cemPpe4mYe3/UlZbO/jzTHJG+za55uZ47kd72qMvH964LsaT9svO42Ps3n7OJv/4qyD1Ji1vXlcQt7Uztrl5a/8xz1RP+2J7YEelI1Y/+HdjS8cCsIXN21IeVMjfxsf+ObhJMNox7uHpIxcMj3k3j0kpbBSqW/3x0RjMy67+1DjJTTr8g0a7x1e89gqzd34ZvqmBk8F+m6Obb8uy1lcw15r9N0bU33mLcs4jtcvfvTtoX5PV9OePgz787OrX7WED5iUXUu2HxDI26fHSD8dV32/HYOjt8fR+qYdbbvhml8NHcU2IrsqJ+PJ0dMDF233p8hgQTw353n03Sl4t6dIOb5jisxvmCKlfj5F5jdMkd0zqNtTpNgfOUXsyA3Cx2OO178QfVdEbzXPEbf6/HP305p29wiq9Zpv0vfnas3xhWvJgzDtGK9/Ifru1Li717Lb7/iOaym5of7A937tTPIkLpPa39OotKPaN2i08qZGFjqZHMebGlm1/pB7t0/z2GqTTbzsNQQNfX0HsT+dON9irc+7YT+fLNzl4wNS9hK3FrZd5A+VuLc23vancACP9GPTnx8fj7JrhbK6fj7S6PetGJ9nsO1Z4Pcy2P7s60qBY7WX17LXML4c1F73h8z92Ur3DuHeidzb29tL3Nrb+4XEnb297cDeWqXvj4m/s0rffk7hXhvKx3sm21MA7n6c8xcqN7/NKf1bvs25lbk5R/vH3+b8hcSdObr/MNXNz9JsNT7/+NH9OfKrjzndnCPte+ZI+3yOtM/nSPt4jnz+mb/etqWEtyqretsv9GMluKms2krcq6y6fyWvKyM+/8rf5x/56/1upclmRPYatwor7rfjtcbtr2KV1634uGpvK3FzbvXPq/Z6/7hqr+8+JTXVOIToeP0Rub4rTl/HF6XIfJ1B++6bz7VnOn+sJ9ur5cq2T0seGV7L03Ll5z7dFZZXCt2O1wp97n+Y7n1lcD8yN39p9yI3vzO4F6m54nigvity72uFv+iTe58r3M/Wm98rvC+y+WDhL0TufbFwK3L/BuYXXXvv5vDzTxb23ctQt77o8Iv+uHt3+SuZm7eXffsG7/3R2cncu73cS9y6vfyFxIe3l4Uqh9Kfj5b++U2V3cOoez8U2zdvyc/PtyE/t2Ir0Z9e3m1vSQzedj2e3z76XV98wwsm4/iGF0x2oV/zccfaQX19MbvXQstjS4yPsXR7eb7sL0Q6X5Z5LoP5WWR7E0Cp+tE3Y7N9G+rpdqTU+vxJhkPudqz2vO3WPt6aaM8fl+rPn0H63cV8w6Goo3zDoai/HOD+NMCvkuHYPY36nllilWrP50qSnzt2d3TfDy8yb55X/kKkcuPbdiL6+WPgsXuf6d5j4G077j4GHruXou4+Bh7bL/7eegy8TwLFnr7bZU8l2j8ngbH7wFRO1qdppveTSM11t8rziwT28wu3uwr+eyeAjO2e3b2tIf9m4mfL963EveX7/SvpmyvZvhNx6wSQ8Q0vM/2iHdRrHuXlyztjV+d47xWRsX0odfMgkr3IzYNItiJ3DyLZt+TmQSR7kVp4HL1tye6AicfCI++rHvz6TIZfydw8FOUXMncPRfmVzM1DUfYdfPNQlL3IzUNRthF07+WmbSDfPBRlr3HvUJRhHx+KMuwbDkXZtuNml+6H9t6hKL+Yq3cPRfmFzN1DUX4lc/NQlOPj7euxO7/v3vb12H0V8e5L59tTgDhMoDyXMWj7goRy+63vSfDWV33ah//dzWbbVqjkvbccb0rke7zt6UbxKxfyfND806sCX5FouRX54xtwX5DohT2iXV90+YNFSmPh3J5fDvqSCDXpj32z+qbIzD2a8vyywJcGl0NRan8vViSr0h4zpbzXCt5ulOOtC9HBT8Pz1/bK/e27wiZi0fFOI0ppLA3HW9FWhI9CynyvFVbZ2dH+nkRjMTTmexfC5JT63oUIn1AUe+tCOA62a3tHYGa147T3LuLIAsEfvvL9u0if5Y+c3TPfxZn1vY7IqT27fdiT7wlIZbOxPi8PRr8vkd/De+D8WOLpJvRLEhldUru9JSF5g/Kg4y0JzWc/8kOhwFda0Z6+Pl8/l3hvUFmdyHPK/FJf8Gq8ynuDqsKhK9LfkyicQWNvDmoej/7At1qxvlzLrYm+JfH0Ad3nN0N/lpjb43Qr2f/5u+Rl3G9Gbvc+0N67knwd67GpNt6TyBlexntBUsbk+eZR3rwQlt9H/ViivNuKjsRb0f6406UvtH/civcG9d57FNs7LKKsPY/HT1/e2j7yytVMaU9fu/2KxDA+3G3vtWLmR4zrcZR3JB4Pu3IFcTw9a/5KKygzWZ/sfk8iKzsf+eutC3nc9HO+03yvFZLbBkUPfUtCn84Qen5S9pPElD/0jvNxy55D8sPNwVeu5MgreX7h6d3+/Fnifz7+75/+9S//+Je//v1f//Qff/n73/798Tf/e4n94y9/+l9//fP1f//Pf/7tX5/+7X/8v/8W/+Z//eMvf/3rX/7vv/zbP/7+r3/+3//5jz8vpfXvfjuu//kfbT62Xx+bHv1//tNv5fH/+/oI+mPzYTz+v/i/f9yZP/4j//frL9h83GA+/meuf1D8v5CloMf//O/V5P8P"
|
|
6035
6035
|
},
|
|
6036
6036
|
{
|
|
6037
6037
|
"name": "public_dispatch",
|
|
@@ -6541,7 +6541,7 @@
|
|
|
6541
6541
|
},
|
|
6542
6542
|
"3": {
|
|
6543
6543
|
"path": "std/array/mod.nr",
|
|
6544
|
-
"source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat<let M: u32>(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n"
|
|
6544
|
+
"source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat<let M: u32>(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the [`Self::sort_via`] function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n"
|
|
6545
6545
|
},
|
|
6546
6546
|
"318": {
|
|
6547
6547
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/contract_class_id.nr",
|
|
@@ -6609,7 +6609,7 @@
|
|
|
6609
6609
|
},
|
|
6610
6610
|
"6": {
|
|
6611
6611
|
"path": "std/collections/bounded_vec.nr",
|
|
6612
|
-
"source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n ///\n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n ///\n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n ///\n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure.\n /// vec.set_unchecked(2, 42);\n /// println(vec);\n ///\n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n ///\n /// Panics if the new length of the vector will be greater than the max length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n ///\n /// v.push(1);\n /// v.push(2);\n ///\n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n ///\n /// v.push(100);\n /// assert(v.len() == 1);\n ///\n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n ///\n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n ///\n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n ///\n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n ///\n /// Note that uninitialized elements may be zeroed out!\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n ///\n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n ///\n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n ///\n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n ///\n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n if is_unconstrained() {\n for i in 0..append_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input.\n /// The maximum length of the vector is determined based on the type signature.\n ///\n /// Example:\n ///\n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n static_assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n ///\n /// Panics if the vector is empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n ///\n /// let two = v.pop();\n /// let one = v.pop();\n ///\n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0, \"cannot pop from an empty vector\");\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n ///\n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n if is_unconstrained() {\n for i in 0..self.len {\n ret |= predicate(self.storage[i]);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element\n /// in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.mapi(|i, value| i + value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Calls a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::<u32, 4>::new();\n /// vec.for_each(|value| result.push(value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Calls a closure on each element in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::<u32, 4>::new();\n /// vec.for_eachi(|i, value| result.push(i + value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(i, self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function will zero out any elements at or past index `len` of `array`.\n /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n /// zeroed after that index, you can use `from_parts_unchecked` to remove the extra loop.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n /// ```\n pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n let zeroed = crate::mem::zeroed();\n\n if is_unconstrained() {\n for i in len..MaxLen {\n array[i] = zeroed;\n }\n } else {\n for i in 0..MaxLen {\n if i >= len {\n array[i] = zeroed;\n }\n }\n }\n\n BoundedVec { storage: array, len }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function is unsafe because it expects all elements past the `len` index\n /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n /// for a safe version of this function which does zero out any indices past the\n /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n /// to give incorrect results since it will check even elements past `len`.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n ///\n /// // invalid use!\n /// let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n /// let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n ///\n /// // both vecs have length 3 so we'd expect them to be equal, but this\n /// // fails because elements past the length are still checked in eq\n /// assert_eq(vec1, vec2); // fails\n /// ```\n pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n BoundedVec { storage: array, len }\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen>\nwhere\n T: Eq,\n{\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n if self.len == other.len {\n self.storage == other.storage\n } else {\n false\n }\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n let _ = vec.get(0);\n }\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_beyond_length() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n let _ = vec.get(3);\n }\n\n #[test]\n fn get_works_within_bounds() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(2), 3);\n assert_eq(vec.get(4), 5);\n }\n\n #[test]\n fn get_unchecked_works() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n assert_eq(vec.get_unchecked(0), 1);\n assert_eq(vec.get_unchecked(2), 3);\n }\n\n #[test]\n fn get_unchecked_works_past_len() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n assert_eq(vec.get_unchecked(4), 0);\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_setting_beyond_length() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n vec.set(3, 4);\n }\n\n #[test]\n fn set_unchecked_operations() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n\n vec.set_unchecked(0, 10);\n assert_eq(vec.get(0), 10);\n }\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn set_unchecked_operations_past_len() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n\n vec.set_unchecked(3, 40);\n assert_eq(vec.get(3), 40);\n }\n\n #[test]\n fn set_preserves_other_elements() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n\n vec.set(2, 30);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 30);\n assert_eq(vec.get(3), 4);\n assert_eq(vec.get(4), 5);\n }\n }\n\n mod any {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn returns_false_if_predicate_not_satisfied() {\n let vec: BoundedVec<bool, 4> = BoundedVec::from_array([false, false, false, false]);\n let result = vec.any(|value| value);\n\n assert(!result);\n }\n\n #[test]\n fn returns_true_if_predicate_satisfied() {\n let vec: BoundedVec<bool, 4> = BoundedVec::from_array([false, false, true, true]);\n let result = vec.any(|value| value);\n\n assert(result);\n }\n\n #[test]\n fn returns_false_on_empty_boundedvec() {\n let vec: BoundedVec<bool, 0> = BoundedVec::new();\n let result = vec.any(|value| value);\n\n assert(!result);\n }\n\n #[test]\n fn any_with_complex_predicates() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n\n assert(vec.any(|x| x > 3));\n assert(!vec.any(|x| x > 10));\n assert(vec.any(|x| x % 2 == 0)); // has a even number\n assert(vec.any(|x| x == 3)); // has a specific value\n }\n\n #[test]\n fn any_with_partial_vector() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n\n assert(vec.any(|x| x == 1));\n assert(vec.any(|x| x == 2));\n assert(!vec.any(|x| x == 3));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn map_with_conditional_logic() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n\n let result = vec.map(|x| if x % 2 == 0 { x * 2 } else { x });\n let expected = BoundedVec::from_array([1, 4, 3, 8]);\n assert_eq(result, expected);\n }\n\n #[test]\n fn map_preserves_length() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|x| x * 2);\n\n assert_eq(result.len(), vec.len());\n assert_eq(result.max_len(), vec.max_len());\n }\n\n #[test]\n fn map_on_empty_vector() {\n let vec: BoundedVec<u32, 5> = BoundedVec::new();\n let result = vec.map(|x| x * 2);\n assert_eq(result, vec);\n assert_eq(result.len(), 0);\n assert_eq(result.max_len(), 5);\n }\n }\n\n mod mapi {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-mapi-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| i + value * 2);\n // docs:end:bounded-vec-mapi-example\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| (i + value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn mapi_with_index_branching_logic() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n\n let result = vec.mapi(|i, x| if i % 2 == 0 { x * 2 } else { x });\n let expected = BoundedVec::from_array([2, 2, 6, 4]);\n assert_eq(result, expected);\n }\n }\n\n mod for_each {\n use crate::collections::bounded_vec::BoundedVec;\n\n // map in terms of for_each\n fn for_each_map<T, U, Env, let MaxLen: u32>(\n input: BoundedVec<T, MaxLen>,\n f: fn[Env](T) -> U,\n ) -> BoundedVec<U, MaxLen> {\n let mut output = BoundedVec::<U, MaxLen>::new();\n let output_ref = &mut output;\n input.for_each(|x| output_ref.push(f(x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-each-example\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n vec.for_each(|value| { *acc_ref += value; });\n // docs:end:bounded-vec-for-each-example\n assert_eq(acc, 6);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| value * 2);\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn for_each_on_empty_vector() {\n let vec: BoundedVec<u32, 5> = BoundedVec::new();\n let mut count = 0;\n let count_ref = &mut count;\n vec.for_each(|_| { *count_ref += 1; });\n assert_eq(count, 0);\n }\n\n #[test]\n fn for_each_with_side_effects() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n let mut seen = BoundedVec::<u32, 3>::new();\n let seen_ref = &mut seen;\n vec.for_each(|x| seen_ref.push(x));\n assert_eq(seen, vec);\n }\n }\n\n mod for_eachi {\n use crate::collections::bounded_vec::BoundedVec;\n\n // mapi in terms of for_eachi\n fn for_eachi_mapi<T, U, Env, let MaxLen: u32>(\n input: BoundedVec<T, MaxLen>,\n f: fn[Env](u32, T) -> U,\n ) -> BoundedVec<U, MaxLen> {\n let mut output = BoundedVec::<U, MaxLen>::new();\n let output_ref = &mut output;\n input.for_eachi(|i, x| output_ref.push(f(i, x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-eachi-example\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n vec.for_eachi(|i, value| { *acc_ref += i * value; });\n // docs:end:bounded-vec-for-eachi-example\n\n // 0 * 1 + 1 * 2 + 2 * 3\n assert_eq(acc, 8);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn for_eachi_on_empty_vector() {\n let vec: BoundedVec<u32, 5> = BoundedVec::new();\n let mut count = 0;\n let count_ref = &mut count;\n vec.for_eachi(|_, _| { *count_ref += 1; });\n assert_eq(count, 0);\n }\n\n #[test]\n fn for_eachi_with_index_tracking() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([10, 20, 30]);\n let mut indices = BoundedVec::<u32, 3>::new();\n let indices_ref = &mut indices;\n vec.for_eachi(|i, _| indices_ref.push(i));\n\n let expected = BoundedVec::from_array([0, 1, 2]);\n assert_eq(indices, expected);\n }\n\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n assert_eq(bounded_vec.get(2), 3);\n }\n\n #[test(should_fail_with = \"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n\n #[test]\n fn from_array_preserves_order() {\n let array = [5, 3, 1, 4, 2];\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array(array);\n for i in 0..array.len() {\n assert_eq(vec.get(i), array[i]);\n }\n }\n\n #[test]\n fn from_array_with_different_types() {\n let bool_array = [true, false, true];\n let bool_vec: BoundedVec<bool, 3> = BoundedVec::from_array(bool_array);\n assert_eq(bool_vec.len(), 3);\n assert_eq(bool_vec.get(0), true);\n assert_eq(bool_vec.get(1), false);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n use crate::convert::From;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n\n mod from_parts {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn from_parts() {\n // docs:start:from-parts\n let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // Any elements past the given length are zeroed out, so these\n // two BoundedVecs will be completely equal\n let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 1], 3);\n let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 2], 3);\n assert_eq(vec1, vec2);\n // docs:end:from-parts\n }\n\n #[test]\n fn from_parts_unchecked() {\n // docs:start:from-parts-unchecked\n let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // invalid use!\n let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n // both vecs have length 3 so we'd expect them to be equal, but this\n // fails because elements past the length are still checked in eq\n assert(vec1 != vec2);\n // docs:end:from-parts-unchecked\n }\n }\n\n mod push_pop {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn push_and_pop_operations() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n\n assert_eq(vec.len(), 0);\n\n vec.push(1);\n assert_eq(vec.len(), 1);\n assert_eq(vec.get(0), 1);\n\n vec.push(2);\n assert_eq(vec.len(), 2);\n assert_eq(vec.get(1), 2);\n\n let popped = vec.pop();\n assert_eq(popped, 2);\n assert_eq(vec.len(), 1);\n\n let popped2 = vec.pop();\n assert_eq(popped2, 1);\n assert_eq(vec.len(), 0);\n }\n\n #[test(should_fail_with = \"push out of bounds\")]\n fn push_to_full_vector() {\n let mut vec: BoundedVec<u32, 2> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n vec.push(3); // should panic\n }\n\n #[test(should_fail_with = \"cannot pop from an empty vector\")]\n fn pop_from_empty_vector() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n let _ = vec.pop(); // should panic\n }\n\n #[test]\n fn push_pop_cycle() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n\n // push to full\n vec.push(1);\n vec.push(2);\n vec.push(3);\n assert_eq(vec.len(), 3);\n\n // pop all\n assert_eq(vec.pop(), 3);\n assert_eq(vec.pop(), 2);\n assert_eq(vec.pop(), 1);\n assert_eq(vec.len(), 0);\n\n // push again\n vec.push(4);\n assert_eq(vec.len(), 1);\n assert_eq(vec.get(0), 4);\n }\n }\n\n mod extend {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn extend_from_array() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_array([2, 3]);\n\n assert_eq(vec.len(), 3);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 3);\n }\n\n #[test]\n fn extend_from_slice() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_slice(&[2, 3]);\n\n assert_eq(vec.len(), 3);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 3);\n }\n\n #[test]\n fn extend_from_bounded_vec() {\n let mut vec1: BoundedVec<u32, 5> = BoundedVec::new();\n let mut vec2: BoundedVec<u32, 3> = BoundedVec::new();\n\n vec1.push(1);\n vec2.push(2);\n vec2.push(3);\n\n vec1.extend_from_bounded_vec(vec2);\n\n assert_eq(vec1.len(), 3);\n assert_eq(vec1.get(0), 1);\n assert_eq(vec1.get(1), 2);\n assert_eq(vec1.get(2), 3);\n }\n\n #[test(should_fail_with = \"extend_from_array out of bounds\")]\n fn extend_array_beyond_max_len() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_array([2, 3, 4]); // should panic\n }\n\n #[test(should_fail_with = \"extend_from_slice out of bounds\")]\n fn extend_slice_beyond_max_len() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_slice(&[2, 3, 4]); // S]should panic\n }\n\n #[test(should_fail_with = \"extend_from_bounded_vec out of bounds\")]\n fn extend_bounded_vec_beyond_max_len() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n let other: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n vec.extend_from_bounded_vec(other); // should panic\n }\n\n #[test]\n fn extend_with_empty_collections() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n let original_len = vec.len();\n\n vec.extend_from_array([]);\n assert_eq(vec.len(), original_len);\n\n vec.extend_from_slice(&[]);\n assert_eq(vec.len(), original_len);\n\n let empty: BoundedVec<u32, 3> = BoundedVec::new();\n vec.extend_from_bounded_vec(empty);\n assert_eq(vec.len(), original_len);\n }\n }\n\n mod storage {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn storage_consistency() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n\n // test initial storage state\n assert_eq(vec.storage(), [0, 0, 0, 0, 0]);\n\n vec.push(1);\n vec.push(2);\n\n // test storage after modifications\n assert_eq(vec.storage(), [1, 2, 0, 0, 0]);\n\n // storage doesn't change length\n assert_eq(vec.len(), 2);\n assert_eq(vec.max_len(), 5);\n }\n\n #[test]\n fn storage_after_pop() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n\n let _ = vec.pop();\n // after pop, the last element should be zeroed\n assert_eq(vec.storage(), [1, 2, 0]);\n assert_eq(vec.len(), 2);\n }\n\n #[test]\n fn vector_immutable() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n let storage = vec.storage();\n\n assert_eq(storage, [1, 2, 3]);\n\n // Verify that the original vector is unchanged\n assert_eq(vec.len(), 3);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 3);\n }\n }\n}\n"
|
|
6612
|
+
"source": "use crate::{cmp::Eq, convert::From, runtime::is_unconstrained, static_assert};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a [`Vec`][crate::collections::vec::Vec]`<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n ///\n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n ///\n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n ///\n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure.\n /// vec.set_unchecked(2, 42);\n /// println(vec);\n ///\n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n ///\n /// Panics if the new length of the vector will be greater than the max length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n ///\n /// v.push(1);\n /// v.push(2);\n ///\n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n ///\n /// v.push(100);\n /// assert(v.len() == 1);\n ///\n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n ///\n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n ///\n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n ///\n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n ///\n /// Note that uninitialized elements may be zeroed out!\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n ///\n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n ///\n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n ///\n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n ///\n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n if is_unconstrained() {\n for i in 0..append_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input.\n /// The maximum length of the vector is determined based on the type signature.\n ///\n /// Example:\n ///\n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n static_assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n ///\n /// Panics if the vector is empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n ///\n /// let two = v.pop();\n /// let one = v.pop();\n ///\n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0, \"cannot pop from an empty vector\");\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n ///\n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n if is_unconstrained() {\n for i in 0..self.len {\n ret |= predicate(self.storage[i]);\n }\n } else {\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element\n /// in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.mapi(|i, value| i + value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n\n if is_unconstrained() {\n for i in 0..self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(i, self.get_unchecked(i));\n }\n }\n }\n\n ret\n }\n\n /// Calls a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::<u32, 4>::new();\n /// vec.for_each(|value| result.push(value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Calls a closure on each element in this vector, along with its index.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let mut result = BoundedVec::<u32, 4>::new();\n /// vec.for_eachi(|i, value| result.push(i + value * 2));\n ///\n /// let expected = BoundedVec::from_array([2, 5, 8, 11]);\n /// assert_eq(result, expected);\n /// ```\n pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n if is_unconstrained() {\n for i in 0..self.len() {\n f(i, self.get_unchecked(i));\n }\n } else {\n for i in 0..MaxLen {\n if i < self.len() {\n f(i, self.get_unchecked(i));\n }\n }\n }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function will zero out any elements at or past index `len` of `array`.\n /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n /// zeroed after that index, you can use [`from_parts_unchecked`][Self::from_parts_unchecked] to remove the extra loop.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n /// ```\n pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n let zeroed = crate::mem::zeroed();\n\n if is_unconstrained() {\n for i in len..MaxLen {\n array[i] = zeroed;\n }\n } else {\n for i in 0..MaxLen {\n if i >= len {\n array[i] = zeroed;\n }\n }\n }\n\n BoundedVec { storage: array, len }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function is unsafe because it expects all elements past the `len` index\n /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n /// for a safe version of this function which does zero out any indices past the\n /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n /// to give incorrect results since it will check even elements past `len`.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n ///\n /// // invalid use!\n /// let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n /// let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n ///\n /// // both vecs have length 3 so we'd expect them to be equal, but this\n /// // fails because elements past the length are still checked in eq\n /// assert_eq(vec1, vec2); // fails\n /// ```\n pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n BoundedVec { storage: array, len }\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen>\nwhere\n T: Eq,\n{\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n if self.len == other.len {\n self.storage == other.storage\n } else {\n false\n }\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n let _ = vec.get(0);\n }\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_beyond_length() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n let _ = vec.get(3);\n }\n\n #[test]\n fn get_works_within_bounds() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(2), 3);\n assert_eq(vec.get(4), 5);\n }\n\n #[test]\n fn get_unchecked_works() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n assert_eq(vec.get_unchecked(0), 1);\n assert_eq(vec.get_unchecked(2), 3);\n }\n\n #[test]\n fn get_unchecked_works_past_len() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n assert_eq(vec.get_unchecked(4), 0);\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_setting_beyond_length() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3]);\n vec.set(3, 4);\n }\n\n #[test]\n fn set_unchecked_operations() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n\n vec.set_unchecked(0, 10);\n assert_eq(vec.get(0), 10);\n }\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn set_unchecked_operations_past_len() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n\n vec.set_unchecked(3, 40);\n assert_eq(vec.get(3), 40);\n }\n\n #[test]\n fn set_preserves_other_elements() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n\n vec.set(2, 30);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 30);\n assert_eq(vec.get(3), 4);\n assert_eq(vec.get(4), 5);\n }\n }\n\n mod any {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn returns_false_if_predicate_not_satisfied() {\n let vec: BoundedVec<bool, 4> = BoundedVec::from_array([false, false, false, false]);\n let result = vec.any(|value| value);\n\n assert(!result);\n }\n\n #[test]\n fn returns_true_if_predicate_satisfied() {\n let vec: BoundedVec<bool, 4> = BoundedVec::from_array([false, false, true, true]);\n let result = vec.any(|value| value);\n\n assert(result);\n }\n\n #[test]\n fn returns_false_on_empty_boundedvec() {\n let vec: BoundedVec<bool, 0> = BoundedVec::new();\n let result = vec.any(|value| value);\n\n assert(!result);\n }\n\n #[test]\n fn any_with_complex_predicates() {\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n\n assert(vec.any(|x| x > 3));\n assert(!vec.any(|x| x > 10));\n assert(vec.any(|x| x % 2 == 0)); // has a even number\n assert(vec.any(|x| x == 3)); // has a specific value\n }\n\n #[test]\n fn any_with_partial_vector() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n\n assert(vec.any(|x| x == 1));\n assert(vec.any(|x| x == 2));\n assert(!vec.any(|x| x == 3));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn map_with_conditional_logic() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n\n let result = vec.map(|x| if x % 2 == 0 { x * 2 } else { x });\n let expected = BoundedVec::from_array([1, 4, 3, 8]);\n assert_eq(result, expected);\n }\n\n #[test]\n fn map_preserves_length() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|x| x * 2);\n\n assert_eq(result.len(), vec.len());\n assert_eq(result.max_len(), vec.max_len());\n }\n\n #[test]\n fn map_on_empty_vector() {\n let vec: BoundedVec<u32, 5> = BoundedVec::new();\n let result = vec.map(|x| x * 2);\n assert_eq(result, vec);\n assert_eq(result.len(), 0);\n assert_eq(result.max_len(), 5);\n }\n }\n\n mod mapi {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-mapi-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| i + value * 2);\n // docs:end:bounded-vec-mapi-example\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.mapi(|i, value| (i + value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.mapi(|_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn mapi_with_index_branching_logic() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n\n let result = vec.mapi(|i, x| if i % 2 == 0 { x * 2 } else { x });\n let expected = BoundedVec::from_array([2, 2, 6, 4]);\n assert_eq(result, expected);\n }\n }\n\n mod for_each {\n use crate::collections::bounded_vec::BoundedVec;\n\n // map in terms of for_each\n fn for_each_map<T, U, Env, let MaxLen: u32>(\n input: BoundedVec<T, MaxLen>,\n f: fn[Env](T) -> U,\n ) -> BoundedVec<U, MaxLen> {\n let mut output = BoundedVec::<U, MaxLen>::new();\n let output_ref = &mut output;\n input.for_each(|x| output_ref.push(f(x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-each-example\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n vec.for_each(|value| { *acc_ref += value; });\n // docs:end:bounded-vec-for-each-example\n assert_eq(acc, 6);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| value * 2);\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_each_map(vec, |value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = for_each_map(vec, |value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn for_each_on_empty_vector() {\n let vec: BoundedVec<u32, 5> = BoundedVec::new();\n let mut count = 0;\n let count_ref = &mut count;\n vec.for_each(|_| { *count_ref += 1; });\n assert_eq(count, 0);\n }\n\n #[test]\n fn for_each_with_side_effects() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n let mut seen = BoundedVec::<u32, 3>::new();\n let seen_ref = &mut seen;\n vec.for_each(|x| seen_ref.push(x));\n assert_eq(seen, vec);\n }\n }\n\n mod for_eachi {\n use crate::collections::bounded_vec::BoundedVec;\n\n // mapi in terms of for_eachi\n fn for_eachi_mapi<T, U, Env, let MaxLen: u32>(\n input: BoundedVec<T, MaxLen>,\n f: fn[Env](u32, T) -> U,\n ) -> BoundedVec<U, MaxLen> {\n let mut output = BoundedVec::<U, MaxLen>::new();\n let output_ref = &mut output;\n input.for_eachi(|i, x| output_ref.push(f(i, x)));\n output\n }\n\n #[test]\n fn smoke_test() {\n let mut acc = 0;\n let acc_ref = &mut acc;\n // docs:start:bounded-vec-for-eachi-example\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n vec.for_eachi(|i, value| { *acc_ref += i * value; });\n // docs:end:bounded-vec-for-eachi-example\n\n // 0 * 1 + 1 * 2 + 2 * 3\n assert_eq(acc, 8);\n }\n\n #[test]\n fn applies_function_correctly() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| i + value * 2);\n let expected = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = for_eachi_mapi(vec, |i, value| (i + value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 5, 8, 11]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = for_eachi_mapi(vec, |_, value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n\n #[test]\n fn for_eachi_on_empty_vector() {\n let vec: BoundedVec<u32, 5> = BoundedVec::new();\n let mut count = 0;\n let count_ref = &mut count;\n vec.for_eachi(|_, _| { *count_ref += 1; });\n assert_eq(count, 0);\n }\n\n #[test]\n fn for_eachi_with_index_tracking() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([10, 20, 30]);\n let mut indices = BoundedVec::<u32, 3>::new();\n let indices_ref = &mut indices;\n vec.for_eachi(|i, _| indices_ref.push(i));\n\n let expected = BoundedVec::from_array([0, 1, 2]);\n assert_eq(indices, expected);\n }\n\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n assert_eq(bounded_vec.get(2), 3);\n }\n\n #[test(should_fail_with = \"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n\n #[test]\n fn from_array_preserves_order() {\n let array = [5, 3, 1, 4, 2];\n let vec: BoundedVec<u32, 5> = BoundedVec::from_array(array);\n for i in 0..array.len() {\n assert_eq(vec.get(i), array[i]);\n }\n }\n\n #[test]\n fn from_array_with_different_types() {\n let bool_array = [true, false, true];\n let bool_vec: BoundedVec<bool, 3> = BoundedVec::from_array(bool_array);\n assert_eq(bool_vec.len(), 3);\n assert_eq(bool_vec.get(0), true);\n assert_eq(bool_vec.get(1), false);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n use crate::convert::From;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n\n mod from_parts {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn from_parts() {\n // docs:start:from-parts\n let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // Any elements past the given length are zeroed out, so these\n // two BoundedVecs will be completely equal\n let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 1], 3);\n let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 2], 3);\n assert_eq(vec1, vec2);\n // docs:end:from-parts\n }\n\n #[test]\n fn from_parts_unchecked() {\n // docs:start:from-parts-unchecked\n let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // invalid use!\n let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n // both vecs have length 3 so we'd expect them to be equal, but this\n // fails because elements past the length are still checked in eq\n assert(vec1 != vec2);\n // docs:end:from-parts-unchecked\n }\n }\n\n mod push_pop {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn push_and_pop_operations() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n\n assert_eq(vec.len(), 0);\n\n vec.push(1);\n assert_eq(vec.len(), 1);\n assert_eq(vec.get(0), 1);\n\n vec.push(2);\n assert_eq(vec.len(), 2);\n assert_eq(vec.get(1), 2);\n\n let popped = vec.pop();\n assert_eq(popped, 2);\n assert_eq(vec.len(), 1);\n\n let popped2 = vec.pop();\n assert_eq(popped2, 1);\n assert_eq(vec.len(), 0);\n }\n\n #[test(should_fail_with = \"push out of bounds\")]\n fn push_to_full_vector() {\n let mut vec: BoundedVec<u32, 2> = BoundedVec::new();\n vec.push(1);\n vec.push(2);\n vec.push(3); // should panic\n }\n\n #[test(should_fail_with = \"cannot pop from an empty vector\")]\n fn pop_from_empty_vector() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n let _ = vec.pop(); // should panic\n }\n\n #[test]\n fn push_pop_cycle() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n\n // push to full\n vec.push(1);\n vec.push(2);\n vec.push(3);\n assert_eq(vec.len(), 3);\n\n // pop all\n assert_eq(vec.pop(), 3);\n assert_eq(vec.pop(), 2);\n assert_eq(vec.pop(), 1);\n assert_eq(vec.len(), 0);\n\n // push again\n vec.push(4);\n assert_eq(vec.len(), 1);\n assert_eq(vec.get(0), 4);\n }\n }\n\n mod extend {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn extend_from_array() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_array([2, 3]);\n\n assert_eq(vec.len(), 3);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 3);\n }\n\n #[test]\n fn extend_from_slice() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_slice(&[2, 3]);\n\n assert_eq(vec.len(), 3);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 3);\n }\n\n #[test]\n fn extend_from_bounded_vec() {\n let mut vec1: BoundedVec<u32, 5> = BoundedVec::new();\n let mut vec2: BoundedVec<u32, 3> = BoundedVec::new();\n\n vec1.push(1);\n vec2.push(2);\n vec2.push(3);\n\n vec1.extend_from_bounded_vec(vec2);\n\n assert_eq(vec1.len(), 3);\n assert_eq(vec1.get(0), 1);\n assert_eq(vec1.get(1), 2);\n assert_eq(vec1.get(2), 3);\n }\n\n #[test(should_fail_with = \"extend_from_array out of bounds\")]\n fn extend_array_beyond_max_len() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_array([2, 3, 4]); // should panic\n }\n\n #[test(should_fail_with = \"extend_from_slice out of bounds\")]\n fn extend_slice_beyond_max_len() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n vec.push(1);\n vec.extend_from_slice(&[2, 3, 4]); // S]should panic\n }\n\n #[test(should_fail_with = \"extend_from_bounded_vec out of bounds\")]\n fn extend_bounded_vec_beyond_max_len() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::new();\n let other: BoundedVec<u32, 5> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n vec.extend_from_bounded_vec(other); // should panic\n }\n\n #[test]\n fn extend_with_empty_collections() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n let original_len = vec.len();\n\n vec.extend_from_array([]);\n assert_eq(vec.len(), original_len);\n\n vec.extend_from_slice(&[]);\n assert_eq(vec.len(), original_len);\n\n let empty: BoundedVec<u32, 3> = BoundedVec::new();\n vec.extend_from_bounded_vec(empty);\n assert_eq(vec.len(), original_len);\n }\n }\n\n mod storage {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn storage_consistency() {\n let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n\n // test initial storage state\n assert_eq(vec.storage(), [0, 0, 0, 0, 0]);\n\n vec.push(1);\n vec.push(2);\n\n // test storage after modifications\n assert_eq(vec.storage(), [1, 2, 0, 0, 0]);\n\n // storage doesn't change length\n assert_eq(vec.len(), 2);\n assert_eq(vec.max_len(), 5);\n }\n\n #[test]\n fn storage_after_pop() {\n let mut vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n\n let _ = vec.pop();\n // after pop, the last element should be zeroed\n assert_eq(vec.storage(), [1, 2, 0]);\n assert_eq(vec.len(), 2);\n }\n\n #[test]\n fn vector_immutable() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([1, 2, 3]);\n let storage = vec.storage();\n\n assert_eq(storage, [1, 2, 3]);\n\n // Verify that the original vector is unchanged\n assert_eq(vec.len(), 3);\n assert_eq(vec.get(0), 1);\n assert_eq(vec.get(1), 2);\n assert_eq(vec.get(2), 3);\n }\n }\n}\n"
|
|
6613
6613
|
},
|
|
6614
6614
|
"64": {
|
|
6615
6615
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/capsules/mod.nr",
|