github.com/consensys/gnark-crypto@v0.14.0/ecc/bw6-756/fp/element_exp.go (about) 1 // Copyright 2020 ConsenSys Software Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Code generated by consensys/gnark-crypto DO NOT EDIT 16 17 package fp 18 19 // expBySqrtExp is equivalent to z.Exp(x, 1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f0d0) 20 // 21 // uses github.com/mmcloughlin/addchain v0.4.0 to generate a shorter addition chain 22 func (z *Element) expBySqrtExp(x Element) *Element { 23 // addition chain: 24 // 25 // _10 = 2*1 26 // _11 = 1 + _10 27 // _100 = 1 + _11 28 // _101 = 1 + _100 29 // _1001 = _100 + _101 30 // _1011 = _10 + _1001 31 // _1101 = _10 + _1011 32 // _1111 = _10 + _1101 33 // _10001 = _10 + _1111 34 // _10101 = _100 + _10001 35 // _10111 = _10 + _10101 36 // _11001 = _10 + _10111 37 // _11011 = _10 + _11001 38 // _11101 = _10 + _11011 39 // _11111 = _10 + _11101 40 // _100001 = _10 + _11111 41 // _100011 = _10 + _100001 42 // _100101 = _10 + _100011 43 // _100111 = _10 + _100101 44 // _101001 = _10 + _100111 45 // _101011 = _10 + _101001 46 // _101101 = _10 + _101011 47 // _101111 = _10 + _101101 48 // _110001 = _10 + _101111 49 // _110011 = _10 + _110001 50 // _110101 = _10 + _110011 51 // _110111 = _10 + _110101 52 // _111001 = _10 + _110111 53 // _111011 = _10 + _111001 54 // _111101 = _10 + _111011 55 // _111111 = _10 + _111101 56 // _1111010 = _111011 + _111111 57 // i52 = ((_1111010 << 4 + _11011) << 7 + _101011) << 7 58 // i67 = ((_110111 + i52) << 7 + _110101) << 5 + _10111 59 // i87 = ((i67 << 7 + _111001) << 5 + _10001) << 6 60 // i101 = ((_10111 + i87) << 8 + _10101) << 3 + _11 61 // i128 = ((i101 << 9 + _1001) << 8 + _111111) << 8 62 // i145 = ((_1111 + i128) << 9 + _110101) << 5 + _1101 63 // i167 = ((i145 << 9 + _110011) << 6 + _110101) << 5 64 // i187 = ((_11001 + i167) << 8 + _101111) << 9 + _110011 65 // i205 = ((i187 << 7 + _100101) << 6 + _111101) << 3 66 // i223 = ((_11 + i205) << 8 + _1011) << 7 + _11101 67 // i244 = ((i223 << 9 + _100111) << 6 + _111011) << 4 68 // i262 = ((_1111 + i244) << 8 + _100011) << 7 + _10001 69 // i285 = ((i262 << 7 + _101) << 8 + _10101) << 6 70 // i299 = ((_10001 + i285) << 7 + _110001) << 4 + _1101 71 // i325 = ((i299 << 7 + _11011) << 8 + _110011) << 9 72 // i341 = ((_110101 + i325) << 7 + _111001) << 6 + _110011 73 // i366 = ((i341 << 6 + _110001) << 9 + _10101) << 8 74 // i383 = ((_100011 + i366) << 6 + _11011) << 8 + _111101 75 // i401 = ((i383 << 3 + _11) << 10 + _1011) << 3 76 // i422 = ((1 + i401) << 12 + _100101) << 6 + _110101 77 // i448 = ((i422 << 12 + _100111) << 6 + _110101) << 6 78 // i467 = ((_10101 + i448) << 11 + _101001) << 5 + _11111 79 // i490 = ((i467 << 5 + _1011) << 9 + _111001) << 7 80 // i508 = ((_110011 + i490) << 4 + _1101) << 11 + _110111 81 // i535 = ((i508 << 7 + _11001) << 9 + _110111) << 9 82 // i550 = ((_101001 + i535) << 6 + _1011) << 6 + _1101 83 // i572 = ((i550 << 9 + _101011) << 5 + _11011) << 6 84 // i590 = ((_11011 + i572) << 6 + _11001) << 9 + _110101 85 // i616 = ((i590 << 7 + _10101) << 6 + _11) << 11 86 // i630 = ((_10101 + i616) << 4 + _101) << 7 + _1111 87 // i653 = ((i630 << 10 + _100101) << 6 + _100011) << 5 88 // i670 = ((_1111 + i653) << 7 + _11111) << 7 + _111101 89 // i688 = ((i670 << 3 + _101) << 10 + _101101) << 3 90 // i708 = ((_101 + i688) << 10 + _101111) << 7 + _100001 91 // i731 = ((i708 << 3 + _101) << 10 + _101001) << 8 92 // i751 = ((_100111 + i731) << 3 + _11) << 14 + _110011 93 // i768 = ((i751 << 6 + _110001) << 5 + _11111) << 4 94 // i781 = 2*((_11 + i768) << 9 + _111111) + 1 95 // return (i781 << 8 + _1101) << 4 96 // 97 // Operations: 667 squares 127 multiplies 98 99 // Allocate Temporaries. 100 var ( 101 t0 = new(Element) 102 t1 = new(Element) 103 t2 = new(Element) 104 t3 = new(Element) 105 t4 = new(Element) 106 t5 = new(Element) 107 t6 = new(Element) 108 t7 = new(Element) 109 t8 = new(Element) 110 t9 = new(Element) 111 t10 = new(Element) 112 t11 = new(Element) 113 t12 = new(Element) 114 t13 = new(Element) 115 t14 = new(Element) 116 t15 = new(Element) 117 t16 = new(Element) 118 t17 = new(Element) 119 t18 = new(Element) 120 t19 = new(Element) 121 t20 = new(Element) 122 t21 = new(Element) 123 t22 = new(Element) 124 t23 = new(Element) 125 t24 = new(Element) 126 t25 = new(Element) 127 t26 = new(Element) 128 t27 = new(Element) 129 t28 = new(Element) 130 ) 131 132 // var t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28 Element 133 // Step 1: t0 = x^0x2 134 t0.Square(&x) 135 136 // Step 2: t1 = x^0x3 137 t1.Mul(&x, t0) 138 139 // Step 3: t2 = x^0x4 140 t2.Mul(&x, t1) 141 142 // Step 4: t7 = x^0x5 143 t7.Mul(&x, t2) 144 145 // Step 5: t26 = x^0x9 146 t26.Mul(t2, t7) 147 148 // Step 6: t20 = x^0xb 149 t20.Mul(t0, t26) 150 151 // Step 7: z = x^0xd 152 z.Mul(t0, t20) 153 154 // Step 8: t12 = x^0xf 155 t12.Mul(t0, z) 156 157 // Step 9: t23 = x^0x11 158 t23.Mul(t0, t12) 159 160 // Step 10: t15 = x^0x15 161 t15.Mul(t2, t23) 162 163 // Step 11: t27 = x^0x17 164 t27.Mul(t0, t15) 165 166 // Step 12: t17 = x^0x19 167 t17.Mul(t0, t27) 168 169 // Step 13: t18 = x^0x1b 170 t18.Mul(t0, t17) 171 172 // Step 14: t25 = x^0x1d 173 t25.Mul(t0, t18) 174 175 // Step 15: t2 = x^0x1f 176 t2.Mul(t0, t25) 177 178 // Step 16: t8 = x^0x21 179 t8.Mul(t0, t2) 180 181 // Step 17: t13 = x^0x23 182 t13.Mul(t0, t8) 183 184 // Step 18: t14 = x^0x25 185 t14.Mul(t0, t13) 186 187 // Step 19: t5 = x^0x27 188 t5.Mul(t0, t14) 189 190 // Step 20: t6 = x^0x29 191 t6.Mul(t0, t5) 192 193 // Step 21: t19 = x^0x2b 194 t19.Mul(t0, t6) 195 196 // Step 22: t10 = x^0x2d 197 t10.Mul(t0, t19) 198 199 // Step 23: t9 = x^0x2f 200 t9.Mul(t0, t10) 201 202 // Step 24: t3 = x^0x31 203 t3.Mul(t0, t9) 204 205 // Step 25: t4 = x^0x33 206 t4.Mul(t0, t3) 207 208 // Step 26: t16 = x^0x35 209 t16.Mul(t0, t4) 210 211 // Step 27: t21 = x^0x37 212 t21.Mul(t0, t16) 213 214 // Step 28: t22 = x^0x39 215 t22.Mul(t0, t21) 216 217 // Step 29: t24 = x^0x3b 218 t24.Mul(t0, t22) 219 220 // Step 30: t11 = x^0x3d 221 t11.Mul(t0, t24) 222 223 // Step 31: t0 = x^0x3f 224 t0.Mul(t0, t11) 225 226 // Step 32: t28 = x^0x7a 227 t28.Mul(t24, t0) 228 229 // Step 36: t28 = x^0x7a0 230 for s := 0; s < 4; s++ { 231 t28.Square(t28) 232 } 233 234 // Step 37: t28 = x^0x7bb 235 t28.Mul(t18, t28) 236 237 // Step 44: t28 = x^0x3dd80 238 for s := 0; s < 7; s++ { 239 t28.Square(t28) 240 } 241 242 // Step 45: t28 = x^0x3ddab 243 t28.Mul(t19, t28) 244 245 // Step 52: t28 = x^0x1eed580 246 for s := 0; s < 7; s++ { 247 t28.Square(t28) 248 } 249 250 // Step 53: t28 = x^0x1eed5b7 251 t28.Mul(t21, t28) 252 253 // Step 60: t28 = x^0xf76adb80 254 for s := 0; s < 7; s++ { 255 t28.Square(t28) 256 } 257 258 // Step 61: t28 = x^0xf76adbb5 259 t28.Mul(t16, t28) 260 261 // Step 66: t28 = x^0x1eed5b76a0 262 for s := 0; s < 5; s++ { 263 t28.Square(t28) 264 } 265 266 // Step 67: t28 = x^0x1eed5b76b7 267 t28.Mul(t27, t28) 268 269 // Step 74: t28 = x^0xf76adbb5b80 270 for s := 0; s < 7; s++ { 271 t28.Square(t28) 272 } 273 274 // Step 75: t28 = x^0xf76adbb5bb9 275 t28.Mul(t22, t28) 276 277 // Step 80: t28 = x^0x1eed5b76b7720 278 for s := 0; s < 5; s++ { 279 t28.Square(t28) 280 } 281 282 // Step 81: t28 = x^0x1eed5b76b7731 283 t28.Mul(t23, t28) 284 285 // Step 87: t28 = x^0x7bb56ddaddcc40 286 for s := 0; s < 6; s++ { 287 t28.Square(t28) 288 } 289 290 // Step 88: t27 = x^0x7bb56ddaddcc57 291 t27.Mul(t27, t28) 292 293 // Step 96: t27 = x^0x7bb56ddaddcc5700 294 for s := 0; s < 8; s++ { 295 t27.Square(t27) 296 } 297 298 // Step 97: t27 = x^0x7bb56ddaddcc5715 299 t27.Mul(t15, t27) 300 301 // Step 100: t27 = x^0x3ddab6ed6ee62b8a8 302 for s := 0; s < 3; s++ { 303 t27.Square(t27) 304 } 305 306 // Step 101: t27 = x^0x3ddab6ed6ee62b8ab 307 t27.Mul(t1, t27) 308 309 // Step 110: t27 = x^0x7bb56ddaddcc5715600 310 for s := 0; s < 9; s++ { 311 t27.Square(t27) 312 } 313 314 // Step 111: t26 = x^0x7bb56ddaddcc5715609 315 t26.Mul(t26, t27) 316 317 // Step 119: t26 = x^0x7bb56ddaddcc571560900 318 for s := 0; s < 8; s++ { 319 t26.Square(t26) 320 } 321 322 // Step 120: t26 = x^0x7bb56ddaddcc57156093f 323 t26.Mul(t0, t26) 324 325 // Step 128: t26 = x^0x7bb56ddaddcc57156093f00 326 for s := 0; s < 8; s++ { 327 t26.Square(t26) 328 } 329 330 // Step 129: t26 = x^0x7bb56ddaddcc57156093f0f 331 t26.Mul(t12, t26) 332 333 // Step 138: t26 = x^0xf76adbb5bb98ae2ac127e1e00 334 for s := 0; s < 9; s++ { 335 t26.Square(t26) 336 } 337 338 // Step 139: t26 = x^0xf76adbb5bb98ae2ac127e1e35 339 t26.Mul(t16, t26) 340 341 // Step 144: t26 = x^0x1eed5b76b77315c55824fc3c6a0 342 for s := 0; s < 5; s++ { 343 t26.Square(t26) 344 } 345 346 // Step 145: t26 = x^0x1eed5b76b77315c55824fc3c6ad 347 t26.Mul(z, t26) 348 349 // Step 154: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a00 350 for s := 0; s < 9; s++ { 351 t26.Square(t26) 352 } 353 354 // Step 155: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33 355 t26.Mul(t4, t26) 356 357 // Step 161: t26 = x^0xf76adbb5bb98ae2ac127e1e3568cc0 358 for s := 0; s < 6; s++ { 359 t26.Square(t26) 360 } 361 362 // Step 162: t26 = x^0xf76adbb5bb98ae2ac127e1e3568cf5 363 t26.Mul(t16, t26) 364 365 // Step 167: t26 = x^0x1eed5b76b77315c55824fc3c6ad19ea0 366 for s := 0; s < 5; s++ { 367 t26.Square(t26) 368 } 369 370 // Step 168: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb9 371 t26.Mul(t17, t26) 372 373 // Step 176: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb900 374 for s := 0; s < 8; s++ { 375 t26.Square(t26) 376 } 377 378 // Step 177: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f 379 t26.Mul(t9, t26) 380 381 // Step 186: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e00 382 for s := 0; s < 9; s++ { 383 t26.Square(t26) 384 } 385 386 // Step 187: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e33 387 t26.Mul(t4, t26) 388 389 // Step 194: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f1980 390 for s := 0; s < 7; s++ { 391 t26.Square(t26) 392 } 393 394 // Step 195: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5 395 t26.Mul(t14, t26) 396 397 // Step 201: t26 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc66940 398 for s := 0; s < 6; s++ { 399 t26.Square(t26) 400 } 401 402 // Step 202: t26 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d 403 t26.Mul(t11, t26) 404 405 // Step 205: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334be8 406 for s := 0; s < 3; s++ { 407 t26.Square(t26) 408 } 409 410 // Step 206: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb 411 t26.Mul(t1, t26) 412 413 // Step 214: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb00 414 for s := 0; s < 8; s++ { 415 t26.Square(t26) 416 } 417 418 // Step 215: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b 419 t26.Mul(t20, t26) 420 421 // Step 222: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f58580 422 for s := 0; s < 7; s++ { 423 t26.Square(t26) 424 } 425 426 // Step 223: t25 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d 427 t25.Mul(t25, t26) 428 429 // Step 232: t25 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a00 430 for s := 0; s < 9; s++ { 431 t25.Square(t25) 432 } 433 434 // Step 233: t25 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27 435 t25.Mul(t5, t25) 436 437 // Step 239: t25 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89c0 438 for s := 0; s < 6; s++ { 439 t25.Square(t25) 440 } 441 442 // Step 240: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fb 443 t24.Mul(t24, t25) 444 445 // Step 244: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fb0 446 for s := 0; s < 4; s++ { 447 t24.Square(t24) 448 } 449 450 // Step 245: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf 451 t24.Mul(t12, t24) 452 453 // Step 253: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf00 454 for s := 0; s < 8; s++ { 455 t24.Square(t24) 456 } 457 458 // Step 254: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23 459 t24.Mul(t13, t24) 460 461 // Step 261: t24 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf9180 462 for s := 0; s < 7; s++ { 463 t24.Square(t24) 464 } 465 466 // Step 262: t24 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf9191 467 t24.Mul(t23, t24) 468 469 // Step 269: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c880 470 for s := 0; s < 7; s++ { 471 t24.Square(t24) 472 } 473 474 // Step 270: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c885 475 t24.Mul(t7, t24) 476 477 // Step 278: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88500 478 for s := 0; s < 8; s++ { 479 t24.Square(t24) 480 } 481 482 // Step 279: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515 483 t24.Mul(t15, t24) 484 485 // Step 285: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf232214540 486 for s := 0; s < 6; s++ { 487 t24.Square(t24) 488 } 489 490 // Step 286: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf232214551 491 t23.Mul(t23, t24) 492 493 // Step 293: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a880 494 for s := 0; s < 7; s++ { 495 t23.Square(t23) 496 } 497 498 // Step 294: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1 499 t23.Mul(t3, t23) 500 501 // Step 298: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b10 502 for s := 0; s < 4; s++ { 503 t23.Square(t23) 504 } 505 506 // Step 299: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d 507 t23.Mul(z, t23) 508 509 // Step 306: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e80 510 for s := 0; s < 7; s++ { 511 t23.Square(t23) 512 } 513 514 // Step 307: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b 515 t23.Mul(t18, t23) 516 517 // Step 315: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b00 518 for s := 0; s < 8; s++ { 519 t23.Square(t23) 520 } 521 522 // Step 316: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b33 523 t23.Mul(t4, t23) 524 525 // Step 325: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366600 526 for s := 0; s < 9; s++ { 527 t23.Square(t23) 528 } 529 530 // Step 326: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635 531 t23.Mul(t16, t23) 532 533 // Step 333: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331a80 534 for s := 0; s < 7; s++ { 535 t23.Square(t23) 536 } 537 538 // Step 334: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9 539 t23.Mul(t22, t23) 540 541 // Step 340: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae40 542 for s := 0; s < 6; s++ { 543 t23.Square(t23) 544 } 545 546 // Step 341: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73 547 t23.Mul(t4, t23) 548 549 // Step 347: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cc0 550 for s := 0; s < 6; s++ { 551 t23.Square(t23) 552 } 553 554 // Step 348: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf1 555 t23.Mul(t3, t23) 556 557 // Step 357: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e200 558 for s := 0; s < 9; s++ { 559 t23.Square(t23) 560 } 561 562 // Step 358: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215 563 t23.Mul(t15, t23) 564 565 // Step 366: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e21500 566 for s := 0; s < 8; s++ { 567 t23.Square(t23) 568 } 569 570 // Step 367: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e21523 571 t23.Mul(t13, t23) 572 573 // Step 373: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548c0 574 for s := 0; s < 6; s++ { 575 t23.Square(t23) 576 } 577 578 // Step 374: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db 579 t23.Mul(t18, t23) 580 581 // Step 382: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db00 582 for s := 0; s < 8; s++ { 583 t23.Square(t23) 584 } 585 586 // Step 383: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d 587 t23.Mul(t11, t23) 588 589 // Step 386: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9e8 590 for s := 0; s < 3; s++ { 591 t23.Square(t23) 592 } 593 594 // Step 387: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb 595 t23.Mul(t1, t23) 596 597 // Step 397: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac00 598 for s := 0; s < 10; s++ { 599 t23.Square(t23) 600 } 601 602 // Step 398: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b 603 t23.Mul(t20, t23) 604 605 // Step 401: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6058 606 for s := 0; s < 3; s++ { 607 t23.Square(t23) 608 } 609 610 // Step 402: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059 611 t23.Mul(&x, t23) 612 613 // Step 414: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059000 614 for s := 0; s < 12; s++ { 615 t23.Square(t23) 616 } 617 618 // Step 415: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025 619 t23.Mul(t14, t23) 620 621 // Step 421: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640940 622 for s := 0; s < 6; s++ { 623 t23.Square(t23) 624 } 625 626 // Step 422: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975 627 t23.Mul(t16, t23) 628 629 // Step 434: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975000 630 for s := 0; s < 12; s++ { 631 t23.Square(t23) 632 } 633 634 // Step 435: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027 635 t23.Mul(t5, t23) 636 637 // Step 441: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409c0 638 for s := 0; s < 6; s++ { 639 t23.Square(t23) 640 } 641 642 // Step 442: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f5 643 t23.Mul(t16, t23) 644 645 // Step 448: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d40 646 for s := 0; s < 6; s++ { 647 t23.Square(t23) 648 } 649 650 // Step 449: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55 651 t23.Mul(t15, t23) 652 653 // Step 460: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa800 654 for s := 0; s < 11; s++ { 655 t23.Square(t23) 656 } 657 658 // Step 461: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829 659 t23.Mul(t6, t23) 660 661 // Step 466: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d550520 662 for s := 0; s < 5; s++ { 663 t23.Square(t23) 664 } 665 666 // Step 467: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f 667 t23.Mul(t2, t23) 668 669 // Step 472: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7e0 670 for s := 0; s < 5; s++ { 671 t23.Square(t23) 672 } 673 674 // Step 473: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb 675 t23.Mul(t20, t23) 676 677 // Step 482: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd600 678 for s := 0; s < 9; s++ { 679 t23.Square(t23) 680 } 681 682 // Step 483: t22 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd639 683 t22.Mul(t22, t23) 684 685 // Step 490: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1c80 686 for s := 0; s < 7; s++ { 687 t22.Square(t22) 688 } 689 690 // Step 491: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3 691 t22.Mul(t4, t22) 692 693 // Step 495: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb30 694 for s := 0; s < 4; s++ { 695 t22.Square(t22) 696 } 697 698 // Step 496: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d 699 t22.Mul(z, t22) 700 701 // Step 507: t22 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e800 702 for s := 0; s < 11; s++ { 703 t22.Square(t22) 704 } 705 706 // Step 508: t22 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e837 707 t22.Mul(t21, t22) 708 709 // Step 515: t22 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b80 710 for s := 0; s < 7; s++ { 711 t22.Square(t22) 712 } 713 714 // Step 516: t22 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b99 715 t22.Mul(t17, t22) 716 717 // Step 525: t22 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373200 718 for s := 0; s < 9; s++ { 719 t22.Square(t22) 720 } 721 722 // Step 526: t21 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237 723 t21.Mul(t21, t22) 724 725 // Step 535: t21 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e00 726 for s := 0; s < 9; s++ { 727 t21.Square(t21) 728 } 729 730 // Step 536: t21 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e29 731 t21.Mul(t6, t21) 732 733 // Step 542: t21 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a40 734 for s := 0; s < 6; s++ { 735 t21.Square(t21) 736 } 737 738 // Step 543: t20 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b 739 t20.Mul(t20, t21) 740 741 // Step 549: t20 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292c0 742 for s := 0; s < 6; s++ { 743 t20.Square(t20) 744 } 745 746 // Step 550: t20 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd 747 t20.Mul(z, t20) 748 749 // Step 559: t20 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a00 750 for s := 0; s < 9; s++ { 751 t20.Square(t20) 752 } 753 754 // Step 560: t19 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2b 755 t19.Mul(t19, t20) 756 757 // Step 565: t19 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b34560 758 for s := 0; s < 5; s++ { 759 t19.Square(t19) 760 } 761 762 // Step 566: t19 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b 763 t19.Mul(t18, t19) 764 765 // Step 572: t19 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15ec0 766 for s := 0; s < 6; s++ { 767 t19.Square(t19) 768 } 769 770 // Step 573: t18 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb 771 t18.Mul(t18, t19) 772 773 // Step 579: t18 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6c0 774 for s := 0; s < 6; s++ { 775 t18.Square(t18) 776 } 777 778 // Step 580: t17 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d9 779 t17.Mul(t17, t18) 780 781 // Step 589: t17 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db200 782 for s := 0; s < 9; s++ { 783 t17.Square(t17) 784 } 785 786 // Step 590: t16 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db235 787 t16.Mul(t16, t17) 788 789 // Step 597: t16 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a80 790 for s := 0; s < 7; s++ { 791 t16.Square(t16) 792 } 793 794 // Step 598: t16 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a95 795 t16.Mul(t15, t16) 796 797 // Step 604: t16 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a540 798 for s := 0; s < 6; s++ { 799 t16.Square(t16) 800 } 801 802 // Step 605: t16 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a543 803 t16.Mul(t1, t16) 804 805 // Step 616: t16 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a1800 806 for s := 0; s < 11; s++ { 807 t16.Square(t16) 808 } 809 810 // Step 617: t15 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a1815 811 t15.Mul(t15, t16) 812 813 // Step 621: t15 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a18150 814 for s := 0; s < 4; s++ { 815 t15.Square(t15) 816 } 817 818 // Step 622: t15 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a18155 819 t15.Mul(t7, t15) 820 821 // Step 629: t15 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa80 822 for s := 0; s < 7; s++ { 823 t15.Square(t15) 824 } 825 826 // Step 630: t15 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f 827 t15.Mul(t12, t15) 828 829 // Step 640: t15 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c00 830 for s := 0; s < 10; s++ { 831 t15.Square(t15) 832 } 833 834 // Step 641: t14 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c25 835 t14.Mul(t14, t15) 836 837 // Step 647: t14 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f0940 838 for s := 0; s < 6; s++ { 839 t14.Square(t14) 840 } 841 842 // Step 648: t13 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f0963 843 t13.Mul(t13, t14) 844 845 // Step 653: t13 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c60 846 for s := 0; s < 5; s++ { 847 t13.Square(t13) 848 } 849 850 // Step 654: t12 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f 851 t12.Mul(t12, t13) 852 853 // Step 661: t12 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f0963780 854 for s := 0; s < 7; s++ { 855 t12.Square(t12) 856 } 857 858 // Step 662: t12 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f 859 t12.Mul(t2, t12) 860 861 // Step 669: t12 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcf80 862 for s := 0; s < 7; s++ { 863 t12.Square(t12) 864 } 865 866 // Step 670: t11 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbd 867 t11.Mul(t11, t12) 868 869 // Step 673: t11 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7de8 870 for s := 0; s < 3; s++ { 871 t11.Square(t11) 872 } 873 874 // Step 674: t11 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded 875 t11.Mul(t7, t11) 876 877 // Step 684: t11 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b400 878 for s := 0; s < 10; s++ { 879 t11.Square(t11) 880 } 881 882 // Step 685: t10 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42d 883 t10.Mul(t10, t11) 884 885 // Step 688: t10 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda168 886 for s := 0; s < 3; s++ { 887 t10.Square(t10) 888 } 889 890 // Step 689: t10 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d 891 t10.Mul(t7, t10) 892 893 // Step 699: t10 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b400 894 for s := 0; s < 10; s++ { 895 t10.Square(t10) 896 } 897 898 // Step 700: t9 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f 899 t9.Mul(t9, t10) 900 901 // Step 707: t9 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da1780 902 for s := 0; s < 7; s++ { 903 t9.Square(t9) 904 } 905 906 // Step 708: t8 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1 907 t8.Mul(t8, t9) 908 909 // Step 711: t8 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd08 910 for s := 0; s < 3; s++ { 911 t8.Square(t8) 912 } 913 914 // Step 712: t7 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d 915 t7.Mul(t7, t8) 916 917 // Step 722: t7 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43400 918 for s := 0; s < 10; s++ { 919 t7.Square(t7) 920 } 921 922 // Step 723: t6 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429 923 t6.Mul(t6, t7) 924 925 // Step 731: t6 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f4342900 926 for s := 0; s < 8; s++ { 927 t6.Square(t6) 928 } 929 930 // Step 732: t5 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f4342927 931 t5.Mul(t5, t6) 932 933 // Step 735: t5 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a14938 934 for s := 0; s < 3; s++ { 935 t5.Square(t5) 936 } 937 938 // Step 736: t5 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b 939 t5.Mul(t1, t5) 940 941 // Step 750: t5 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec000 942 for s := 0; s < 14; s++ { 943 t5.Square(t5) 944 } 945 946 // Step 751: t4 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec033 947 t4.Mul(t4, t5) 948 949 // Step 757: t4 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b00cc0 950 for s := 0; s < 6; s++ { 951 t4.Square(t4) 952 } 953 954 // Step 758: t3 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b00cf1 955 t3.Mul(t3, t4) 956 957 // Step 763: t3 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e20 958 for s := 0; s < 5; s++ { 959 t3.Square(t3) 960 } 961 962 // Step 764: t2 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f 963 t2.Mul(t2, t3) 964 965 // Step 768: t2 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f0 966 for s := 0; s < 4; s++ { 967 t2.Square(t2) 968 } 969 970 // Step 769: t1 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f3 971 t1.Mul(t1, t2) 972 973 // Step 778: t1 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec033c7e600 974 for s := 0; s < 9; s++ { 975 t1.Square(t1) 976 } 977 978 // Step 779: t0 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec033c7e63f 979 t0.Mul(t0, t1) 980 981 // Step 780: t0 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7e 982 t0.Square(t0) 983 984 // Step 781: t0 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f 985 t0.Mul(&x, t0) 986 987 // Step 789: t0 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f00 988 for s := 0; s < 8; s++ { 989 t0.Square(t0) 990 } 991 992 // Step 790: z = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f0d 993 z.Mul(z, t0) 994 995 // Step 794: z = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f0d0 996 for s := 0; s < 4; s++ { 997 z.Square(z) 998 } 999 1000 return z 1001 } 1002 1003 // expByLegendreExp is equivalent to z.Exp(x, 7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f31fc34200000000000000000000) 1004 // 1005 // uses github.com/mmcloughlin/addchain v0.4.0 to generate a shorter addition chain 1006 func (z *Element) expByLegendreExp(x Element) *Element { 1007 // addition chain: 1008 // 1009 // _10 = 2*1 1010 // _11 = 1 + _10 1011 // _100 = 1 + _11 1012 // _101 = 1 + _100 1013 // _1001 = _100 + _101 1014 // _1011 = _10 + _1001 1015 // _1101 = _10 + _1011 1016 // _1111 = _10 + _1101 1017 // _10001 = _10 + _1111 1018 // _10101 = _100 + _10001 1019 // _10111 = _10 + _10101 1020 // _11001 = _10 + _10111 1021 // _11011 = _10 + _11001 1022 // _11101 = _10 + _11011 1023 // _11111 = _10 + _11101 1024 // _100001 = _10 + _11111 1025 // _100011 = _10 + _100001 1026 // _100101 = _10 + _100011 1027 // _100111 = _10 + _100101 1028 // _101001 = _10 + _100111 1029 // _101011 = _10 + _101001 1030 // _101101 = _10 + _101011 1031 // _101111 = _10 + _101101 1032 // _110001 = _10 + _101111 1033 // _110011 = _10 + _110001 1034 // _110101 = _10 + _110011 1035 // _110111 = _10 + _110101 1036 // _111001 = _10 + _110111 1037 // _111011 = _10 + _111001 1038 // _111101 = _10 + _111011 1039 // _111111 = _10 + _111101 1040 // _1111010 = _111011 + _111111 1041 // i52 = ((_1111010 << 4 + _11011) << 7 + _101011) << 7 1042 // i67 = ((_110111 + i52) << 7 + _110101) << 5 + _10111 1043 // i87 = ((i67 << 7 + _111001) << 5 + _10001) << 6 1044 // i101 = ((_10111 + i87) << 8 + _10101) << 3 + _11 1045 // i128 = ((i101 << 9 + _1001) << 8 + _111111) << 8 1046 // i145 = ((_1111 + i128) << 9 + _110101) << 5 + _1101 1047 // i167 = ((i145 << 9 + _110011) << 6 + _110101) << 5 1048 // i187 = ((_11001 + i167) << 8 + _101111) << 9 + _110011 1049 // i205 = ((i187 << 7 + _100101) << 6 + _111101) << 3 1050 // i223 = ((_11 + i205) << 8 + _1011) << 7 + _11101 1051 // i244 = ((i223 << 9 + _100111) << 6 + _111011) << 4 1052 // i262 = ((_1111 + i244) << 8 + _100011) << 7 + _10001 1053 // i285 = ((i262 << 7 + _101) << 8 + _10101) << 6 1054 // i299 = ((_10001 + i285) << 7 + _110001) << 4 + _1101 1055 // i325 = ((i299 << 7 + _11011) << 8 + _110011) << 9 1056 // i341 = ((_110101 + i325) << 7 + _111001) << 6 + _110011 1057 // i366 = ((i341 << 6 + _110001) << 9 + _10101) << 8 1058 // i383 = ((_100011 + i366) << 6 + _11011) << 8 + _111101 1059 // i401 = ((i383 << 3 + _11) << 10 + _1011) << 3 1060 // i422 = ((1 + i401) << 12 + _100101) << 6 + _110101 1061 // i448 = ((i422 << 12 + _100111) << 6 + _110101) << 6 1062 // i467 = ((_10101 + i448) << 11 + _101001) << 5 + _11111 1063 // i490 = ((i467 << 5 + _1011) << 9 + _111001) << 7 1064 // i508 = ((_110011 + i490) << 4 + _1101) << 11 + _110111 1065 // i535 = ((i508 << 7 + _11001) << 9 + _110111) << 9 1066 // i550 = ((_101001 + i535) << 6 + _1011) << 6 + _1101 1067 // i572 = ((i550 << 9 + _101011) << 5 + _11011) << 6 1068 // i590 = ((_11011 + i572) << 6 + _11001) << 9 + _110101 1069 // i616 = ((i590 << 7 + _10101) << 6 + _11) << 11 1070 // i630 = ((_10101 + i616) << 4 + _101) << 7 + _1111 1071 // i653 = ((i630 << 10 + _100101) << 6 + _100011) << 5 1072 // i670 = ((_1111 + i653) << 7 + _11111) << 7 + _111101 1073 // i688 = ((i670 << 3 + _101) << 10 + _101101) << 3 1074 // i708 = ((_101 + i688) << 10 + _101111) << 7 + _100001 1075 // i731 = ((i708 << 3 + _101) << 10 + _101001) << 8 1076 // i751 = ((_100111 + i731) << 3 + _11) << 14 + _110011 1077 // i768 = ((i751 << 6 + _110001) << 5 + _11111) << 4 1078 // i781 = 2*((_11 + i768) << 9 + _111111) + 1 1079 // return ((i781 << 8 + _1101) << 5 + 1) << 81 1080 // 1081 // Operations: 749 squares 128 multiplies 1082 1083 // Allocate Temporaries. 1084 var ( 1085 t0 = new(Element) 1086 t1 = new(Element) 1087 t2 = new(Element) 1088 t3 = new(Element) 1089 t4 = new(Element) 1090 t5 = new(Element) 1091 t6 = new(Element) 1092 t7 = new(Element) 1093 t8 = new(Element) 1094 t9 = new(Element) 1095 t10 = new(Element) 1096 t11 = new(Element) 1097 t12 = new(Element) 1098 t13 = new(Element) 1099 t14 = new(Element) 1100 t15 = new(Element) 1101 t16 = new(Element) 1102 t17 = new(Element) 1103 t18 = new(Element) 1104 t19 = new(Element) 1105 t20 = new(Element) 1106 t21 = new(Element) 1107 t22 = new(Element) 1108 t23 = new(Element) 1109 t24 = new(Element) 1110 t25 = new(Element) 1111 t26 = new(Element) 1112 t27 = new(Element) 1113 t28 = new(Element) 1114 ) 1115 1116 // var t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28 Element 1117 // Step 1: t0 = x^0x2 1118 t0.Square(&x) 1119 1120 // Step 2: t1 = x^0x3 1121 t1.Mul(&x, t0) 1122 1123 // Step 3: t2 = x^0x4 1124 t2.Mul(&x, t1) 1125 1126 // Step 4: t7 = x^0x5 1127 t7.Mul(&x, t2) 1128 1129 // Step 5: t26 = x^0x9 1130 t26.Mul(t2, t7) 1131 1132 // Step 6: t20 = x^0xb 1133 t20.Mul(t0, t26) 1134 1135 // Step 7: z = x^0xd 1136 z.Mul(t0, t20) 1137 1138 // Step 8: t12 = x^0xf 1139 t12.Mul(t0, z) 1140 1141 // Step 9: t23 = x^0x11 1142 t23.Mul(t0, t12) 1143 1144 // Step 10: t15 = x^0x15 1145 t15.Mul(t2, t23) 1146 1147 // Step 11: t27 = x^0x17 1148 t27.Mul(t0, t15) 1149 1150 // Step 12: t17 = x^0x19 1151 t17.Mul(t0, t27) 1152 1153 // Step 13: t18 = x^0x1b 1154 t18.Mul(t0, t17) 1155 1156 // Step 14: t25 = x^0x1d 1157 t25.Mul(t0, t18) 1158 1159 // Step 15: t2 = x^0x1f 1160 t2.Mul(t0, t25) 1161 1162 // Step 16: t8 = x^0x21 1163 t8.Mul(t0, t2) 1164 1165 // Step 17: t13 = x^0x23 1166 t13.Mul(t0, t8) 1167 1168 // Step 18: t14 = x^0x25 1169 t14.Mul(t0, t13) 1170 1171 // Step 19: t5 = x^0x27 1172 t5.Mul(t0, t14) 1173 1174 // Step 20: t6 = x^0x29 1175 t6.Mul(t0, t5) 1176 1177 // Step 21: t19 = x^0x2b 1178 t19.Mul(t0, t6) 1179 1180 // Step 22: t10 = x^0x2d 1181 t10.Mul(t0, t19) 1182 1183 // Step 23: t9 = x^0x2f 1184 t9.Mul(t0, t10) 1185 1186 // Step 24: t3 = x^0x31 1187 t3.Mul(t0, t9) 1188 1189 // Step 25: t4 = x^0x33 1190 t4.Mul(t0, t3) 1191 1192 // Step 26: t16 = x^0x35 1193 t16.Mul(t0, t4) 1194 1195 // Step 27: t21 = x^0x37 1196 t21.Mul(t0, t16) 1197 1198 // Step 28: t22 = x^0x39 1199 t22.Mul(t0, t21) 1200 1201 // Step 29: t24 = x^0x3b 1202 t24.Mul(t0, t22) 1203 1204 // Step 30: t11 = x^0x3d 1205 t11.Mul(t0, t24) 1206 1207 // Step 31: t0 = x^0x3f 1208 t0.Mul(t0, t11) 1209 1210 // Step 32: t28 = x^0x7a 1211 t28.Mul(t24, t0) 1212 1213 // Step 36: t28 = x^0x7a0 1214 for s := 0; s < 4; s++ { 1215 t28.Square(t28) 1216 } 1217 1218 // Step 37: t28 = x^0x7bb 1219 t28.Mul(t18, t28) 1220 1221 // Step 44: t28 = x^0x3dd80 1222 for s := 0; s < 7; s++ { 1223 t28.Square(t28) 1224 } 1225 1226 // Step 45: t28 = x^0x3ddab 1227 t28.Mul(t19, t28) 1228 1229 // Step 52: t28 = x^0x1eed580 1230 for s := 0; s < 7; s++ { 1231 t28.Square(t28) 1232 } 1233 1234 // Step 53: t28 = x^0x1eed5b7 1235 t28.Mul(t21, t28) 1236 1237 // Step 60: t28 = x^0xf76adb80 1238 for s := 0; s < 7; s++ { 1239 t28.Square(t28) 1240 } 1241 1242 // Step 61: t28 = x^0xf76adbb5 1243 t28.Mul(t16, t28) 1244 1245 // Step 66: t28 = x^0x1eed5b76a0 1246 for s := 0; s < 5; s++ { 1247 t28.Square(t28) 1248 } 1249 1250 // Step 67: t28 = x^0x1eed5b76b7 1251 t28.Mul(t27, t28) 1252 1253 // Step 74: t28 = x^0xf76adbb5b80 1254 for s := 0; s < 7; s++ { 1255 t28.Square(t28) 1256 } 1257 1258 // Step 75: t28 = x^0xf76adbb5bb9 1259 t28.Mul(t22, t28) 1260 1261 // Step 80: t28 = x^0x1eed5b76b7720 1262 for s := 0; s < 5; s++ { 1263 t28.Square(t28) 1264 } 1265 1266 // Step 81: t28 = x^0x1eed5b76b7731 1267 t28.Mul(t23, t28) 1268 1269 // Step 87: t28 = x^0x7bb56ddaddcc40 1270 for s := 0; s < 6; s++ { 1271 t28.Square(t28) 1272 } 1273 1274 // Step 88: t27 = x^0x7bb56ddaddcc57 1275 t27.Mul(t27, t28) 1276 1277 // Step 96: t27 = x^0x7bb56ddaddcc5700 1278 for s := 0; s < 8; s++ { 1279 t27.Square(t27) 1280 } 1281 1282 // Step 97: t27 = x^0x7bb56ddaddcc5715 1283 t27.Mul(t15, t27) 1284 1285 // Step 100: t27 = x^0x3ddab6ed6ee62b8a8 1286 for s := 0; s < 3; s++ { 1287 t27.Square(t27) 1288 } 1289 1290 // Step 101: t27 = x^0x3ddab6ed6ee62b8ab 1291 t27.Mul(t1, t27) 1292 1293 // Step 110: t27 = x^0x7bb56ddaddcc5715600 1294 for s := 0; s < 9; s++ { 1295 t27.Square(t27) 1296 } 1297 1298 // Step 111: t26 = x^0x7bb56ddaddcc5715609 1299 t26.Mul(t26, t27) 1300 1301 // Step 119: t26 = x^0x7bb56ddaddcc571560900 1302 for s := 0; s < 8; s++ { 1303 t26.Square(t26) 1304 } 1305 1306 // Step 120: t26 = x^0x7bb56ddaddcc57156093f 1307 t26.Mul(t0, t26) 1308 1309 // Step 128: t26 = x^0x7bb56ddaddcc57156093f00 1310 for s := 0; s < 8; s++ { 1311 t26.Square(t26) 1312 } 1313 1314 // Step 129: t26 = x^0x7bb56ddaddcc57156093f0f 1315 t26.Mul(t12, t26) 1316 1317 // Step 138: t26 = x^0xf76adbb5bb98ae2ac127e1e00 1318 for s := 0; s < 9; s++ { 1319 t26.Square(t26) 1320 } 1321 1322 // Step 139: t26 = x^0xf76adbb5bb98ae2ac127e1e35 1323 t26.Mul(t16, t26) 1324 1325 // Step 144: t26 = x^0x1eed5b76b77315c55824fc3c6a0 1326 for s := 0; s < 5; s++ { 1327 t26.Square(t26) 1328 } 1329 1330 // Step 145: t26 = x^0x1eed5b76b77315c55824fc3c6ad 1331 t26.Mul(z, t26) 1332 1333 // Step 154: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a00 1334 for s := 0; s < 9; s++ { 1335 t26.Square(t26) 1336 } 1337 1338 // Step 155: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33 1339 t26.Mul(t4, t26) 1340 1341 // Step 161: t26 = x^0xf76adbb5bb98ae2ac127e1e3568cc0 1342 for s := 0; s < 6; s++ { 1343 t26.Square(t26) 1344 } 1345 1346 // Step 162: t26 = x^0xf76adbb5bb98ae2ac127e1e3568cf5 1347 t26.Mul(t16, t26) 1348 1349 // Step 167: t26 = x^0x1eed5b76b77315c55824fc3c6ad19ea0 1350 for s := 0; s < 5; s++ { 1351 t26.Square(t26) 1352 } 1353 1354 // Step 168: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb9 1355 t26.Mul(t17, t26) 1356 1357 // Step 176: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb900 1358 for s := 0; s < 8; s++ { 1359 t26.Square(t26) 1360 } 1361 1362 // Step 177: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f 1363 t26.Mul(t9, t26) 1364 1365 // Step 186: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e00 1366 for s := 0; s < 9; s++ { 1367 t26.Square(t26) 1368 } 1369 1370 // Step 187: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e33 1371 t26.Mul(t4, t26) 1372 1373 // Step 194: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f1980 1374 for s := 0; s < 7; s++ { 1375 t26.Square(t26) 1376 } 1377 1378 // Step 195: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5 1379 t26.Mul(t14, t26) 1380 1381 // Step 201: t26 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc66940 1382 for s := 0; s < 6; s++ { 1383 t26.Square(t26) 1384 } 1385 1386 // Step 202: t26 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d 1387 t26.Mul(t11, t26) 1388 1389 // Step 205: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334be8 1390 for s := 0; s < 3; s++ { 1391 t26.Square(t26) 1392 } 1393 1394 // Step 206: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb 1395 t26.Mul(t1, t26) 1396 1397 // Step 214: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb00 1398 for s := 0; s < 8; s++ { 1399 t26.Square(t26) 1400 } 1401 1402 // Step 215: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b 1403 t26.Mul(t20, t26) 1404 1405 // Step 222: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f58580 1406 for s := 0; s < 7; s++ { 1407 t26.Square(t26) 1408 } 1409 1410 // Step 223: t25 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d 1411 t25.Mul(t25, t26) 1412 1413 // Step 232: t25 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a00 1414 for s := 0; s < 9; s++ { 1415 t25.Square(t25) 1416 } 1417 1418 // Step 233: t25 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27 1419 t25.Mul(t5, t25) 1420 1421 // Step 239: t25 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89c0 1422 for s := 0; s < 6; s++ { 1423 t25.Square(t25) 1424 } 1425 1426 // Step 240: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fb 1427 t24.Mul(t24, t25) 1428 1429 // Step 244: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fb0 1430 for s := 0; s < 4; s++ { 1431 t24.Square(t24) 1432 } 1433 1434 // Step 245: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf 1435 t24.Mul(t12, t24) 1436 1437 // Step 253: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf00 1438 for s := 0; s < 8; s++ { 1439 t24.Square(t24) 1440 } 1441 1442 // Step 254: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23 1443 t24.Mul(t13, t24) 1444 1445 // Step 261: t24 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf9180 1446 for s := 0; s < 7; s++ { 1447 t24.Square(t24) 1448 } 1449 1450 // Step 262: t24 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf9191 1451 t24.Mul(t23, t24) 1452 1453 // Step 269: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c880 1454 for s := 0; s < 7; s++ { 1455 t24.Square(t24) 1456 } 1457 1458 // Step 270: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c885 1459 t24.Mul(t7, t24) 1460 1461 // Step 278: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88500 1462 for s := 0; s < 8; s++ { 1463 t24.Square(t24) 1464 } 1465 1466 // Step 279: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515 1467 t24.Mul(t15, t24) 1468 1469 // Step 285: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf232214540 1470 for s := 0; s < 6; s++ { 1471 t24.Square(t24) 1472 } 1473 1474 // Step 286: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf232214551 1475 t23.Mul(t23, t24) 1476 1477 // Step 293: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a880 1478 for s := 0; s < 7; s++ { 1479 t23.Square(t23) 1480 } 1481 1482 // Step 294: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1 1483 t23.Mul(t3, t23) 1484 1485 // Step 298: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b10 1486 for s := 0; s < 4; s++ { 1487 t23.Square(t23) 1488 } 1489 1490 // Step 299: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d 1491 t23.Mul(z, t23) 1492 1493 // Step 306: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e80 1494 for s := 0; s < 7; s++ { 1495 t23.Square(t23) 1496 } 1497 1498 // Step 307: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b 1499 t23.Mul(t18, t23) 1500 1501 // Step 315: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b00 1502 for s := 0; s < 8; s++ { 1503 t23.Square(t23) 1504 } 1505 1506 // Step 316: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b33 1507 t23.Mul(t4, t23) 1508 1509 // Step 325: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366600 1510 for s := 0; s < 9; s++ { 1511 t23.Square(t23) 1512 } 1513 1514 // Step 326: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635 1515 t23.Mul(t16, t23) 1516 1517 // Step 333: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331a80 1518 for s := 0; s < 7; s++ { 1519 t23.Square(t23) 1520 } 1521 1522 // Step 334: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9 1523 t23.Mul(t22, t23) 1524 1525 // Step 340: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae40 1526 for s := 0; s < 6; s++ { 1527 t23.Square(t23) 1528 } 1529 1530 // Step 341: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73 1531 t23.Mul(t4, t23) 1532 1533 // Step 347: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cc0 1534 for s := 0; s < 6; s++ { 1535 t23.Square(t23) 1536 } 1537 1538 // Step 348: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf1 1539 t23.Mul(t3, t23) 1540 1541 // Step 357: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e200 1542 for s := 0; s < 9; s++ { 1543 t23.Square(t23) 1544 } 1545 1546 // Step 358: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215 1547 t23.Mul(t15, t23) 1548 1549 // Step 366: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e21500 1550 for s := 0; s < 8; s++ { 1551 t23.Square(t23) 1552 } 1553 1554 // Step 367: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e21523 1555 t23.Mul(t13, t23) 1556 1557 // Step 373: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548c0 1558 for s := 0; s < 6; s++ { 1559 t23.Square(t23) 1560 } 1561 1562 // Step 374: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db 1563 t23.Mul(t18, t23) 1564 1565 // Step 382: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db00 1566 for s := 0; s < 8; s++ { 1567 t23.Square(t23) 1568 } 1569 1570 // Step 383: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d 1571 t23.Mul(t11, t23) 1572 1573 // Step 386: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9e8 1574 for s := 0; s < 3; s++ { 1575 t23.Square(t23) 1576 } 1577 1578 // Step 387: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb 1579 t23.Mul(t1, t23) 1580 1581 // Step 397: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac00 1582 for s := 0; s < 10; s++ { 1583 t23.Square(t23) 1584 } 1585 1586 // Step 398: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b 1587 t23.Mul(t20, t23) 1588 1589 // Step 401: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6058 1590 for s := 0; s < 3; s++ { 1591 t23.Square(t23) 1592 } 1593 1594 // Step 402: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059 1595 t23.Mul(&x, t23) 1596 1597 // Step 414: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059000 1598 for s := 0; s < 12; s++ { 1599 t23.Square(t23) 1600 } 1601 1602 // Step 415: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025 1603 t23.Mul(t14, t23) 1604 1605 // Step 421: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640940 1606 for s := 0; s < 6; s++ { 1607 t23.Square(t23) 1608 } 1609 1610 // Step 422: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975 1611 t23.Mul(t16, t23) 1612 1613 // Step 434: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975000 1614 for s := 0; s < 12; s++ { 1615 t23.Square(t23) 1616 } 1617 1618 // Step 435: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027 1619 t23.Mul(t5, t23) 1620 1621 // Step 441: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409c0 1622 for s := 0; s < 6; s++ { 1623 t23.Square(t23) 1624 } 1625 1626 // Step 442: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f5 1627 t23.Mul(t16, t23) 1628 1629 // Step 448: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d40 1630 for s := 0; s < 6; s++ { 1631 t23.Square(t23) 1632 } 1633 1634 // Step 449: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55 1635 t23.Mul(t15, t23) 1636 1637 // Step 460: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa800 1638 for s := 0; s < 11; s++ { 1639 t23.Square(t23) 1640 } 1641 1642 // Step 461: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829 1643 t23.Mul(t6, t23) 1644 1645 // Step 466: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d550520 1646 for s := 0; s < 5; s++ { 1647 t23.Square(t23) 1648 } 1649 1650 // Step 467: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f 1651 t23.Mul(t2, t23) 1652 1653 // Step 472: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7e0 1654 for s := 0; s < 5; s++ { 1655 t23.Square(t23) 1656 } 1657 1658 // Step 473: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb 1659 t23.Mul(t20, t23) 1660 1661 // Step 482: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd600 1662 for s := 0; s < 9; s++ { 1663 t23.Square(t23) 1664 } 1665 1666 // Step 483: t22 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd639 1667 t22.Mul(t22, t23) 1668 1669 // Step 490: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1c80 1670 for s := 0; s < 7; s++ { 1671 t22.Square(t22) 1672 } 1673 1674 // Step 491: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3 1675 t22.Mul(t4, t22) 1676 1677 // Step 495: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb30 1678 for s := 0; s < 4; s++ { 1679 t22.Square(t22) 1680 } 1681 1682 // Step 496: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d 1683 t22.Mul(z, t22) 1684 1685 // Step 507: t22 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e800 1686 for s := 0; s < 11; s++ { 1687 t22.Square(t22) 1688 } 1689 1690 // Step 508: t22 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e837 1691 t22.Mul(t21, t22) 1692 1693 // Step 515: t22 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b80 1694 for s := 0; s < 7; s++ { 1695 t22.Square(t22) 1696 } 1697 1698 // Step 516: t22 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b99 1699 t22.Mul(t17, t22) 1700 1701 // Step 525: t22 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373200 1702 for s := 0; s < 9; s++ { 1703 t22.Square(t22) 1704 } 1705 1706 // Step 526: t21 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237 1707 t21.Mul(t21, t22) 1708 1709 // Step 535: t21 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e00 1710 for s := 0; s < 9; s++ { 1711 t21.Square(t21) 1712 } 1713 1714 // Step 536: t21 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e29 1715 t21.Mul(t6, t21) 1716 1717 // Step 542: t21 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a40 1718 for s := 0; s < 6; s++ { 1719 t21.Square(t21) 1720 } 1721 1722 // Step 543: t20 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b 1723 t20.Mul(t20, t21) 1724 1725 // Step 549: t20 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292c0 1726 for s := 0; s < 6; s++ { 1727 t20.Square(t20) 1728 } 1729 1730 // Step 550: t20 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd 1731 t20.Mul(z, t20) 1732 1733 // Step 559: t20 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a00 1734 for s := 0; s < 9; s++ { 1735 t20.Square(t20) 1736 } 1737 1738 // Step 560: t19 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2b 1739 t19.Mul(t19, t20) 1740 1741 // Step 565: t19 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b34560 1742 for s := 0; s < 5; s++ { 1743 t19.Square(t19) 1744 } 1745 1746 // Step 566: t19 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b 1747 t19.Mul(t18, t19) 1748 1749 // Step 572: t19 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15ec0 1750 for s := 0; s < 6; s++ { 1751 t19.Square(t19) 1752 } 1753 1754 // Step 573: t18 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb 1755 t18.Mul(t18, t19) 1756 1757 // Step 579: t18 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6c0 1758 for s := 0; s < 6; s++ { 1759 t18.Square(t18) 1760 } 1761 1762 // Step 580: t17 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d9 1763 t17.Mul(t17, t18) 1764 1765 // Step 589: t17 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db200 1766 for s := 0; s < 9; s++ { 1767 t17.Square(t17) 1768 } 1769 1770 // Step 590: t16 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db235 1771 t16.Mul(t16, t17) 1772 1773 // Step 597: t16 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a80 1774 for s := 0; s < 7; s++ { 1775 t16.Square(t16) 1776 } 1777 1778 // Step 598: t16 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a95 1779 t16.Mul(t15, t16) 1780 1781 // Step 604: t16 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a540 1782 for s := 0; s < 6; s++ { 1783 t16.Square(t16) 1784 } 1785 1786 // Step 605: t16 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a543 1787 t16.Mul(t1, t16) 1788 1789 // Step 616: t16 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a1800 1790 for s := 0; s < 11; s++ { 1791 t16.Square(t16) 1792 } 1793 1794 // Step 617: t15 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a1815 1795 t15.Mul(t15, t16) 1796 1797 // Step 621: t15 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a18150 1798 for s := 0; s < 4; s++ { 1799 t15.Square(t15) 1800 } 1801 1802 // Step 622: t15 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a18155 1803 t15.Mul(t7, t15) 1804 1805 // Step 629: t15 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa80 1806 for s := 0; s < 7; s++ { 1807 t15.Square(t15) 1808 } 1809 1810 // Step 630: t15 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f 1811 t15.Mul(t12, t15) 1812 1813 // Step 640: t15 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c00 1814 for s := 0; s < 10; s++ { 1815 t15.Square(t15) 1816 } 1817 1818 // Step 641: t14 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c25 1819 t14.Mul(t14, t15) 1820 1821 // Step 647: t14 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f0940 1822 for s := 0; s < 6; s++ { 1823 t14.Square(t14) 1824 } 1825 1826 // Step 648: t13 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f0963 1827 t13.Mul(t13, t14) 1828 1829 // Step 653: t13 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c60 1830 for s := 0; s < 5; s++ { 1831 t13.Square(t13) 1832 } 1833 1834 // Step 654: t12 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f 1835 t12.Mul(t12, t13) 1836 1837 // Step 661: t12 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f0963780 1838 for s := 0; s < 7; s++ { 1839 t12.Square(t12) 1840 } 1841 1842 // Step 662: t12 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f 1843 t12.Mul(t2, t12) 1844 1845 // Step 669: t12 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcf80 1846 for s := 0; s < 7; s++ { 1847 t12.Square(t12) 1848 } 1849 1850 // Step 670: t11 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbd 1851 t11.Mul(t11, t12) 1852 1853 // Step 673: t11 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7de8 1854 for s := 0; s < 3; s++ { 1855 t11.Square(t11) 1856 } 1857 1858 // Step 674: t11 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded 1859 t11.Mul(t7, t11) 1860 1861 // Step 684: t11 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b400 1862 for s := 0; s < 10; s++ { 1863 t11.Square(t11) 1864 } 1865 1866 // Step 685: t10 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42d 1867 t10.Mul(t10, t11) 1868 1869 // Step 688: t10 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda168 1870 for s := 0; s < 3; s++ { 1871 t10.Square(t10) 1872 } 1873 1874 // Step 689: t10 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d 1875 t10.Mul(t7, t10) 1876 1877 // Step 699: t10 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b400 1878 for s := 0; s < 10; s++ { 1879 t10.Square(t10) 1880 } 1881 1882 // Step 700: t9 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f 1883 t9.Mul(t9, t10) 1884 1885 // Step 707: t9 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da1780 1886 for s := 0; s < 7; s++ { 1887 t9.Square(t9) 1888 } 1889 1890 // Step 708: t8 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1 1891 t8.Mul(t8, t9) 1892 1893 // Step 711: t8 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd08 1894 for s := 0; s < 3; s++ { 1895 t8.Square(t8) 1896 } 1897 1898 // Step 712: t7 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d 1899 t7.Mul(t7, t8) 1900 1901 // Step 722: t7 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43400 1902 for s := 0; s < 10; s++ { 1903 t7.Square(t7) 1904 } 1905 1906 // Step 723: t6 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429 1907 t6.Mul(t6, t7) 1908 1909 // Step 731: t6 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f4342900 1910 for s := 0; s < 8; s++ { 1911 t6.Square(t6) 1912 } 1913 1914 // Step 732: t5 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f4342927 1915 t5.Mul(t5, t6) 1916 1917 // Step 735: t5 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a14938 1918 for s := 0; s < 3; s++ { 1919 t5.Square(t5) 1920 } 1921 1922 // Step 736: t5 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b 1923 t5.Mul(t1, t5) 1924 1925 // Step 750: t5 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec000 1926 for s := 0; s < 14; s++ { 1927 t5.Square(t5) 1928 } 1929 1930 // Step 751: t4 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec033 1931 t4.Mul(t4, t5) 1932 1933 // Step 757: t4 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b00cc0 1934 for s := 0; s < 6; s++ { 1935 t4.Square(t4) 1936 } 1937 1938 // Step 758: t3 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b00cf1 1939 t3.Mul(t3, t4) 1940 1941 // Step 763: t3 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e20 1942 for s := 0; s < 5; s++ { 1943 t3.Square(t3) 1944 } 1945 1946 // Step 764: t2 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f 1947 t2.Mul(t2, t3) 1948 1949 // Step 768: t2 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f0 1950 for s := 0; s < 4; s++ { 1951 t2.Square(t2) 1952 } 1953 1954 // Step 769: t1 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f3 1955 t1.Mul(t1, t2) 1956 1957 // Step 778: t1 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec033c7e600 1958 for s := 0; s < 9; s++ { 1959 t1.Square(t1) 1960 } 1961 1962 // Step 779: t0 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec033c7e63f 1963 t0.Mul(t0, t1) 1964 1965 // Step 780: t0 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7e 1966 t0.Square(t0) 1967 1968 // Step 781: t0 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f 1969 t0.Mul(&x, t0) 1970 1971 // Step 789: t0 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f00 1972 for s := 0; s < 8; s++ { 1973 t0.Square(t0) 1974 } 1975 1976 // Step 790: z = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f0d 1977 z.Mul(z, t0) 1978 1979 // Step 795: z = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b00cf1f98fe1a0 1980 for s := 0; s < 5; s++ { 1981 z.Square(z) 1982 } 1983 1984 // Step 796: z = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b00cf1f98fe1a1 1985 z.Mul(&x, z) 1986 1987 // Step 877: z = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f31fc34200000000000000000000 1988 for s := 0; s < 81; s++ { 1989 z.Square(z) 1990 } 1991 1992 return z 1993 }