Contract 0x88f975D5A1153Ea92AF66e7c4292576a329c04B6 1

 
 
Txn Hash
Method
Block
From
To
Value
0xa82cca755486cd8568235fd6421dcff4156582ce5ff18abfdc28fcbd2f5b906f0x60806040112453902020-11-12 22:00:30685 days 20 hrs ago0xaf2f58269304ff2647dc2cd0e6c5252287ab2540 IN  Create: Ed255190 Ether0.066031919.00000258
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Ed25519

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2022-04-07
*/

pragma solidity ^0.6;


// https://gist.github.com/abacabadabacaba/cb927b5ebe6db63f00b98902503ffc76
// https://gist.github.com/abacabadabacaba/9c395588c455ca1f7dccfa853d8fd56d
// https://play.golang.org/p/obqA-XDYzdm
contract Ed25519 {
    // Computes (v^(2^250-1), v^11) mod p
    function pow22501(uint256 v) private pure returns (uint256 p22501, uint256 p11) {
        p11 = mulmod(v, v, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        p22501 = mulmod(p11, p11, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        p22501 = mulmod(mulmod(p22501, p22501, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed), v, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        p11 = mulmod(p22501, p11, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        p22501 = mulmod(mulmod(p11, p11, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed), p22501, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        uint256 a = mulmod(p22501, p22501, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        p22501 = mulmod(p22501, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(p22501, p22501, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(p22501, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        uint256 b = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        p22501 = mulmod(p22501, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(p22501, p22501, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(p22501, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        b = mulmod(b, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, b, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        a = mulmod(a, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        p22501 = mulmod(p22501, a, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
    }

    function check(bytes32 k, bytes32 r, bytes32 s, bytes32 m1, bytes9 m2) public pure returns (bool) {
        uint256 hh;
        // Step 1: compute SHA-512(R, A, M)
        {
            uint256[5][16] memory kk = [[uint256(0x428a2f98_d728ae22), uint256(0xe49b69c1_9ef14ad2), uint256(0x27b70a85_46d22ffc), uint256(0x19a4c116_b8d2d0c8), uint256(0xca273ece_ea26619c)], [uint256(0x71374491_23ef65cd), uint256(0xefbe4786_384f25e3), uint256(0x2e1b2138_5c26c926), uint256(0x1e376c08_5141ab53), uint256(0xd186b8c7_21c0c207)], [uint256(0xb5c0fbcf_ec4d3b2f), uint256(0xfc19dc6_8b8cd5b5), uint256(0x4d2c6dfc_5ac42aed), uint256(0x2748774c_df8eeb99), uint256(0xeada7dd6_cde0eb1e)], [uint256(0xe9b5dba5_8189dbbc), uint256(0x240ca1cc_77ac9c65), uint256(0x53380d13_9d95b3df), uint256(0x34b0bcb5_e19b48a8), uint256(0xf57d4f7f_ee6ed178)], [uint256(0x3956c25b_f348b538), uint256(0x2de92c6f_592b0275), uint256(0x650a7354_8baf63de), uint256(0x391c0cb3_c5c95a63), uint256(0x6f067aa_72176fba)], [uint256(0x59f111f1_b605d019), uint256(0x4a7484aa_6ea6e483), uint256(0x766a0abb_3c77b2a8), uint256(0x4ed8aa4a_e3418acb), uint256(0xa637dc5_a2c898a6)], [uint256(0x923f82a4_af194f9b), uint256(0x5cb0a9dc_bd41fbd4), uint256(0x81c2c92e_47edaee6), uint256(0x5b9cca4f_7763e373), uint256(0x113f9804_bef90dae)], [uint256(0xab1c5ed5_da6d8118), uint256(0x76f988da_831153b5), uint256(0x92722c85_1482353b), uint256(0x682e6ff3_d6b2b8a3), uint256(0x1b710b35_131c471b)], [uint256(0xd807aa98_a3030242), uint256(0x983e5152_ee66dfab), uint256(0xa2bfe8a1_4cf10364), uint256(0x748f82ee_5defb2fc), uint256(0x28db77f5_23047d84)], [uint256(0x12835b01_45706fbe), uint256(0xa831c66d_2db43210), uint256(0xa81a664b_bc423001), uint256(0x78a5636f_43172f60), uint256(0x32caab7b_40c72493)], [uint256(0x243185be_4ee4b28c), uint256(0xb00327c8_98fb213f), uint256(0xc24b8b70_d0f89791), uint256(0x84c87814_a1f0ab72), uint256(0x3c9ebe0a_15c9bebc)], [uint256(0x550c7dc3_d5ffb4e2), uint256(0xbf597fc7_beef0ee4), uint256(0xc76c51a3_0654be30), uint256(0x8cc70208_1a6439ec), uint256(0x431d67c4_9c100d4c)], [uint256(0x72be5d74_f27b896f), uint256(0xc6e00bf3_3da88fc2), uint256(0xd192e819_d6ef5218), uint256(0x90befffa_23631e28), uint256(0x4cc5d4be_cb3e42b6)], [uint256(0x80deb1fe_3b1696b1), uint256(0xd5a79147_930aa725), uint256(0xd6990624_5565a910), uint256(0xa4506ceb_de82bde9), uint256(0x597f299c_fc657e2a)], [uint256(0x9bdc06a7_25c71235), uint256(0x6ca6351_e003826f), uint256(0xf40e3585_5771202a), uint256(0xbef9a3f7_b2c67915), uint256(0x5fcb6fab_3ad6faec)], [uint256(0xc19bf174_cf692694), uint256(0x14292967_0a0e6e70), uint256(0x106aa070_32bbd1b8), uint256(0xc67178f2_e372532b), uint256(0x6c44198c_4a475817)]];
            uint256 w0 = (uint256(r) & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000_ffffffff_ffffffff) | ((uint256(r) & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000) >> 64) | ((uint256(r) & 0xffffffff_ffffffff_00000000_00000000) << 64);
            uint256 w1 = (uint256(k) & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000_ffffffff_ffffffff) | ((uint256(k) & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000) >> 64) | ((uint256(k) & 0xffffffff_ffffffff_00000000_00000000) << 64);
            uint256 w2 = (uint256(m1) & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000_ffffffff_ffffffff) | ((uint256(m1) & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000) >> 64) | ((uint256(m1) & 0xffffffff_ffffffff_00000000_00000000) << 64);
            uint256 w3 = (uint256(bytes32(m2)) & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000_00000000_00000000) | ((uint256(bytes32(m2)) & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000) >> 64) | 0x800000_00000000_00000000_00000348;
            uint256 a = 0x6a09e667_f3bcc908;
            uint256 b = 0xbb67ae85_84caa73b;
            uint256 c = 0x3c6ef372_fe94f82b;
            uint256 d = 0xa54ff53a_5f1d36f1;
            uint256 e = 0x510e527f_ade682d1;
            uint256 f = 0x9b05688c_2b3e6c1f;
            uint256 g = 0x1f83d9ab_fb41bd6b;
            uint256 h = 0x5be0cd19_137e2179;
            for (uint256 i = 0;; i++) {
                // Round 16 * i
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[0][i];
                    temp1 += w0 >> 192;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 1
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[1][i];
                    temp1 += w0 >> 64;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 2
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[2][i];
                    temp1 += w0 >> 128;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 3
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[3][i];
                    temp1 += w0;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 4
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[4][i];
                    temp1 += w1 >> 192;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 5
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[5][i];
                    temp1 += w1 >> 64;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 6
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[6][i];
                    temp1 += w1 >> 128;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 7
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[7][i];
                    temp1 += w1;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 8
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[8][i];
                    temp1 += w2 >> 192;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 9
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[9][i];
                    temp1 += w2 >> 64;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 10
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[10][i];
                    temp1 += w2 >> 128;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 11
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[11][i];
                    temp1 += w2;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 12
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[12][i];
                    temp1 += w3 >> 192;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 13
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[13][i];
                    temp1 += w3 >> 64;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 14
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[14][i];
                    temp1 += w3 >> 128;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                // Round 16 * i + 15
                {
                    uint256 temp1;
                    uint256 temp2;
                    e &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = e | (e << 64);
                        uint256 s1 = (ss >> 14) ^ (ss >> 18) ^ (ss >> 41);
                        uint256 ch = (e & (f ^ g)) ^ g;
                        temp1 = h + s1 + ch;
                    }
                    temp1 += kk[15][i];
                    temp1 += w3;
                    a &= 0xffffffff_ffffffff;
                    {
                        uint256 ss = a | (a << 64);
                        uint256 s0 = (ss >> 28) ^ (ss >> 34) ^ (ss >> 39);
                        uint256 maj = (a & (b | c)) | (b & c);
                        temp2 = s0 + maj;
                    }
                    h = g;
                    g = f;
                    f = e;
                    e = d + temp1;
                    d = c;
                    c = b;
                    b = a;
                    a = temp1 + temp2;
                }
                if (i == 4) {
                    break;
                }
                // Message expansion
                uint256 t0 = w0;
                uint256 t1 = w1;
                {
                    uint256 t2 = w2;
                    uint256 t3 = w3;
                    {
                        uint256 n1 = t0 & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        n1 += ((t2 & 0xffffffff_ffffffff_00000000_00000000) << 128) | ((t2 & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000) >> 64);
                        {
                            uint256 u1 = ((t0 & 0xffffffff_ffffffff_00000000_00000000) << 64) | ((t0 & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000) >> 128);
                            uint256 uu1 = u1 | (u1 << 64);
                            n1 += ((uu1 << 63) ^ (uu1 << 56) ^ (u1 << 57)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        }
                        {
                            uint256 v1 = t3 & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                            uint256 vv1 = v1 | (v1 << 64);
                            n1 += ((vv1 << 45) ^ (vv1 << 3) ^ (v1 << 58)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        }
                        n1 &= 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        uint256 n2 = t0 & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        n2 += ((t2 & 0xffffffff_ffffffff) << 128) | (t3 >> 192);
                        {
                            uint256 u2 = ((t0 & 0xffffffff_ffffffff) << 128) | (t1 >> 192);
                            uint256 uu2 = u2 | (u2 << 64);
                            n2 += ((uu2 >> 1) ^ (uu2 >> 8) ^ (u2 >> 7)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        }
                        {
                            uint256 vv2 = n1 | (n1 >> 64);
                            n2 += ((vv2 >> 19) ^ (vv2 >> 61) ^ (n1 >> 70)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        }
                        n2 &= 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        t0 = n1 | n2;
                    }
                    {
                        uint256 n1 = t1 & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        n1 += ((t3 & 0xffffffff_ffffffff_00000000_00000000) << 128) | ((t3 & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000) >> 64);
                        {
                            uint256 u1 = ((t1 & 0xffffffff_ffffffff_00000000_00000000) << 64) | ((t1 & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000) >> 128);
                            uint256 uu1 = u1 | (u1 << 64);
                            n1 += ((uu1 << 63) ^ (uu1 << 56) ^ (u1 << 57)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        }
                        {
                            uint256 v1 = t0 & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                            uint256 vv1 = v1 | (v1 << 64);
                            n1 += ((vv1 << 45) ^ (vv1 << 3) ^ (v1 << 58)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        }
                        n1 &= 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        uint256 n2 = t1 & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        n2 += ((t3 & 0xffffffff_ffffffff) << 128) | (t0 >> 192);
                        {
                            uint256 u2 = ((t1 & 0xffffffff_ffffffff) << 128) | (t2 >> 192);
                            uint256 uu2 = u2 | (u2 << 64);
                            n2 += ((uu2 >> 1) ^ (uu2 >> 8) ^ (u2 >> 7)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        }
                        {
                            uint256 vv2 = n1 | (n1 >> 64);
                            n2 += ((vv2 >> 19) ^ (vv2 >> 61) ^ (n1 >> 70)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        }
                        n2 &= 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        t1 = n1 | n2;
                    }
                    {
                        uint256 n1 = t2 & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        n1 += ((t0 & 0xffffffff_ffffffff_00000000_00000000) << 128) | ((t0 & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000) >> 64);
                        {
                            uint256 u1 = ((t2 & 0xffffffff_ffffffff_00000000_00000000) << 64) | ((t2 & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000) >> 128);
                            uint256 uu1 = u1 | (u1 << 64);
                            n1 += ((uu1 << 63) ^ (uu1 << 56) ^ (u1 << 57)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        }
                        {
                            uint256 v1 = t1 & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                            uint256 vv1 = v1 | (v1 << 64);
                            n1 += ((vv1 << 45) ^ (vv1 << 3) ^ (v1 << 58)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        }
                        n1 &= 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        uint256 n2 = t2 & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        n2 += ((t0 & 0xffffffff_ffffffff) << 128) | (t1 >> 192);
                        {
                            uint256 u2 = ((t2 & 0xffffffff_ffffffff) << 128) | (t3 >> 192);
                            uint256 uu2 = u2 | (u2 << 64);
                            n2 += ((uu2 >> 1) ^ (uu2 >> 8) ^ (u2 >> 7)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        }
                        {
                            uint256 vv2 = n1 | (n1 >> 64);
                            n2 += ((vv2 >> 19) ^ (vv2 >> 61) ^ (n1 >> 70)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        }
                        n2 &= 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        t2 = n1 | n2;
                    }
                    {
                        uint256 n1 = t3 & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        n1 += ((t1 & 0xffffffff_ffffffff_00000000_00000000) << 128) | ((t1 & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000) >> 64);
                        {
                            uint256 u1 = ((t3 & 0xffffffff_ffffffff_00000000_00000000) << 64) | ((t3 & 0xffffffff_ffffffff_00000000_00000000_00000000_00000000) >> 128);
                            uint256 uu1 = u1 | (u1 << 64);
                            n1 += ((uu1 << 63) ^ (uu1 << 56) ^ (u1 << 57)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        }
                        {
                            uint256 v1 = t2 & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                            uint256 vv1 = v1 | (v1 << 64);
                            n1 += ((vv1 << 45) ^ (vv1 << 3) ^ (v1 << 58)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        }
                        n1 &= 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000;
                        uint256 n2 = t3 & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        n2 += ((t1 & 0xffffffff_ffffffff) << 128) | (t2 >> 192);
                        {
                            uint256 u2 = ((t3 & 0xffffffff_ffffffff) << 128) | (t0 >> 192);
                            uint256 uu2 = u2 | (u2 << 64);
                            n2 += ((uu2 >> 1) ^ (uu2 >> 8) ^ (u2 >> 7)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        }
                        {
                            uint256 vv2 = n1 | (n1 >> 64);
                            n2 += ((vv2 >> 19) ^ (vv2 >> 61) ^ (n1 >> 70)) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        }
                        n2 &= 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff;
                        t3 = n1 | n2;
                    }
                    w3 = t3;
                    w2 = t2;
                }
                w1 = t1;
                w0 = t0;
            }
            uint256 h0 = ((a + 0x6a09e667_f3bcc908) & 0xffffffff_ffffffff) | (((b + 0xbb67ae85_84caa73b) & 0xffffffff_ffffffff) << 64) | (((c + 0x3c6ef372_fe94f82b) & 0xffffffff_ffffffff) << 128) | ((d + 0xa54ff53a_5f1d36f1) << 192);
            h0 = ((h0 & 0xff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff) << 8) | ((h0 & 0xff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00) >> 8);
            h0 = ((h0 & 0xffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff) << 16) | ((h0 & 0xffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000) >> 16);
            h0 = ((h0 & 0xffffffff_00000000_ffffffff_00000000_ffffffff_00000000_ffffffff) << 32) | ((h0 & 0xffffffff_00000000_ffffffff_00000000_ffffffff_00000000_ffffffff_00000000) >> 32);
            uint256 h1 = ((e + 0x510e527f_ade682d1) & 0xffffffff_ffffffff) | (((f + 0x9b05688c_2b3e6c1f) & 0xffffffff_ffffffff) << 64) | (((g + 0x1f83d9ab_fb41bd6b) & 0xffffffff_ffffffff) << 128) | ((h + 0x5be0cd19_137e2179) << 192);
            h1 = ((h1 & 0xff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff) << 8) | ((h1 & 0xff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00) >> 8);
            h1 = ((h1 & 0xffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff) << 16) | ((h1 & 0xffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000) >> 16);
            h1 = ((h1 & 0xffffffff_00000000_ffffffff_00000000_ffffffff_00000000_ffffffff) << 32) | ((h1 & 0xffffffff_00000000_ffffffff_00000000_ffffffff_00000000_ffffffff_00000000) >> 32);
            hh = addmod(h0, mulmod(h1, 0xfffffff_ffffffff_ffffffff_fffffffe_c6ef5bf4_737dcf70_d6ec3174_8d98951d, 0x10000000_00000000_00000000_00000000_14def9de_a2f79cd6_5812631a_5cf5d3ed), 0x10000000_00000000_00000000_00000000_14def9de_a2f79cd6_5812631a_5cf5d3ed);
        }
        // Step 2: unpack k
        k = bytes32(((uint256(k) & 0xff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff) << 8) | ((uint256(k) & 0xff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00) >> 8));
        k = bytes32(((uint256(k) & 0xffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff) << 16) | ((uint256(k) & 0xffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000) >> 16));
        k = bytes32(((uint256(k) & 0xffffffff_00000000_ffffffff_00000000_ffffffff_00000000_ffffffff) << 32) | ((uint256(k) & 0xffffffff_00000000_ffffffff_00000000_ffffffff_00000000_ffffffff_00000000) >> 32));
        k = bytes32(((uint256(k) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff) << 64) | ((uint256(k) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000) >> 64));
        k = bytes32((uint256(k) << 128) | (uint256(k) >> 128));
        uint256 ky = uint256(k) & 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff;
        uint256 kx;
        {
            uint256 ky2 = mulmod(ky, ky, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            uint256 u = addmod(ky2, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffec, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            uint256 v = mulmod(ky2, 0x52036cee_2b6ffe73_8cc74079_7779e898_00700a4d_4141d8ab_75eb4dca_135978a3, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed) + 1;
            uint256 t = mulmod(u, v, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            (kx, ) = pow22501(t);
            kx = mulmod(kx, kx, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            kx = mulmod(u, mulmod(mulmod(kx, kx, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed), t, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed), 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            t = mulmod(mulmod(kx, kx, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed), v, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            if (t != u) {
                if (t != 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed - u) {
                    return false;
                }
                kx = mulmod(kx, 0x2b832480_4fc1df0b_2b4d0099_3dfbd7a7_2f431806_ad2fe478_c4ee1b27_4a0ea0b0, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            }
        }
        if ((kx & 1) != uint256(k) >> 255) {
            kx = 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed - kx;
        }
        // Verify s
        s = bytes32(((uint256(s) & 0xff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff) << 8) | ((uint256(s) & 0xff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00) >> 8));
        s = bytes32(((uint256(s) & 0xffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff) << 16) | ((uint256(s) & 0xffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000) >> 16));
        s = bytes32(((uint256(s) & 0xffffffff_00000000_ffffffff_00000000_ffffffff_00000000_ffffffff) << 32) | ((uint256(s) & 0xffffffff_00000000_ffffffff_00000000_ffffffff_00000000_ffffffff_00000000) >> 32));
        s = bytes32(((uint256(s) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff) << 64) | ((uint256(s) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000) >> 64));
        s = bytes32((uint256(s) << 128) | (uint256(s) >> 128));
        if (uint256(s) >= 0x10000000_00000000_00000000_00000000_14def9de_a2f79cd6_5812631a_5cf5d3ed) {
            return false;
        }
        uint256 vx;
        uint256 vu;
        uint256 vy;
        uint256 vv;
        // Step 3: compute multiples of k
        uint256[8][3][2] memory tables;
        {
            uint256 ks = ky + kx;
            uint256 kd = ky + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed - kx;
            uint256 k2dt = mulmod(mulmod(kx, ky, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed), 0x2406d9dc_56dffce7_198e80f2_eef3d130_00e0149a_8283b156_ebd69b94_26b2f159, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            uint256 kky = ky;
            uint256 kkx = kx;
            uint256 kku = 1;
            uint256 kkv = 1;
            {
                uint256 xx = mulmod(kkx, kkv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 yy = mulmod(kky, kku, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 zz = mulmod(kku, kkv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 xx2 = mulmod(xx, xx, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 yy2 = mulmod(yy, yy, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 xxyy = mulmod(xx, yy, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 zz2 = mulmod(zz, zz, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                kkx = xxyy + xxyy;
                kku = yy2 - xx2 + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                kky = xx2 + yy2;
                kkv = addmod(zz2 + zz2, 0xffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffda - kku, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            }
            {
                uint256 xx = mulmod(kkx, kkv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 yy = mulmod(kky, kku, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 zz = mulmod(kku, kkv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 xx2 = mulmod(xx, xx, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 yy2 = mulmod(yy, yy, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 xxyy = mulmod(xx, yy, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 zz2 = mulmod(zz, zz, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                kkx = xxyy + xxyy;
                kku = yy2 - xx2 + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                kky = xx2 + yy2;
                kkv = addmod(zz2 + zz2, 0xffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffda - kku, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            }
            {
                uint256 xx = mulmod(kkx, kkv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 yy = mulmod(kky, kku, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 zz = mulmod(kku, kkv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 xx2 = mulmod(xx, xx, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 yy2 = mulmod(yy, yy, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 xxyy = mulmod(xx, yy, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 zz2 = mulmod(zz, zz, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                kkx = xxyy + xxyy;
                kku = yy2 - xx2 + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                kky = xx2 + yy2;
                kkv = addmod(zz2 + zz2, 0xffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffda - kku, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            }
            uint256 cprod = 1;
            uint256[8][3][2] memory tables_ = tables;
            for (uint256 i = 0;; i++) {
                uint256 cs;
                uint256 cd;
                uint256 ct;
                uint256 c2z;
                {
                    uint256 cx = mulmod(kkx, kkv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 cy = mulmod(kky, kku, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 cz = mulmod(kku, kkv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    ct = mulmod(kkx, kky, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    cs = cy + cx;
                    cd = cy - cx + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                    c2z = cz + cz;
                }
                tables_[1][0][i] = cs;
                tables_[1][1][i] = cd;
                tables_[1][2][i] = mulmod(ct, 0x2406d9dc_56dffce7_198e80f2_eef3d130_00e0149a_8283b156_ebd69b94_26b2f159, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                tables_[0][0][i] = c2z;
                tables_[0][1][i] = cprod;
                cprod = mulmod(cprod, c2z, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                if (i == 7) {
                    break;
                }
                uint256 ab = mulmod(cs, ks, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 aa = mulmod(cd, kd, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                uint256 ac = mulmod(ct, k2dt, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                kkx = ab - aa + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                kku = addmod(c2z, ac, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                kky = ab + aa;
                kkv = addmod(c2z, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed - ac, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            }
            uint256 t;
            (cprod, t) = pow22501(cprod);
        cprod = mulmod(cprod, cprod, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        cprod = mulmod(cprod, cprod, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        cprod = mulmod(cprod, cprod, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        cprod = mulmod(cprod, cprod, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        cprod = mulmod(cprod, cprod, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            cprod = mulmod(cprod, t, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            for (uint256 i = 7;; i--) {
                uint256 cinv = mulmod(cprod, tables_[0][1][i], 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                tables_[1][0][i] = mulmod(tables_[1][0][i], cinv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                tables_[1][1][i] = mulmod(tables_[1][1][i], cinv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                tables_[1][2][i] = mulmod(tables_[1][2][i], cinv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                if (i == 0) {
                    break;
                }
                cprod = mulmod(cprod, tables_[0][0][i], 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
            }
            tables_[0] = [[0x43e7ce9d_19ea5d32_9385a44c_321ea161_67c996e3_7dc6070c_97de49e3_7ac61db9, 0x40cff344_25d8ec30_a3bb74ba_58cd5854_fa1e3818_6ad0d31e_bc8ae251_ceb2c97e, 0x459bd270_46e8dd45_aea7008d_b87a5a8f_79067792_53d64523_58951859_9fdfbf4b, 0x69fdd1e2_8c23cc38_94d0c8ff_90e76f6d_5b6e4c2e_620136d0_4dd83c4a_51581ab9, 0x54dceb34_13ce5cfa_11196dfc_960b6eda_f4b380c6_d4d23784_19cc0279_ba49c5f3, 0x4e24184d_d71a3d77_eef3729f_7f8cf7c1_7224cf40_aa7b9548_b9942f3c_5084ceed, 0x5a0e5aab_20262674_ae117576_1cbf5e88_9b52a55f_d7ac5027_c228cebd_c8d2360a, 0x26239334_073e9b38_c6285955_6d451c3d_cc8d30e8_4b361174_f488eadd_e2cf17d9], [0x227e97c9_4c7c0933_d2e0c21a_3447c504_fe9ccf82_e8a05f59_ce881c82_eba0489f, 0x226a3e0e_cc4afec6_fd0d2884_13014a9d_bddecf06_c1a2f0bb_702ba77c_613d8209, 0x34d7efc8_51d45c5e_71efeb0f_235b7946_91de6228_877569b3_a8d52bf0_58b8a4a0, 0x3c1f5fb3_ca7166fc_e1471c9b_752b6d28_c56301ad_7b65e845_1b2c8c55_26726e12, 0x6102416c_f02f02ff_5be75275_f55f28db_89b2a9d2_456b860c_e22fc0e5_031f7cc5, 0x40adf677_f1bfdae0_57f0fd17_9c126179_18ddaa28_91a6530f_b1a4294f_a8665490, 0x61936f3c_41560904_6187b8ba_a978cbc9_b4789336_3ae5a3cc_7d909f36_35ae7f48, 0x562a9662_b6ec47f9_e979d473_c02b51e4_42336823_8c58ddb5_2f0e5c6a_180e6410], [0x3788bdb4_4f8632d4_2d0dbee5_eea1acc6_136cf411_e655624f_55e48902_c3bd5534, 0x6190cf2c_2a7b5ad7_69d594a8_2844f23b_4167fa7c_8ac30e51_aa6cfbeb_dcd4b945, 0x65f77870_96be9204_123a71f3_ac88a87b_e1513217_737d6a1e_2f3a13a4_3d7e3a9a, 0x23af32d_bfa67975_536479a7_a7ce74a0_2142147f_ac048018_7f1f1334_9cda1f2d, 0x64fc44b7_fc6841bd_db0ced8b_8b0fe675_9137ef87_ee966512_15fc1dbc_d25c64dc, 0x1434aa37_48b701d5_b69df3d7_d340c1fe_3f6b9c1e_fc617484_caadb47e_382f4475, 0x457a6da8_c962ef35_f2b21742_3e5844e9_d2353452_7e8ea429_0d24e3dd_f21720c6, 0x63b9540c_eb60ccb5_1e4d989d_956e053c_f2511837_efb79089_d2ff4028_4202c53d]];
        }
        // Step 4: compute s*G - h*A
        {
            uint256 ss = uint256(s) << 3;
            uint256 hhh = hh + 0x80000000_00000000_00000000_00000000_a6f7cef5_17bce6b2_c09318d2_e7ae9f60;
            uint256 vvx = 0;
            uint256 vvu = 1;
            uint256 vvy = 1;
            uint256 vvv = 1;
            for (uint256 i = 252;; i--) {
                uint256 bit = 8 << i;
                if ((ss & bit) != 0) {
                    uint256 ws;
                    uint256 wd;
                    uint256 wz;
                    uint256 wt;
                    {
                        uint256 wx = mulmod(vvx, vvv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                        uint256 wy = mulmod(vvy, vvu, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                        ws = wy + wx;
                        wd = wy - wx + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                        wz = mulmod(vvu, vvv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                        wt = mulmod(vvx, vvy, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    }
                    uint256 j = (ss >> i) & 7;
                    ss &= ~(7 << i);
                    uint256[8][3][2] memory tables_ = tables;
                    uint256 aa = mulmod(wd, tables_[0][1][j], 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 ab = mulmod(ws, tables_[0][0][j], 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 ac = mulmod(wt, tables_[0][2][j], 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    vvx = ab - aa + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                    vvu = wz + ac;
                    vvy = ab + aa;
                    vvv = wz - ac + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                }
                if ((hhh & bit) != 0) {
                    uint256 ws;
                    uint256 wd;
                    uint256 wz;
                    uint256 wt;
                    {
                        uint256 wx = mulmod(vvx, vvv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                        uint256 wy = mulmod(vvy, vvu, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                        ws = wy + wx;
                        wd = wy - wx + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                        wz = mulmod(vvu, vvv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                        wt = mulmod(vvx, vvy, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    }
                    uint256 j = (hhh >> i) & 7;
                    hhh &= ~(7 << i);
                    uint256[8][3][2] memory tables_ = tables;
                    uint256 aa = mulmod(wd, tables_[1][0][j], 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 ab = mulmod(ws, tables_[1][1][j], 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 ac = mulmod(wt, tables_[1][2][j], 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    vvx = ab - aa + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                    vvu = wz - ac + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                    vvy = ab + aa;
                    vvv = wz + ac;
                }
                if (i == 0) {
                    uint256 ws;
                    uint256 wd;
                    uint256 wz;
                    uint256 wt;
                    {
                        uint256 wx = mulmod(vvx, vvv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                        uint256 wy = mulmod(vvy, vvu, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                        ws = wy + wx;
                        wd = wy - wx + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                        wz = mulmod(vvu, vvv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                        wt = mulmod(vvx, vvy, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    }
                    uint256 j = hhh & 7;
                    uint256[8][3][2] memory tables_ = tables;
                    uint256 aa = mulmod(wd, tables_[1][0][j], 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 ab = mulmod(ws, tables_[1][1][j], 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 ac = mulmod(wt, tables_[1][2][j], 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    vvx = ab - aa + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                    vvu = wz - ac + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                    vvy = ab + aa;
                    vvv = wz + ac;
                    break;
                }
                {
                    uint256 xx = mulmod(vvx, vvv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 yy = mulmod(vvy, vvu, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 zz = mulmod(vvu, vvv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 xx2 = mulmod(xx, xx, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 yy2 = mulmod(yy, yy, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 xxyy = mulmod(xx, yy, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    uint256 zz2 = mulmod(zz, zz, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                    vvx = xxyy + xxyy;
                    vvu = yy2 - xx2 + 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed;
                    vvy = xx2 + yy2;
                    vvv = addmod(zz2 + zz2, 0xffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffda - vvu, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
                }
            }
            vx = vvx;
            vu = vvu;
            vy = vvy;
            vv = vvv;
        }
        // Step 5: compare the points
        (uint256 vi, uint256 vj) = pow22501(mulmod(vu, vv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed));
        vi = mulmod(vi, vi, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        vi = mulmod(vi, vi, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        vi = mulmod(vi, vi, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        vi = mulmod(vi, vi, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        vi = mulmod(vi, vi, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        vi = mulmod(vi, vj, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        vx = mulmod(vx, mulmod(vi, vv, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed), 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        vy = mulmod(vy, mulmod(vi, vu, 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed), 0x7fffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffed);
        bytes32 v = bytes32(vy | (vx << 255));
        v = bytes32(((uint256(v) & 0xff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff_00ff00ff) << 8) | ((uint256(v) & 0xff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00_ff00ff00) >> 8));
        v = bytes32(((uint256(v) & 0xffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff_0000ffff) << 16) | ((uint256(v) & 0xffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000_ffff0000) >> 16));
        v = bytes32(((uint256(v) & 0xffffffff_00000000_ffffffff_00000000_ffffffff_00000000_ffffffff) << 32) | ((uint256(v) & 0xffffffff_00000000_ffffffff_00000000_ffffffff_00000000_ffffffff_00000000) >> 32));
        v = bytes32(((uint256(v) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff) << 64) | ((uint256(v) & 0xffffffff_ffffffff_00000000_00000000_ffffffff_ffffffff_00000000_00000000) >> 64));
        v = bytes32((uint256(v) << 128) | (uint256(v) >> 128));
        return v == r;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bytes32","name":"k","type":"bytes32"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"bytes32","name":"m1","type":"bytes32"},{"internalType":"bytes9","name":"m2","type":"bytes9"}],"name":"check","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}]

608060405234801561001057600080fd5b50613dee806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ebd1b95114610030575b600080fd5b61006f600480360360a081101561004657600080fd5b50803590602081013590604081013590606081013590608001356001600160b81b031916610083565b604080519115158252519081900360200190f35b60008061008e613bf3565b50604080516102a08101825267428a2f98d728ae22610200820190815267e49b69c19ef14ad26102208301526727b70a8546d22ffc6102408301526719a4c116b8d2d0c861026083015267ca273eceea26619c6102808301528152815160a08082018452677137449123ef65cd825267efbe4786384f25e3602080840191909152672e1b21385c26c92683860152671e376c085141ab5360608085019190915267d186b8c721c0c207608080860191909152828601949094528551808401875267b5c0fbcfec4d3b2f8152670fc19dc68b8cd5b581840152674d2c6dfc5ac42aed81880152672748774cdf8eeb998183015267eada7dd6cde0eb1e81860152858701528551808401875267e9b5dba58189dbbc815267240ca1cc77ac9c65818401526753380d139d95b3df818801526734b0bcb5e19b48a88183015267f57d4f7fee6ed178818601528186015285518084018752673956c25bf348b5388152672de92c6f592b02758184015267650a73548baf63de8188015267391c0cb3c5c95a63818301526706f067aa72176fba8186015284860152855180840187526759f111f1b605d0198152674a7484aa6ea6e4838184015267766a0abb3c77b2a881880152674ed8aa4ae3418acb81830152670a637dc5a2c898a681860152838601528551808401875267923f82a4af194f9b8152675cb0a9dcbd41fbd4818401526781c2c92e47edaee681880152675b9cca4f7763e3738183015267113f9804bef90dae8186015260c08601528551808401875267ab1c5ed5da6d811881526776f988da831153b5818401526792722c851482353b8188015267682e6ff3d6b2b8a381830152671b710b35131c471b8186015260e08601528551808401875267d807aa98a3030242815267983e5152ee66dfab8184015267a2bfe8a14cf103648188015267748f82ee5defb2fc818301526728db77f523047d8481860152610100860152855180840187526712835b0145706fbe815267a831c66d2db432108184015267a81a664bbc423001818801526778a5636f43172f60818301526732caab7b40c72493818601526101208601528551808401875267243185be4ee4b28c815267b00327c898fb213f8184015267c24b8b70d0f89791818801526784c87814a1f0ab7281830152673c9ebe0a15c9bebc818601526101408601528551808401875267550c7dc3d5ffb4e2815267bf597fc7beef0ee48184015267c76c51a30654be3081880152678cc702081a6439ec8183015267431d67c49c100d4c81860152610160860152855180840187526772be5d74f27b896f815267c6e00bf33da88fc28184015267d192e819d6ef5218818801526790befffa23631e2881830152674cc5d4becb3e42b681860152610180860152855180840187526780deb1fe3b1696b1815267d5a79147930aa7258184015267d69906245565a9108188015267a4506cebde82bde98183015267597f299cfc657e2a818601526101a086015285518084018752679bdc06a725c7123581526706ca6351e003826f8184015267f40e35855771202a8188015267bef9a3f7b2c6791581830152675fcb6fab3ad6faec818601526101c08601528551928301865267c19bf174cf692694835267142929670a0e6e709183019190915267106aa07032bbd1b88286015267c67178f2e372532b90820152676c44198c4a475817918101919091526101e08201529087811b67ffffffffffffffff60801b90811667ffffffffffffffff60401b8a841c811677ffffffffffffffffffffffffffffffff0000000000000000198c81169190911792909217938c811b84168d821c83168e85161717938a821b168a821c909216928a1692909217179087901c60ff60781b166001600160c01b03198816176e80000000000000000000000000034817676a09e667f3bcc90867bb67ae8584caa73b673c6ef372fe94f82b67a54ff53a5f1d36f167510e527fade682d1679b05688c2b3e6c1f671f83d9abfb41bd6b675be0cd19137e217960005b6001600160401b038581169567ffffffffffffffff60401b604082901b168717600e81901c601282901c1860299190911c18840186861890911690911684180160008f816020020151836005811061069d57fe5b60200201518201915060c08f901c820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f60016010811061075f57fe5b6020020151836005811061076f57fe5b60200201518201915060408f901c820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f60026010811061083157fe5b6020020151836005811061084157fe5b60200201518201915060808f901c820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f60036010811061090357fe5b6020020151836005811061091357fe5b6020020151820191508e820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f6004601081106109d157fe5b602002015183600581106109e157fe5b60200201518201915060c08e901c820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f600560108110610aa357fe5b60200201518360058110610ab357fe5b60200201518201915060408e901c820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f600660108110610b7557fe5b60200201518360058110610b8557fe5b60200201518201915060808e901c820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f600760108110610c4757fe5b60200201518360058110610c5757fe5b6020020151820191508d820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f600860108110610d1557fe5b60200201518360058110610d2557fe5b60200201518201915060c08d901c820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f600960108110610de757fe5b60200201518360058110610df757fe5b60200201518201915060408d901c820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f600a60108110610eb957fe5b60200201518360058110610ec957fe5b60200201518201915060808d901c820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f600b60108110610f8b57fe5b60200201518360058110610f9b57fe5b6020020151820191508c820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f600c6010811061105957fe5b6020020151836005811061106957fe5b60200201518201915060c08c901c820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f600d6010811061112b57fe5b6020020151836005811061113b57fe5b60200201518201915060408c901c820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f600e601081106111fd57fe5b6020020151836005811061120d57fe5b60200201518201915060808c901c820191506001600160401b038b169a50600060408c901b8c1790506000602782901c602283901c601c84901c1818905060008b8d168c8e178f16179050808201935050505084935085945086955081880196508897508998508a99508082019a5050506000806001600160401b03871696506000604088901b881790506000602982901c601283901c600e84901c18189050600087888a188b16189050808288010194505050508f600f601081106112cf57fe5b602002015183600581106112df57fe5b60200201518a8a178c166001600160401b039081168c8c161767ffffffffffffffff60401b60408f901b169d9091169c8d17601c81901c602282901c1860279190911c180192018c019182019a999897909101959493925050600481141561134657611a4b565b60008d905060008d905060008d905060008d9050600084600080516020613cf983398151915216905060408367ffffffffffffffff60801b16901c60808467ffffffffffffffff60401b16901b1781019050600060808667ffffffffffffffff60801b16901c60408767ffffffffffffffff60401b16901b1790506000604082901b82179050603982901b603882901b603f83901b1818600080516020613cf983398151915216830192505050600082600080516020613d198339815191521690506000604082901b82179050603a82901b600382901b602d83901b1818600080516020613cf983398151915216830192505050600080516020613cf983398151915281169050600085600080516020613d1983398151915216905060c083901c6080856001600160401b0316901b1781019050600060c086901c6080886001600160401b0316901b1790506000604082901b82179050600782901c600882901c600183901c1818600080516020613d19833981519152168301925050506000604083901c83179050604683901c603d82901c601383901c1818600080516020613d19833981519152168201915050600080516020613d198339815191528116905080821795505050600083600080516020613cf983398151915216905060408267ffffffffffffffff60801b16901c60808367ffffffffffffffff60401b16901b1781019050600060808567ffffffffffffffff60801b16901c60408667ffffffffffffffff60401b16901b1790506000604082901b82179050603982901b603882901b603f83901b1818600080516020613cf983398151915216830192505050600085600080516020613d198339815191521690506000604082901b82179050603a82901b600382901b602d83901b1818600080516020613cf983398151915216830192505050600080516020613cf983398151915281169050600084600080516020613d1983398151915216905060c086901c6080846001600160401b0316901b1781019050600060c085901c6080876001600160401b0316901b1790506000604082901b82179050600782901c600882901c600183901c1818600080516020613d19833981519152168301925050506000604083901c83179050604683901c603d82901c601383901c1818600080516020613d19833981519152168201915050600080516020613d198339815191528116905080821794505050600082600080516020613cf983398151915216905060408567ffffffffffffffff60801b16901c60808667ffffffffffffffff60401b16901b1781019050600060808467ffffffffffffffff60801b16901c60408567ffffffffffffffff60401b16901b1790506000604082901b82179050603982901b603882901b603f83901b1818600080516020613cf983398151915216830192505050600084600080516020613d198339815191521690506000604082901b82179050603a82901b600382901b602d83901b1818600080516020613cf983398151915216830192505050600080516020613cf983398151915281169050600083600080516020613d1983398151915216905060c085901c6080876001600160401b0316901b1781019050600060c084901c6080866001600160401b0316901b1790506000604082901b82179050600782901c600882901c600183901c1818600080516020613d19833981519152168301925050506000604083901c83179050604683901c603d82901c601383901c1818600080516020613d19833981519152168201915050600080516020613d198339815191528116905080821793505050600081600080516020613cf983398151915216905060408467ffffffffffffffff60801b16901c60808567ffffffffffffffff60401b16901b1781019050600060808367ffffffffffffffff60801b16901c60408467ffffffffffffffff60401b16901b1790506000604082901b82179050603982901b603882901b603f83901b1818600080516020613cf983398151915216830192505050600083600080516020613d198339815191521690506000604082901b82179050603a82901b600382901b602d83901b1818600080516020613cf983398151915216830192505050600080516020613cf983398151915281169050600082600080516020613d1983398151915216905060c084901c6080866001600160401b0316901b1781019050600060c087901c6080856001600160401b0316901b1790506000604082901b82179050600782901c600882901c600183901c1818600080516020613d19833981519152168301925050506000604083901c83179050604683901c603d82901c601383901c1818600080516020613d19833981519152168201915050600080516020613d198339815191528116905080821792505050809d50819e505050809d50819e5050508080600101915050610649565b50600060c08667a54ff53a5f1d36f101901b608088673c6ef372fe94f82b016001600160401b0316901b60408a67bb67ae8584caa73b016001600160401b0316901b8b676a09e667f3bcc908016001600160401b03161717179050600881600080516020613d7983398151915216901c600882600080516020613d5983398151915216901b179050601081600080516020613d3983398151915216901c601082600080516020613cb983398151915216901b179050602081600080516020613cd983398151915216901c602082600080516020613d9983398151915216901b179050600060c083675be0cd19137e217901901b608085671f83d9abfb41bd6b016001600160401b0316901b604087679b05688c2b3e6c1f016001600160401b0316901b8867510e527fade682d1016001600160401b03161717179050600881600080516020613d7983398151915216901c600882600080516020613d5983398151915216901b179050601081600080516020613d3983398151915216901c601082600080516020613cb983398151915216901b179050602081600080516020613cd983398151915216901c602082600080516020613d9983398151915216901b1790506f14def9dea2f79cd65812631a5cf5d3ed600160fc1b0180611c2c57fe5b6f14def9dea2f79cd65812631a5cf5d3ed600160fc1b017f0ffffffffffffffffffffffffffffffec6ef5bf4737dcf70d6ec31748d98951d830983089f5050505050505050505050505050505060088760001c600080516020613d7983398151915216901c60088860001c600080516020613d5983398151915216901b1760001b965060108760001c600080516020613d3983398151915216901c60108860001c600080516020613cb983398151915216901b1760001b965060208760001c600080516020613cd983398151915216901c60208860001c600080516020613d9983398151915216901b1760001b965060408760001c600080516020613cf983398151915216901c60408860001c600080516020613d1983398151915216901b1760001b965060808760001c901c60808860001c901b1760001b965060008760001c6001600160ff1b031690506000806013600160ff1b0380611d8a57fe5b838409905060006013600160ff1b036014600160ff1b038308905060006013600160ff1b037f52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a38409600101905060006013600160ff1b038284099050611def81612ec4565b5094506013600160ff1b0385860994506013600160ff1b0380826013600160ff1b0388890909840994506013600160ff1b03826013600160ff1b03878809099050828114611e8557826013600160ff1b03038114611e57576000975050505050505050612ebb565b6013600160ff1b037f2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0860994505b5050505060ff89901c6001821614611ea1576013600160ff1b03035b600887811b600080516020613d7983398151915216600080516020613d598339815191529890911c9790971696909617601081811b600080516020613d3983398151915216600080516020613cb98339815191529290911c9190911617602081811b600080516020613cd983398151915216600080516020613d998339815191529290911c9190911617604081811b600080516020613cf983398151915216600080516020613d198339815191529290911c9190911617608081811b91901c17956f14def9dea2f79cd65812631a5cf5d3ed600160fc1b018710611f8b5760009350505050612ebb565b600080600080611f99613c21565b8587016013600160ff1b038789038101906000907f2406d9dc56dffce7198e80f2eef3d13000e0149a8283b156ebd69b9426b2f1596013600160ff1b038c8c09099050898960018060006013600160ff1b03828509905060006013600160ff1b03848709905060006013600160ff1b03848609905060006013600160ff1b03848509905060006013600160ff1b03848509905060006013600160ff1b03858709905060006013600160ff1b03858609905081820199508383036013600160ff1b030198508284019a506013600160ff1b038061207157fe5b89602519038283010897505050505050505060006013600160ff1b038061209457fe5b828509905060006013600160ff1b03848709905060006013600160ff1b03848609905060006013600160ff1b03848509905060006013600160ff1b03848509905060006013600160ff1b03858709905060006013600160ff1b03858609905081820199508383036013600160ff1b030198508284019a506013600160ff1b038061211a57fe5b89602519038283010897505050505050505060006013600160ff1b038061213d57fe5b828509905060006013600160ff1b03848709905060006013600160ff1b03848609905060006013600160ff1b03848509905060006013600160ff1b03848509905060006013600160ff1b03858709905060006013600160ff1b03858609905081820199508383036013600160ff1b030198508284019a506013600160ff1b03806121c357fe5b8960251903828301089750505050505050506000600190506121e3613c21565b508860005b6000808080806013600160ff1b03898c09905060006013600160ff1b038b8e09905060006013600160ff1b038b8d0990506013600160ff1b038e8e0960208a0151518484019850939092036013600160ff1b03019550909350800191508490866008811061225257fe5b602002015282866001602002015160016020020151866008811061227257fe5b60200201526013600160ff1b037f2406d9dc56dffce7198e80f2eef3d13000e0149a8283b156ebd69b9426b2f159830960208701516040015186600881106122b657fe5b6020020152855151819086600881106122cb57fe5b60200201528686600060200201516001602002015186600881106122eb57fe5b60200201526013600160ff1b038188099650846007141561230f575050505061238c565b60006013600160ff1b038f8609905060006013600160ff1b038f8609905060006013600160ff1b038f860990508183036013600160ff1b03019c506013600160ff1b038061235957fe5b8185088383019e509b506013600160ff1b03816013600160ff1b030385089a5050600190960195506121e8945050505050565b50600061239883612ec4565b90935090506013600160ff1b0383840992506013600160ff1b0383840992506013600160ff1b0383840992506013600160ff1b0383840992506013600160ff1b0383840992506013600160ff1b03818409925060075b8251602001516000906013600160ff1b0390836008811061240b57fe5b602002015186096020850151519091506013600160ff1b03908290846008811061243157fe5b602002015109602085015151836008811061244857fe5b60200201526013600160ff1b0381856001602002015160016020020151846008811061247057fe5b6020020151096020808601510151836008811061248957fe5b60200201526013600160ff1b038185600160200201516002602002015184600881106124b157fe5b60200201510960208501516040015183600881106124cb57fe5b6020020152816124db5750612505565b8351516013600160ff1b039083600881106124f257fe5b60200201518609945050600019016123ee565b5060405180606001604052806040518061010001604052807f43e7ce9d19ea5d329385a44c321ea16167c996e37dc6070c97de49e37ac61db981526020017f40cff34425d8ec30a3bb74ba58cd5854fa1e38186ad0d31ebc8ae251ceb2c97e81526020017f459bd27046e8dd45aea7008db87a5a8f7906779253d64523589518599fdfbf4b81526020017f69fdd1e28c23cc3894d0c8ff90e76f6d5b6e4c2e620136d04dd83c4a51581ab981526020017f54dceb3413ce5cfa11196dfc960b6edaf4b380c6d4d2378419cc0279ba49c5f381526020017f4e24184dd71a3d77eef3729f7f8cf7c17224cf40aa7b9548b9942f3c5084ceed81526020017f5a0e5aab20262674ae1175761cbf5e889b52a55fd7ac5027c228cebdc8d2360a81526020017f26239334073e9b38c62859556d451c3dcc8d30e84b361174f488eadde2cf17d981525081526020016040518061010001604052807f227e97c94c7c0933d2e0c21a3447c504fe9ccf82e8a05f59ce881c82eba0489f81526020017f226a3e0ecc4afec6fd0d288413014a9dbddecf06c1a2f0bb702ba77c613d820981526020017f34d7efc851d45c5e71efeb0f235b794691de6228877569b3a8d52bf058b8a4a081526020017f3c1f5fb3ca7166fce1471c9b752b6d28c56301ad7b65e8451b2c8c5526726e1281526020017f6102416cf02f02ff5be75275f55f28db89b2a9d2456b860ce22fc0e5031f7cc581526020017f40adf677f1bfdae057f0fd179c12617918ddaa2891a6530fb1a4294fa866549081526020017f61936f3c415609046187b8baa978cbc9b47893363ae5a3cc7d909f3635ae7f4881526020017f562a9662b6ec47f9e979d473c02b51e4423368238c58ddb52f0e5c6a180e641081525081526020016040518061010001604052807f3788bdb44f8632d42d0dbee5eea1acc6136cf411e655624f55e48902c3bd553481526020017f6190cf2c2a7b5ad769d594a82844f23b4167fa7c8ac30e51aa6cfbebdcd4b94581526020017f65f7787096be9204123a71f3ac88a87be1513217737d6a1e2f3a13a43d7e3a9a81526020017f023af32dbfa67975536479a7a7ce74a02142147fac0480187f1f13349cda1f2d81526020017f64fc44b7fc6841bddb0ced8b8b0fe6759137ef87ee96651215fc1dbcd25c64dc81526020017f1434aa3748b701d5b69df3d7d340c1fe3f6b9c1efc617484caadb47e382f447581526020017f457a6da8c962ef35f2b217423e5844e9d23534527e8ea4290d24e3ddf21720c681526020017f63b9540ceb60ccb51e4d989d956e053cf2511837efb79089d2ff40284202c53d815250815250826000600281106128d957fe5b602002018190525050505050505050505050600060038d60001c901b90506000897f80000000000000000000000000000000a6f7cef517bce6b2c09318d2e7ae9f6001905060008060019050600060019050600060019050600060fc90505b6008811b87811615612a5d576000808080806013600160ff1b03888c09905060006013600160ff1b038b8b09905081810195508181036013600160ff1b030194506013600160ff1b038061298857fe5b898c0993506013600160ff1b038a8d09925050506000868d901c6007169050866007901b198d169c506129b9613c21565b508d51602001518e906000906013600160ff1b039084600881106129d957fe5b602002015187098251519091506000906013600160ff1b039085600881106129fd57fe5b602002015189098351604001519091506000906013600160ff1b03908660088110612a2457fe5b6020020151870990508282036013600160ff1b03019e508087019d508282019c508087036013600160ff1b03019b505050505050505050505b86811615612b81576000808080806013600160ff1b03888c09905060006013600160ff1b038b8b09905081810195508181036013600160ff1b030194506013600160ff1b0380612aa957fe5b898c0993506013600160ff1b038a8d096007808a1b198f169e91945090891c169150612ad59050613c21565b5060208e0151518e906000906013600160ff1b03908460088110612af557fe5b6020020151870960208084015101519091506000906013600160ff1b03908560088110612b1e57fe5b602002015189096020840151604001519091506000906013600160ff1b03908660088110612b4857fe5b6020020151870990508282036013600160ff1b03019e508087036013600160ff1b03019d508282019c508087019b505050505050505050505b81612c9b576000808080806013600160ff1b03888c09905060006013600160ff1b038b8b09905081810195508181036013600160ff1b030194506013600160ff1b0380612bca57fe5b898c0993506013600160ff1b038a8d099250505060078b16612bea613c21565b5060208e0151518e906000906013600160ff1b03908460088110612c0a57fe5b6020020151870960208084015101519091506000906013600160ff1b03908560088110612c3357fe5b602002015189096020840151604001519091506000906013600160ff1b03908660088110612c5d57fe5b6020020151870990508282036013600160ff1b03019e508087036013600160ff1b03019d508282019c508087019b5050505050505050505050612d4b565b60006013600160ff1b03848809905060006013600160ff1b03878709905060006013600160ff1b03868909905060006013600160ff1b03848509905060006013600160ff1b03848509905060006013600160ff1b03858709905060006013600160ff1b0385860990508182019c508383036013600160ff1b03019b508284019a506013600160ff1b0380612d2b57fe5b8c6025190382830108995050600019909701965061293895505050505050565b509299509097509550935060009150819050612d706013600160ff1b03858809612ec4565b915091506013600160ff1b0380612d8357fe5b82830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0381830991506013600160ff1b0380858409880996506013600160ff1b0380878409860960ff9790971b909617600881811b600080516020613d7983398151915216600080516020613d598339815191529290911c9190911617601081811b600080516020613d3983398151915216600080516020613cb98339815191529290911c9190911617602081811b600080516020613cd983398151915216600080516020613d998339815191529290911c9190911617604081811b600080516020613cf983398151915216600080516020613d198339815191529290911c9190911617608081811b91901c178e1499505050505050505050505b95945050505050565b6000806013600160ff1b0383840990506013600160ff1b0381820991506013600160ff1b03836013600160ff1b038485090991506013600160ff1b0381830990506013600160ff1b03826013600160ff1b0383840909915060006013600160ff1b0383840990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381840992506013600160ff1b0383840990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b03818409905060006013600160ff1b0382830990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382850993506013600160ff1b0384850991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382850991506013600160ff1b0382830990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381820990506013600160ff1b0381830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382830991506013600160ff1b0382850993505050915091565b6040518061020001604052806010905b613c0b613c4e565b815260200190600190039081613c035790505090565b60405180604001604052806002905b613c38613c6c565b815260200190600190039081613c305790505090565b6040518060a001604052806005906020820280368337509192915050565b60405180606001604052806003905b613c83613c99565b815260200190600190039081613c7b5790505090565b604051806101000160405280600890602082028036833750919291505056fe0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffffffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000000000000000000000ffffffffffffffff0000000000000000ffffffffffffffffffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff000000ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff0000000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffffa2646970667358221220cdaf11667ae78c5d395a7be78dc17d02cf8d2e256a7744e4b794e705073df3ef64736f6c634300060c0033

Deployed ByteCode Sourcemap

223:83143:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26907:56456;;;;;;;;;;;;;;;;-1:-1:-1;26907:56456:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26907:56456:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;26999:4;27016:10;27097:24;;:::i;:::-;-1:-1:-1;27097:2455:0;;;;;;;;27134:19;27097:2455;;;;;;27164:19;27097:2455;;;;27194:19;27097:2455;;;;27224:19;27097:2455;;;;27254:19;27097:2455;;;;;;;;;;;;;;27286:19;27097:2455;;27316:19;27097:2455;;;;;;;;27346:19;27097:2455;;;;27376:19;27097:2455;;;;;;;;27406:19;27097:2455;;;;;;;;;;;;;;;;;;;;;;27438:19;27097:2455;;27468:18;27097:2455;;;;27497:19;27097:2455;;;;27527:19;27097:2455;;;;27557:19;27097:2455;;;;;;;;;;;;;;;27589:19;27097:2455;;27619:19;27097:2455;;;;27649:19;27097:2455;;;;27679:19;27097:2455;;;;27709:19;27097:2455;;;;;;;;;;;;;;;27741:19;27097:2455;;27771:19;27097:2455;;;;27801:19;27097:2455;;;;27831:19;27097:2455;;;;27861:18;27097:2455;;;;;;;;;;;;;;;27892:19;27097:2455;;27922:19;27097:2455;;;;27952:19;27097:2455;;;;27982:19;27097:2455;;;;28012:18;27097:2455;;;;;;;;;;;;;;;28043:19;27097:2455;;28073:19;27097:2455;;;;28103:19;27097:2455;;;;28133:19;27097:2455;;;;28163:19;27097:2455;;;;;;;;;;;;;;;28195:19;27097:2455;;28225:19;27097:2455;;;;28255:19;27097:2455;;;;28285:19;27097:2455;;;;28315:19;27097:2455;;;;;;;;;;;;;;;28347:19;27097:2455;;28377:19;27097:2455;;;;28407:19;27097:2455;;;;28437:19;27097:2455;;;;28467:19;27097:2455;;;;;;;;;;;;;;;28499:19;27097:2455;;28529:19;27097:2455;;;;28559:19;27097:2455;;;;28589:19;27097:2455;;;;28619:19;27097:2455;;;;;;;;;;;;;;;28651:19;27097:2455;;28681:19;27097:2455;;;;28711:19;27097:2455;;;;28741:19;27097:2455;;;;28771:19;27097:2455;;;;;;;;;;;;;;;28803:19;27097:2455;;28833:19;27097:2455;;;;28863:19;27097:2455;;;;28893:19;27097:2455;;;;28923:19;27097:2455;;;;;;;;;;;;;;;28955:19;27097:2455;;28985:19;27097:2455;;;;29015:19;27097:2455;;;;29045:19;27097:2455;;;;29075:19;27097:2455;;;;;;;;;;;;;;;29107:19;27097:2455;;29137:19;27097:2455;;;;29167:19;27097:2455;;;;29197:19;27097:2455;;;;29227:19;27097:2455;;;;;;;;;;;;;;;29259:19;27097:2455;;29289:18;27097:2455;;;;29318:19;27097:2455;;;;29348:19;27097:2455;;;;29378:19;27097:2455;;;;-1:-1:-1;;;27097:2455:0;;;;;;;;29410:19;27097:2455;;29440:19;27097:2455;;;;;;;29470:19;27097:2455;;;;29500:19;27097:2455;;;;29530:19;27097:2455;;;;;;;-1:-1:-1;;;27097:2455:0;;29753:58;;;-1:-1:-1;;;29753:58:0;;;-1:-1:-1;;;29672:76:0;;;;;-1:-1:-1;;29581:86:0;;;29580:169;;;;:232;;;;;30013:58;;;;;29932:76;;;;;29841:86;;;29840:169;:232;;30275:59;;;;30193:77;;;;;;30101:87;;;30100:171;;;;:235;;30465:86;;;-1:-1:-1;;;30465:86:0;-1:-1:-1;;;;;;30364:96:0;;30363:189;30555:35;30363:227;30617:19;30663;30709;30755;30801;30847;30893;30939;-1:-1:-1;30973:26976:0;-1:-1:-1;;;;;31146:24:0;;;;-1:-1:-1;;;31243:2:0;31238:7;;;;31233:13;;31293:2;31287:8;;;31306:2;31300:8;;;31286:23;31319:2;31313:8;;;;31286:36;31414:6;;31368:5;;;31363:11;;;;;;31362:17;;31414:11;31074:13;31480:2;31074:13;31480:5;;;;31486:1;31480:8;;;;;;;;;;;31471:17;;;;31526:3;31520:2;:9;;31511:18;;;;-1:-1:-1;;;;;31552:24:0;;;;31626:10;31649:2;31644:1;:7;;31639:1;:13;31626:26;;31679:10;31725:2;31719;:8;;31712:2;31706;:8;;31699:2;31693;:8;;31692:23;:36;31679:49;;31755:11;31790:1;31786;:5;31779:1;31775;:5;31770:1;:11;31769:23;31755:37;;31832:3;31827:2;:8;31819:16;;30973:26976;;;31885:1;31881:5;;31913:1;31909:5;;31941:1;31937:5;;31973;31969:1;:9;31965:13;;32005:1;32001:5;;32033:1;32029:5;;32061:1;32057:5;;32097;32089;:13;32085:17;;30973:26976;;32200:13;32236;-1:-1:-1;;;;;32272:24:0;;;;32346:10;32369:2;32364:1;:7;;32359:1;:13;32346:26;;32399:10;32445:2;32439;:8;;32432:2;32426;:8;;32419:2;32413;:8;;32412:23;:36;32399:49;;32475:10;32504:1;32498;32494;:5;32489:1;:11;32488:17;32475:30;;32549:2;32544;32540:1;:6;:11;32532:19;;30973:26976;;;32606:2;32609:1;32606:5;;;;;;;;;;;32612:1;32606:8;;;;;;;;;;;32597:17;;;;32652:2;32646;:8;;32637:17;;;;-1:-1:-1;;;;;32677:24:0;;;;32751:10;32774:2;32769:1;:7;;32764:1;:13;32751:26;;32804:10;32850:2;32844;:8;;32837:2;32831;:8;;32824:2;32818;:8;;32817:23;:36;32804:49;;32880:11;32915:1;32911;:5;32904:1;32900;:5;32895:1;:11;32894:23;32880:37;;32957:3;32952:2;:8;32944:16;;30973:26976;;;33010:1;33006:5;;33038:1;33034:5;;33066:1;33062:5;;33098;33094:1;:9;33090:13;;33130:1;33126:5;;33158:1;33154:5;;33186:1;33182:5;;33222;33214;:13;33210:17;;30973:26976;;33325:13;33361;-1:-1:-1;;;;;33397:24:0;;;;33471:10;33494:2;33489:1;:7;;33484:1;:13;33471:26;;33524:10;33570:2;33564;:8;;33557:2;33551;:8;;33544:2;33538;:8;;33537:23;:36;33524:49;;33600:10;33629:1;33623;33619;:5;33614:1;:11;33613:17;33600:30;;33674:2;33669;33665:1;:6;:11;33657:19;;30973:26976;;;33731:2;33734:1;33731:5;;;;;;;;;;;33737:1;33731:8;;;;;;;;;;;33722:17;;;;33777:3;33771:2;:9;;33762:18;;;;-1:-1:-1;;;;;33803:24:0;;;;33877:10;33900:2;33895:1;:7;;33890:1;:13;33877:26;;33930:10;33976:2;33970;:8;;33963:2;33957;:8;;33950:2;33944;:8;;33943:23;:36;33930:49;;34006:11;34041:1;34037;:5;34030:1;34026;:5;34021:1;:11;34020:23;34006:37;;34083:3;34078:2;:8;34070:16;;30973:26976;;;34136:1;34132:5;;34164:1;34160:5;;34192:1;34188:5;;34224;34220:1;:9;34216:13;;34256:1;34252:5;;34284:1;34280:5;;34312:1;34308:5;;34348;34340;:13;34336:17;;30973:26976;;34451:13;34487;-1:-1:-1;;;;;34523:24:0;;;;34597:10;34620:2;34615:1;:7;;34610:1;:13;34597:26;;34650:10;34696:2;34690;:8;;34683:2;34677;:8;;34670:2;34664;:8;;34663:23;:36;34650:49;;34726:10;34755:1;34749;34745;:5;34740:1;:11;34739:17;34726:30;;34800:2;34795;34791:1;:6;:11;34783:19;;30973:26976;;;34857:2;34860:1;34857:5;;;;;;;;;;;34863:1;34857:8;;;;;;;;;;;34848:17;;;;34897:2;34888:11;;;;-1:-1:-1;;;;;34922:24:0;;;;34996:10;35019:2;35014:1;:7;;35009:1;:13;34996:26;;35049:10;35095:2;35089;:8;;35082:2;35076;:8;;35069:2;35063;:8;;35062:23;:36;35049:49;;35125:11;35160:1;35156;:5;35149:1;35145;:5;35140:1;:11;35139:23;35125:37;;35202:3;35197:2;:8;35189:16;;30973:26976;;;35255:1;35251:5;;35283:1;35279:5;;35311:1;35307:5;;35343;35339:1;:9;35335:13;;35375:1;35371:5;;35403:1;35399:5;;35431:1;35427:5;;35467;35459;:13;35455:17;;30973:26976;;35570:13;35606;-1:-1:-1;;;;;35642:24:0;;;;35716:10;35739:2;35734:1;:7;;35729:1;:13;35716:26;;35769:10;35815:2;35809;:8;;35802:2;35796;:8;;35789:2;35783;:8;;35782:23;:36;35769:49;;35845:10;35874:1;35868;35864;:5;35859:1;:11;35858:17;35845:30;;35919:2;35914;35910:1;:6;:11;35902:19;;30973:26976;;;35976:2;35979:1;35976:5;;;;;;;;;;;35982:1;35976:8;;;;;;;;;;;35967:17;;;;36022:3;36016:2;:9;;36007:18;;;;-1:-1:-1;;;;;36048:24:0;;;;36122:10;36145:2;36140:1;:7;;36135:1;:13;36122:26;;36175:10;36221:2;36215;:8;;36208:2;36202;:8;;36195:2;36189;:8;;36188:23;:36;36175:49;;36251:11;36286:1;36282;:5;36275:1;36271;:5;36266:1;:11;36265:23;36251:37;;36328:3;36323:2;:8;36315:16;;30973:26976;;;36381:1;36377:5;;36409:1;36405:5;;36437:1;36433:5;;36469;36465:1;:9;36461:13;;36501:1;36497:5;;36529:1;36525:5;;36557:1;36553:5;;36593;36585;:13;36581:17;;30973:26976;;36696:13;36732;-1:-1:-1;;;;;36768:24:0;;;;36842:10;36865:2;36860:1;:7;;36855:1;:13;36842:26;;36895:10;36941:2;36935;:8;;36928:2;36922;:8;;36915:2;36909;:8;;36908:23;:36;36895:49;;36971:10;37000:1;36994;36990;:5;36985:1;:11;36984:17;36971:30;;37045:2;37040;37036:1;:6;:11;37028:19;;30973:26976;;;37102:2;37105:1;37102:5;;;;;;;;;;;37108:1;37102:8;;;;;;;;;;;37093:17;;;;37148:2;37142;:8;;37133:17;;;;-1:-1:-1;;;;;37173:24:0;;;;37247:10;37270:2;37265:1;:7;;37260:1;:13;37247:26;;37300:10;37346:2;37340;:8;;37333:2;37327;:8;;37320:2;37314;:8;;37313:23;:36;37300:49;;37376:11;37411:1;37407;:5;37400:1;37396;:5;37391:1;:11;37390:23;37376:37;;37453:3;37448:2;:8;37440:16;;30973:26976;;;37506:1;37502:5;;37534:1;37530:5;;37562:1;37558:5;;37594;37590:1;:9;37586:13;;37626:1;37622:5;;37654:1;37650:5;;37682:1;37678:5;;37718;37710;:13;37706:17;;30973:26976;;37821:13;37857;-1:-1:-1;;;;;37893:24:0;;;;37967:10;37990:2;37985:1;:7;;37980:1;:13;37967:26;;38020:10;38066:2;38060;:8;;38053:2;38047;:8;;38040:2;38034;:8;;38033:23;:36;38020:49;;38096:10;38125:1;38119;38115;:5;38110:1;:11;38109:17;38096:30;;38170:2;38165;38161:1;:6;:11;38153:19;;30973:26976;;;38227:2;38230:1;38227:5;;;;;;;;;;;38233:1;38227:8;;;;;;;;;;;38218:17;;;;38273:3;38267:2;:9;;38258:18;;;;-1:-1:-1;;;;;38299:24:0;;;;38373:10;38396:2;38391:1;:7;;38386:1;:13;38373:26;;38426:10;38472:2;38466;:8;;38459:2;38453;:8;;38446:2;38440;:8;;38439:23;:36;38426:49;;38502:11;38537:1;38533;:5;38526:1;38522;:5;38517:1;:11;38516:23;38502:37;;38579:3;38574:2;:8;38566:16;;30973:26976;;;38632:1;38628:5;;38660:1;38656:5;;38688:1;38684:5;;38720;38716:1;:9;38712:13;;38752:1;38748:5;;38780:1;38776:5;;38808:1;38804:5;;38844;38836;:13;38832:17;;30973:26976;;38947:13;38983;-1:-1:-1;;;;;39019:24:0;;;;39093:10;39116:2;39111:1;:7;;39106:1;:13;39093:26;;39146:10;39192:2;39186;:8;;39179:2;39173;:8;;39166:2;39160;:8;;39159:23;:36;39146:49;;39222:10;39251:1;39245;39241;:5;39236:1;:11;39235:17;39222:30;;39296:2;39291;39287:1;:6;:11;39279:19;;30973:26976;;;39353:2;39356:1;39353:5;;;;;;;;;;;39359:1;39353:8;;;;;;;;;;;39344:17;;;;39393:2;39384:11;;;;-1:-1:-1;;;;;39418:24:0;;;;39492:10;39515:2;39510:1;:7;;39505:1;:13;39492:26;;39545:10;39591:2;39585;:8;;39578:2;39572;:8;;39565:2;39559;:8;;39558:23;:36;39545:49;;39621:11;39656:1;39652;:5;39645:1;39641;:5;39636:1;:11;39635:23;39621:37;;39698:3;39693:2;:8;39685:16;;30973:26976;;;39751:1;39747:5;;39779:1;39775:5;;39807:1;39803:5;;39839;39835:1;:9;39831:13;;39871:1;39867:5;;39899:1;39895:5;;39927:1;39923:5;;39963;39955;:13;39951:17;;30973:26976;;40066:13;40102;-1:-1:-1;;;;;40138:24:0;;;;40212:10;40235:2;40230:1;:7;;40225:1;:13;40212:26;;40265:10;40311:2;40305;:8;;40298:2;40292;:8;;40285:2;40279;:8;;40278:23;:36;40265:49;;40341:10;40370:1;40364;40360;:5;40355:1;:11;40354:17;40341:30;;40415:2;40410;40406:1;:6;:11;40398:19;;30973:26976;;;40472:2;40475:1;40472:5;;;;;;;;;;;40478:1;40472:8;;;;;;;;;;;40463:17;;;;40518:3;40512:2;:9;;40503:18;;;;-1:-1:-1;;;;;40544:24:0;;;;40618:10;40641:2;40636:1;:7;;40631:1;:13;40618:26;;40671:10;40717:2;40711;:8;;40704:2;40698;:8;;40691:2;40685;:8;;40684:23;:36;40671:49;;40747:11;40782:1;40778;:5;40771:1;40767;:5;40762:1;:11;40761:23;40747:37;;40824:3;40819:2;:8;40811:16;;30973:26976;;;40877:1;40873:5;;40905:1;40901:5;;40933:1;40929:5;;40965;40961:1;:9;40957:13;;40997:1;40993:5;;41025:1;41021:5;;41053:1;41049:5;;41089;41081;:13;41077:17;;30973:26976;;41192:13;41228;-1:-1:-1;;;;;41264:24:0;;;;41338:10;41361:2;41356:1;:7;;41351:1;:13;41338:26;;41391:10;41437:2;41431;:8;;41424:2;41418;:8;;41411:2;41405;:8;;41404:23;:36;41391:49;;41467:10;41496:1;41490;41486;:5;41481:1;:11;41480:17;41467:30;;41541:2;41536;41532:1;:6;:11;41524:19;;30973:26976;;;41598:2;41601:1;41598:5;;;;;;;;;;;41604:1;41598:8;;;;;;;;;;;41589:17;;;;41644:2;41638;:8;;41629:17;;;;-1:-1:-1;;;;;41669:24:0;;;;41743:10;41766:2;41761:1;:7;;41756:1;:13;41743:26;;41796:10;41842:2;41836;:8;;41829:2;41823;:8;;41816:2;41810;:8;;41809:23;:36;41796:49;;41872:11;41907:1;41903;:5;41896:1;41892;:5;41887:1;:11;41886:23;41872:37;;41949:3;41944:2;:8;41936:16;;30973:26976;;;42002:1;41998:5;;42030:1;42026:5;;42058:1;42054:5;;42090;42086:1;:9;42082:13;;42122:1;42118:5;;42150:1;42146:5;;42178:1;42174:5;;42214;42206;:13;42202:17;;30973:26976;;42318:13;42354;-1:-1:-1;;;;;42390:24:0;;;;42464:10;42487:2;42482:1;:7;;42477:1;:13;42464:26;;42517:10;42563:2;42557;:8;;42550:2;42544;:8;;42537:2;42531;:8;;42530:23;:36;42517:49;;42593:10;42622:1;42616;42612;:5;42607:1;:11;42606:17;42593:30;;42667:2;42662;42658:1;:6;:11;42650:19;;30973:26976;;;42724:2;42727;42724:6;;;;;;;;;;;42731:1;42724:9;;;;;;;;;;;42715:18;;;;42771:3;42765:2;:9;;42756:18;;;;-1:-1:-1;;;;;42797:24:0;;;;42871:10;42894:2;42889:1;:7;;42884:1;:13;42871:26;;42924:10;42970:2;42964;:8;;42957:2;42951;:8;;42944:2;42938;:8;;42937:23;:36;42924:49;;43000:11;43035:1;43031;:5;43024:1;43020;:5;43015:1;:11;43014:23;43000:37;;43077:3;43072:2;:8;43064:16;;30973:26976;;;43130:1;43126:5;;43158:1;43154:5;;43186:1;43182:5;;43218;43214:1;:9;43210:13;;43250:1;43246:5;;43278:1;43274:5;;43306:1;43302:5;;43342;43334;:13;43330:17;;30973:26976;;43446:13;43482;-1:-1:-1;;;;;43518:24:0;;;;43592:10;43615:2;43610:1;:7;;43605:1;:13;43592:26;;43645:10;43691:2;43685;:8;;43678:2;43672;:8;;43665:2;43659;:8;;43658:23;:36;43645:49;;43721:10;43750:1;43744;43740;:5;43735:1;:11;43734:17;43721:30;;43795:2;43790;43786:1;:6;:11;43778:19;;30973:26976;;;43852:2;43855;43852:6;;;;;;;;;;;43859:1;43852:9;;;;;;;;;;;43843:18;;;;43893:2;43884:11;;;;-1:-1:-1;;;;;43918:24:0;;;;43992:10;44015:2;44010:1;:7;;44005:1;:13;43992:26;;44045:10;44091:2;44085;:8;;44078:2;44072;:8;;44065:2;44059;:8;;44058:23;:36;44045:49;;44121:11;44156:1;44152;:5;44145:1;44141;:5;44136:1;:11;44135:23;44121:37;;44198:3;44193:2;:8;44185:16;;30973:26976;;;44251:1;44247:5;;44279:1;44275:5;;44307:1;44303:5;;44339;44335:1;:9;44331:13;;44371:1;44367:5;;44399:1;44395:5;;44427:1;44423:5;;44463;44455;:13;44451:17;;30973:26976;;44567:13;44603;-1:-1:-1;;;;;44639:24:0;;;;44713:10;44736:2;44731:1;:7;;44726:1;:13;44713:26;;44766:10;44812:2;44806;:8;;44799:2;44793;:8;;44786:2;44780;:8;;44779:23;:36;44766:49;;44842:10;44871:1;44865;44861;:5;44856:1;:11;44855:17;44842:30;;44916:2;44911;44907:1;:6;:11;44899:19;;30973:26976;;;44973:2;44976;44973:6;;;;;;;;;;;44980:1;44973:9;;;;;;;;;;;44964:18;;;;45020:3;45014:2;:9;;45005:18;;;;-1:-1:-1;;;;;45046:24:0;;;;45120:10;45143:2;45138:1;:7;;45133:1;:13;45120:26;;45173:10;45219:2;45213;:8;;45206:2;45200;:8;;45193:2;45187;:8;;45186:23;:36;45173:49;;45249:11;45284:1;45280;:5;45273:1;45269;:5;45264:1;:11;45263:23;45249:37;;45326:3;45321:2;:8;45313:16;;30973:26976;;;45379:1;45375:5;;45407:1;45403:5;;45435:1;45431:5;;45467;45463:1;:9;45459:13;;45499:1;45495:5;;45527:1;45523:5;;45555:1;45551:5;;45591;45583;:13;45579:17;;30973:26976;;45695:13;45731;-1:-1:-1;;;;;45767:24:0;;;;45841:10;45864:2;45859:1;:7;;45854:1;:13;45841:26;;45894:10;45940:2;45934;:8;;45927:2;45921;:8;;45914:2;45908;:8;;45907:23;:36;45894:49;;45970:10;45999:1;45993;45989;:5;45984:1;:11;45983:17;45970:30;;46044:2;46039;46035:1;:6;:11;46027:19;;30973:26976;;;46101:2;46104;46101:6;;;;;;;;;;;46108:1;46101:9;;;;;;;;;;;46092:18;;;;46148:2;46142;:8;;46133:17;;;;-1:-1:-1;;;;;46173:24:0;;;;46247:10;46270:2;46265:1;:7;;46260:1;:13;46247:26;;46300:10;46346:2;46340;:8;;46333:2;46327;:8;;46320:2;46314;:8;;46313:23;:36;46300:49;;46376:11;46411:1;46407;:5;46400:1;46396;:5;46391:1;:11;46390:23;46376:37;;46453:3;46448:2;:8;46440:16;;30973:26976;;;46506:1;46502:5;;46534:1;46530:5;;46562:1;46558:5;;46594;46590:1;:9;46586:13;;46626:1;46622:5;;46654:1;46650:5;;46682:1;46678:5;;46718;46710;:13;46706:17;;30973:26976;;46822:13;46858;-1:-1:-1;;;;;46894:24:0;;;;46968:10;46991:2;46986:1;:7;;46981:1;:13;46968:26;;47021:10;47067:2;47061;:8;;47054:2;47048;:8;;47041:2;47035;:8;;47034:23;:36;47021:49;;47097:10;47126:1;47120;47116;:5;47111:1;:11;47110:17;47097:30;;47171:2;47166;47162:1;:6;:11;47154:19;;30973:26976;;;47228:2;47231;47228:6;;;;;;;;;;;47235:1;47228:9;;;;;;;;;;;47219:18;;;;47275:3;47269:2;:9;;47260:18;;;;-1:-1:-1;;;;;47301:24:0;;;;47375:10;47398:2;47393:1;:7;;47388:1;:13;47375:26;;47428:10;47474:2;47468;:8;;47461:2;47455;:8;;47448:2;47442;:8;;47441:23;:36;47428:49;;47504:11;47539:1;47535;:5;47528:1;47524;:5;47519:1;:11;47518:23;47504:37;;47581:3;47576:2;:8;47568:16;;30973:26976;;;47634:1;47630:5;;47662:1;47658:5;;47690:1;47686:5;;47722;47718:1;:9;47714:13;;47754:1;47750:5;;47782:1;47778:5;;47810:1;47806:5;;47846;47838;:13;47834:17;;30973:26976;;47950:13;47986;-1:-1:-1;;;;;48022:24:0;;;;48096:10;48119:2;48114:1;:7;;48109:1;:13;48096:26;;48149:10;48195:2;48189;:8;;48182:2;48176;:8;;48169:2;48163;:8;;48162:23;:36;48149:49;;48225:10;48254:1;48248;48244;:5;48239:1;:11;48238:17;48225:30;;48299:2;48294;48290:1;:6;:11;48282:19;;30973:26976;;;48356:2;48359;48356:6;;;;;;;;;;;48363:1;48356:9;;;;;;;;;;;48645:5;;;48640:11;;-1:-1:-1;;;;;48640:11:0;;;48656:5;;;48639:23;-1:-1:-1;;;48519:2:0;48514:7;;;;48422:24;;;;48509:13;;;48569:2;48563:8;;;48582:2;48576:8;;;48562:23;48595:2;48589:8;;;;48562:36;48697:8;48347:18;;48388:11;;48959:13;;;;48422:24;48656:1;48660;48839:9;;;;48811:1;48783;48755;-1:-1:-1;;49019:1:0;49014:6;;49010:60;;;49045:5;;49010:60;49126:10;49139:2;49126:15;;49160:10;49173:2;49160:15;;49217:10;49230:2;49217:15;;49255:10;49268:2;49255:15;;49320:10;49333:2;-1:-1:-1;;;;;;;;;;;49333:78:0;49320:91;;49567:2;49502;-1:-1:-1;;;49502:60:0;49501:68;;49493:3;49446:2;-1:-1:-1;;;49446:42:0;49445:51;;49444:126;49438:132;;;;49628:10;49763:3;49698:2;-1:-1:-1;;;49698:60:0;49697:69;;49690:2;49643;-1:-1:-1;;;49643:42:0;49642:50;;49641:126;49628:139;;49798:11;49824:2;49818;:8;;49812:2;:15;49798:29;;49900:2;49894;:8;;49887:2;49880:3;:9;;49873:2;49866:3;:9;;49865:25;:38;-1:-1:-1;;;;;;;;;;;49864:116:0;49858:122;;;;30973:26976;;50065:10;50078:2;-1:-1:-1;;;;;;;;;;;50078:60:0;50065:73;;50169:11;50195:2;50189;:8;;50183:2;:15;50169:29;;50270:2;50264;:8;;50258:1;50251:3;:8;;50244:2;50237:3;:9;;50236:24;:37;-1:-1:-1;;;;;;;;;;;50235:115:0;50229:121;;;;30973:26976;;-1:-1:-1;;;;;;;;;;;50404:79:0;;;;50510:10;50523:2;-1:-1:-1;;;;;;;;;;;50523:60:0;50510:73;;50661:3;50655:2;:9;;50647:3;50618:2;-1:-1:-1;;;;;50618:24:0;50617:33;;50616:49;50610:55;;;;50723:10;50781:3;50775:2;:9;;50767:3;50738:2;-1:-1:-1;;;;;50738:24:0;50737:33;;50736:49;50723:62;;50816:11;50842:2;50836;:8;;50830:2;:15;50816:29;;50916:1;50910:2;:7;;50904:1;50897:3;:8;;50891:1;50884:3;:8;;50883:23;:35;-1:-1:-1;;;;;;;;;;;50882:95:0;50876:101;;;;30973:26976;;51062:11;51088:2;51082;:8;;51076:2;:15;51062:29;;51164:2;51158;:8;;51151:2;51144:3;:9;;51137:2;51130:3;:9;;51129:25;:38;-1:-1:-1;;;;;;;;;;;51128:98:0;51122:104;;;;30973:26976;-1:-1:-1;;;;;;;;;;;51280:61:0;;;;51378:2;51373;:7;51368:12;;30973:26976;;51453:10;51466:2;-1:-1:-1;;;;;;;;;;;51466:78:0;51453:91;;51700:2;51635;-1:-1:-1;;;51635:60:0;51634:68;;51626:3;51579:2;-1:-1:-1;;;51579:42:0;51578:51;;51577:126;51571:132;;;;51761:10;51896:3;51831:2;-1:-1:-1;;;51831:60:0;51830:69;;51823:2;51776;-1:-1:-1;;;51776:42:0;51775:50;;51774:126;51761:139;;51931:11;51957:2;51951;:8;;51945:2;:15;51931:29;;52033:2;52027;:8;;52020:2;52013:3;:9;;52006:2;51999:3;:9;;51998:25;:38;-1:-1:-1;;;;;;;;;;;51997:116:0;51991:122;;;;30973:26976;;52198:10;52211:2;-1:-1:-1;;;;;;;;;;;52211:60:0;52198:73;;52302:11;52328:2;52322;:8;;52316:2;:15;52302:29;;52403:2;52397;:8;;52391:1;52384:3;:8;;52377:2;52370:3;:9;;52369:24;:37;-1:-1:-1;;;;;;;;;;;52368:115:0;52362:121;;;;30973:26976;;-1:-1:-1;;;;;;;;;;;52537:79:0;;;;52643:10;52656:2;-1:-1:-1;;;;;;;;;;;52656:60:0;52643:73;;52794:3;52788:2;:9;;52780:3;52751:2;-1:-1:-1;;;;;52751:24:0;52750:33;;52749:49;52743:55;;;;52856:10;52914:3;52908:2;:9;;52900:3;52871:2;-1:-1:-1;;;;;52871:24:0;52870:33;;52869:49;52856:62;;52949:11;52975:2;52969;:8;;52963:2;:15;52949:29;;53049:1;53043:2;:7;;53037:1;53030:3;:8;;53024:1;53017:3;:8;;53016:23;:35;-1:-1:-1;;;;;;;;;;;53015:95:0;53009:101;;;;30973:26976;;53195:11;53221:2;53215;:8;;53209:2;:15;53195:29;;53297:2;53291;:8;;53284:2;53277:3;:9;;53270:2;53263:3;:9;;53262:25;:38;-1:-1:-1;;;;;;;;;;;53261:98:0;53255:104;;;;30973:26976;-1:-1:-1;;;;;;;;;;;53413:61:0;;;;53511:2;53506;:7;53501:12;;30973:26976;;53586:10;53599:2;-1:-1:-1;;;;;;;;;;;53599:78:0;53586:91;;53833:2;53768;-1:-1:-1;;;53768:60:0;53767:68;;53759:3;53712:2;-1:-1:-1;;;53712:42:0;53711:51;;53710:126;53704:132;;;;53894:10;54029:3;53964:2;-1:-1:-1;;;53964:60:0;53963:69;;53956:2;53909;-1:-1:-1;;;53909:42:0;53908:50;;53907:126;53894:139;;54064:11;54090:2;54084;:8;;54078:2;:15;54064:29;;54166:2;54160;:8;;54153:2;54146:3;:9;;54139:2;54132:3;:9;;54131:25;:38;-1:-1:-1;;;;;;;;;;;54130:116:0;54124:122;;;;30973:26976;;54331:10;54344:2;-1:-1:-1;;;;;;;;;;;54344:60:0;54331:73;;54435:11;54461:2;54455;:8;;54449:2;:15;54435:29;;54536:2;54530;:8;;54524:1;54517:3;:8;;54510:2;54503:3;:9;;54502:24;:37;-1:-1:-1;;;;;;;;;;;54501:115:0;54495:121;;;;30973:26976;;-1:-1:-1;;;;;;;;;;;54670:79:0;;;;54776:10;54789:2;-1:-1:-1;;;;;;;;;;;54789:60:0;54776:73;;54927:3;54921:2;:9;;54913:3;54884:2;-1:-1:-1;;;;;54884:24:0;54883:33;;54882:49;54876:55;;;;54989:10;55047:3;55041:2;:9;;55033:3;55004:2;-1:-1:-1;;;;;55004:24:0;55003:33;;55002:49;54989:62;;55082:11;55108:2;55102;:8;;55096:2;:15;55082:29;;55182:1;55176:2;:7;;55170:1;55163:3;:8;;55157:1;55150:3;:8;;55149:23;:35;-1:-1:-1;;;;;;;;;;;55148:95:0;55142:101;;;;30973:26976;;55328:11;55354:2;55348;:8;;55342:2;:15;55328:29;;55430:2;55424;:8;;55417:2;55410:3;:9;;55403:2;55396:3;:9;;55395:25;:38;-1:-1:-1;;;;;;;;;;;55394:98:0;55388:104;;;;30973:26976;-1:-1:-1;;;;;;;;;;;55546:61:0;;;;55644:2;55639;:7;55634:12;;30973:26976;;55719:10;55732:2;-1:-1:-1;;;;;;;;;;;55732:78:0;55719:91;;55966:2;55901;-1:-1:-1;;;55901:60:0;55900:68;;55892:3;55845:2;-1:-1:-1;;;55845:42:0;55844:51;;55843:126;55837:132;;;;56027:10;56162:3;56097:2;-1:-1:-1;;;56097:60:0;56096:69;;56089:2;56042;-1:-1:-1;;;56042:42:0;56041:50;;56040:126;56027:139;;56197:11;56223:2;56217;:8;;56211:2;:15;56197:29;;56299:2;56293;:8;;56286:2;56279:3;:9;;56272:2;56265:3;:9;;56264:25;:38;-1:-1:-1;;;;;;;;;;;56263:116:0;56257:122;;;;30973:26976;;56464:10;56477:2;-1:-1:-1;;;;;;;;;;;56477:60:0;56464:73;;56568:11;56594:2;56588;:8;;56582:2;:15;56568:29;;56669:2;56663;:8;;56657:1;56650:3;:8;;56643:2;56636:3;:9;;56635:24;:37;-1:-1:-1;;;;;;;;;;;56634:115:0;56628:121;;;;30973:26976;;-1:-1:-1;;;;;;;;;;;56803:79:0;;;;56909:10;56922:2;-1:-1:-1;;;;;;;;;;;56922:60:0;56909:73;;57060:3;57054:2;:9;;57046:3;57017:2;-1:-1:-1;;;;;57017:24:0;57016:33;;57015:49;57009:55;;;;57122:10;57180:3;57174:2;:9;;57166:3;57137:2;-1:-1:-1;;;;;57137:24:0;57136:33;;57135:49;57122:62;;57215:11;57241:2;57235;:8;;57229:2;:15;57215:29;;57315:1;57309:2;:7;;57303:1;57296:3;:8;;57290:1;57283:3;:8;;57282:23;:35;-1:-1:-1;;;;;;;;;;;57281:95:0;57275:101;;;;30973:26976;;57461:11;57487:2;57481;:8;;57475:2;:15;57461:29;;57563:2;57557;:8;;57550:2;57543:3;:9;;57536:2;57529:3;:9;;57528:25;:38;-1:-1:-1;;;;;;;;;;;57527:98:0;57521:104;;;;30973:26976;-1:-1:-1;;;;;;;;;;;57679:61:0;;;;57777:2;57772;:7;57767:12;;30973:26976;;57830:2;57825:7;;57860:2;57855:7;;30973:26976;;57905:2;57900:7;;57931:2;57926:7;;30973:26976;;30994:3;;;;;;;30973:26976;;;;57963:10;58179:3;58151:1;58155:19;58151:23;58150:32;;58142:3;58091:1;58095:19;58091:23;-1:-1:-1;;;;;58090:47:0;58089:56;;58082:2;58031:1;58035:19;58031:23;-1:-1:-1;;;;;58030:47:0;58029:55;;57978:1;57982:19;57978:23;-1:-1:-1;;;;;57977:47:0;57976:109;:170;:207;57963:220;;58376:1;58293:2;-1:-1:-1;;;;;;;;;;;58293:78:0;58292:85;;58286:1;58205:2;-1:-1:-1;;;;;;;;;;;58205:76:0;58204:83;;58203:175;58198:180;;58570:2;58487;-1:-1:-1;;;;;;;;;;;58487:78:0;58486:86;;58479:2;58400;-1:-1:-1;;;;;;;;;;;58400:74:0;58399:82;;58398:175;58393:180;;58760:2;58677;-1:-1:-1;;;;;;;;;;;58677:78:0;58676:86;;58669:2;58595;-1:-1:-1;;;;;;;;;;;58595:69:0;58594:77;;58593:170;58588:175;;58778:10;58994:3;58966:1;58970:19;58966:23;58965:32;;58957:3;58906:1;58910:19;58906:23;-1:-1:-1;;;;;58905:47:0;58904:56;;58897:2;58846:1;58850:19;58846:23;-1:-1:-1;;;;;58845:47:0;58844:55;;58793:1;58797:19;58793:23;-1:-1:-1;;;;;58792:47:0;58791:109;:170;:207;58778:220;;59191:1;59108:2;-1:-1:-1;;;;;;;;;;;59108:78:0;59107:85;;59101:1;59020:2;-1:-1:-1;;;;;;;;;;;59020:76:0;59019:83;;59018:175;59013:180;;59385:2;59302;-1:-1:-1;;;;;;;;;;;59302:78:0;59301:86;;59294:2;59215;-1:-1:-1;;;;;;;;;;;59215:74:0;59214:82;;59213:175;59208:180;;59575:2;59492;-1:-1:-1;;;;;;;;;;;59492:78:0;59491:86;;59484:2;59410;-1:-1:-1;;;;;;;;;;;59410:69:0;59409:77;;59408:170;59403:175;;-1:-1:-1;;;;;59598:246:0;;;;;-1:-1:-1;;;;;59620:72:0;59616:2;59609:159;59605:2;59598:246;59593:251;;26907:56456;;;;;;;;;;;;;;;60096:1;60013;60005:10;;-1:-1:-1;;;;;;;;;;;60005:86:0;60004:93;;59998:1;59917;59909:10;;-1:-1:-1;;;;;;;;;;;59909:84:0;59908:91;;59907:191;59899:200;;59895:204;;60310:2;60227:1;60219:10;;-1:-1:-1;;;;;;;;;;;60219:86:0;60218:94;;60211:2;60132:1;60124:10;;-1:-1:-1;;;;;;;;;;;60124:82:0;60123:90;;60122:191;60114:200;;60110:204;;60520:2;60437:1;60429:10;;-1:-1:-1;;;;;;;;;;;60429:86:0;60428:94;;60421:2;60347:1;60339:10;;-1:-1:-1;;;;;;;;;;;60339:77:0;60338:85;;60337:186;60329:195;;60325:199;;60721:2;60638:1;60630:10;;-1:-1:-1;;;;;;;;;;;60630:86:0;60629:94;;60622:2;60557:1;60549:10;;-1:-1:-1;;;;;;;;;;;60549:68:0;60548:76;;60547:177;60539:186;;60535:190;;60785:3;60779:1;60771:10;;:17;;60763:3;60757:1;60749:10;;:17;;60748:41;60740:50;;60736:54;;60801:10;60822:1;60814:10;;-1:-1:-1;;;;;60814:86:0;60801:99;;60911:10;60947:11;-1:-1:-1;;;;;60961:89:0;;;;;60972:2;60968;60961:89;60947:103;-1:-1:-1;61065:9:0;-1:-1:-1;;;;;;;;;;61084:3:0;61077:161;61065:173;-1:-1:-1;61253:9:0;-1:-1:-1;;;;;61277:73:0;61272:3;61265:161;61429:1;61265:165;;-1:-1:-1;61445:9:0;-1:-1:-1;;;;;61467:1:0;61464;61457:87;61445:99;;61568:11;61577:1;61568:8;:11::i;:::-;-1:-1:-1;61559:20:0;-1:-1:-1;;;;;;61610:2:0;61606;61599:89;61594:94;-1:-1:-1;;;;;;61819:73:0;61816:1;-1:-1:-1;;;;;61736:2:0;61732;61725:89;61718:175;61715:1;61708:261;61703:266;-1:-1:-1;;;;;;62086:1:0;-1:-1:-1;;;;;62006:2:0;62002;61995:89;61988:175;61984:179;;62187:1;62182;:6;62178:373;;62294:1;-1:-1:-1;;;;;62218:77:0;62213:1;:82;62209:143;;62327:5;62320:12;;;;;;;;;;;62209:143;-1:-1:-1;;;;;62386:73:0;62382:2;62375:160;62370:165;;62178:373;-1:-1:-1;;;;62602:3:0;62588:17;;;62582:1;62577:6;;62576:29;62572:145;;-1:-1:-1;;;;;62627:78:0;62572:145;62949:1;62761:91;;;-1:-1:-1;;;;;;;;;;;62761:91:0;-1:-1:-1;;;;;;;;;;;62857:93:0;;;;;;;;62760:191;;;;63163:2;62976:90;;;-1:-1:-1;;;;;;;;;;;62976:90:0;-1:-1:-1;;;;;;;;;;;63071:94:0;;;;;;;;62975:191;63373:2;63191:85;;;-1:-1:-1;;;;;;;;;;;63191:85:0;-1:-1:-1;;;;;;;;;;;63281:94:0;;;;;;;;63190:186;63574:2;63401:76;;;-1:-1:-1;;;;;;;;;;;63401:76:0;-1:-1:-1;;;;;;;;;;;63482:94:0;;;;;;;;63400:177;63638:3;63602:17;;;63624;;;63601:41;;-1:-1:-1;;;;;63658:87:0;;63654:132;;63769:5;63762:12;;;;;;;63654:132;63796:10;63817;63838;63859;63923:30;;:::i;:::-;63992:7;;;-1:-1:-1;;;;;64027:83:0;;;;;;63979:10;;64238:73;-1:-1:-1;;;;;64158:2:0;64154;64147:89;64140:247;64125:262;-1:-1:-1;64416:2:0;64447;64478:1;;64402:11;-1:-1:-1;;;;;64568:3:0;64563;64556:91;64543:104;-1:-1:-1;64666:10:0;-1:-1:-1;;;;;64691:3:0;64686;64679:91;64666:104;-1:-1:-1;64789:10:0;-1:-1:-1;;;;;64814:3:0;64809;64802:91;64789:104;-1:-1:-1;64912:11:0;-1:-1:-1;;;;;64937:2:0;64933;64926:89;64912:103;-1:-1:-1;65034:11:0;-1:-1:-1;;;;;65059:2:0;65055;65048:89;65034:103;-1:-1:-1;65156:12:0;-1:-1:-1;;;;;65182:2:0;65178;65171:89;65156:104;-1:-1:-1;65279:11:0;-1:-1:-1;;;;;65304:2:0;65300;65293:89;65279:103;;65414:4;65407;:11;65401:17;;65449:3;65443;:9;-1:-1:-1;;;;;65443:85:0;65437:91;;65559:3;65553;:9;65547:15;;-1:-1:-1;;;;;65587:173:0;;;;;65681:3;-1:-1:-1;;65605:79:0;65600:3;65594;:9;65587:173;65581:179;;26907:56456;;;;;;;65809:10;-1:-1:-1;;;;;65822:91:0;;;;;65834:3;65829;65822:91;65809:104;-1:-1:-1;65932:10:0;-1:-1:-1;;;;;65957:3:0;65952;65945:91;65932:104;-1:-1:-1;66055:10:0;-1:-1:-1;;;;;66080:3:0;66075;66068:91;66055:104;-1:-1:-1;66178:11:0;-1:-1:-1;;;;;66203:2:0;66199;66192:89;66178:103;-1:-1:-1;66300:11:0;-1:-1:-1;;;;;66325:2:0;66321;66314:89;66300:103;-1:-1:-1;66422:12:0;-1:-1:-1;;;;;66448:2:0;66444;66437:89;66422:104;-1:-1:-1;66545:11:0;-1:-1:-1;;;;;66570:2:0;66566;66559:89;66545:103;;66680:4;66673;:11;66667:17;;66715:3;66709;:9;-1:-1:-1;;;;;66709:85:0;66703:91;;66825:3;66819;:9;66813:15;;-1:-1:-1;;;;;66853:173:0;;;;;66947:3;-1:-1:-1;;66871:79:0;66866:3;66860;:9;66853:173;66847:179;;26907:56456;;;;;;;67075:10;-1:-1:-1;;;;;67088:91:0;;;;;67100:3;67095;67088:91;67075:104;-1:-1:-1;67198:10:0;-1:-1:-1;;;;;67223:3:0;67218;67211:91;67198:104;-1:-1:-1;67321:10:0;-1:-1:-1;;;;;67346:3:0;67341;67334:91;67321:104;-1:-1:-1;67444:11:0;-1:-1:-1;;;;;67469:2:0;67465;67458:89;67444:103;-1:-1:-1;67566:11:0;-1:-1:-1;;;;;67591:2:0;67587;67580:89;67566:103;-1:-1:-1;67688:12:0;-1:-1:-1;;;;;67714:2:0;67710;67703:89;67688:104;-1:-1:-1;67811:11:0;-1:-1:-1;;;;;67836:2:0;67832;67825:89;67811:103;;67946:4;67939;:11;67933:17;;67981:3;67975;:9;-1:-1:-1;;;;;67975:85:0;67969:91;;68091:3;68085;:9;68079:15;;-1:-1:-1;;;;;68119:173:0;;;;;68213:3;-1:-1:-1;;68137:79:0;68132:3;68126;:9;68119:173;68113:179;;26907:56456;;;;;;;68322:13;68338:1;68322:17;;68354:31;;:::i;:::-;-1:-1:-1;68388:6:0;68414:9;68409:2250;68454:10;;;;;-1:-1:-1;;;;;68619:3:0;68614;68607:91;68594:104;-1:-1:-1;68721:10:0;-1:-1:-1;;;;;68746:3:0;68741;68734:91;68721:104;-1:-1:-1;68848:10:0;-1:-1:-1;;;;;68873:3:0;68868;68861:91;68848:104;-1:-1:-1;;;;;;68992:3:0;68987;68980:91;69291:10;;;;:13;69099:7;;;;-1:-1:-1;69134:7:0;;;;-1:-1:-1;;;;;69134:83:0;;-1:-1:-1;69134:83:0;;-1:-1:-1;69246:7:0;;;-1:-1:-1;69099:7:0;;69305:1;69291:16;;;;;;;;;;:21;69350:2;69331:7;69339:1;69331:10;;;;69342:1;69331:13;;;;69345:1;69331:16;;;;;;;;;;:21;-1:-1:-1;;;;;69401:73:0;69397:2;69390:160;69371:10;;;;:13;;;69385:1;69371:16;;;;;;;;;;:179;69569:10;;:13;69588:3;;69583:1;69569:16;;;;;;;;;;:22;69629:5;69610:7;69618:1;69610:10;;;;69621:1;69610:13;;;;69624:1;69610:16;;;;;;;;;;:24;-1:-1:-1;;;;;69675:3:0;69668:5;69661:93;69653:101;;69777:1;69782;69777:6;69773:60;;;69808:5;;;;;;69773:60;69851:10;-1:-1:-1;;;;;69875:2:0;69871;69864:89;69851:102;-1:-1:-1;69972:10:0;-1:-1:-1;;;;;69996:2:0;69992;69985:89;69972:102;-1:-1:-1;70093:10:0;-1:-1:-1;;;;;70117:4:0;70113:2;70106:91;70093:104;;70227:2;70222;:7;-1:-1:-1;;;;;70222:83:0;70216:89;;-1:-1:-1;;;;;70330:90:0;;;;;70342:2;70337:3;70330:90;70445:7;;;;-1:-1:-1;70324:96:0;-1:-1:-1;;;;;;70565:2:0;-1:-1:-1;;;;;70489:78:0;70484:3;70477:166;70471:172;-1:-1:-1;;68430:3:0;;;;;-1:-1:-1;68409:2250:0;;-1:-1:-1;;;;;68409:2250:0;;;70673:9;70710:15;70719:5;70710:8;:15::i;:::-;70697:28;;-1:-1:-1;70697:28:0;-1:-1:-1;;;;;;70758:5:0;70751;70744:95;70736:103;-1:-1:-1;;;;;;70872:5:0;70865;70858:95;70850:103;-1:-1:-1;;;;;;70986:5:0;70979;70972:95;70964:103;-1:-1:-1;;;;;;71100:5:0;71093;71086:95;71078:103;-1:-1:-1;;;;;;71214:5:0;71207;71200:95;71192:103;-1:-1:-1;;;;;;71332:1:0;71325:5;71318:91;71310:99;-1:-1:-1;71441:1:0;71424:822;71498:10;;;:13;;71469:12;;-1:-1:-1;;;;;71516:73:0;71512:1;71498:16;;;;;;;;;;;71491:5;71484:106;71635:10;;;;:13;71469:121;;-1:-1:-1;;;;;;71659:73:0;71469:121;;71649:1;71635:16;;;;;;;;;;;71628:105;71609:10;;;;:13;71623:1;71609:16;;;;;;;;;;:124;-1:-1:-1;;;;;71796:4:0;71778:7;71786:1;71778:10;;;;71789:1;71778:13;;;;71792:1;71778:16;;;;;;;;;;;71771:105;71752:10;;;;;:13;;71766:1;71752:16;;;;;;;;;;:124;-1:-1:-1;;;;;71939:4:0;71921:7;71929:1;71921:10;;;;71932:1;71921:13;;;;71935:1;71921:16;;;;;;;;;;;71914:105;71895:10;;;;:13;;;71909:1;71895:16;;;;;;;;;;:124;72042:6;72038:60;;72073:5;;;72038:60;72138:10;;:13;-1:-1:-1;;;;;72156:73:0;72152:1;72138:16;;;;;;;;;;;72131:5;72124:106;72116:114;-1:-1:-1;;;;71445:3:0;71424:822;;;;72260:1818;;;;;;;;;;;;;;;;72275:73;72260:1818;;;;72350:73;72260:1818;;;;72425:73;72260:1818;;;;72500:73;72260:1818;;;;72575:73;72260:1818;;;;72650:73;72260:1818;;;;72725:73;72260:1818;;;;72800:73;72260:1818;;;;;;;;;;;;;;;72877:73;72260:1818;;;;72952:73;72260:1818;;;;73027:73;72260:1818;;;;73102:73;72260:1818;;;;73177:73;72260:1818;;;;73252:73;72260:1818;;;;73327:73;72260:1818;;;;73402:73;72260:1818;;;;;;;;;;;;;;;73479:73;72260:1818;;;;73554:73;72260:1818;;;;73629:73;72260:1818;;;;73704:72;72260:1818;;;;73778:73;72260:1818;;;;73853:73;72260:1818;;;;73928:73;72260:1818;;;;74003:73;72260:1818;;;;;;:7;72268:1;72260:10;;;;;;;;;;:1818;;;;26907:56456;;;;;;;;;;74153:10;74180:1;74174;74166:10;;:15;;74153:28;;74196:11;74210:2;74215:73;74210:78;74196:92;;74303:11;74333;74347:1;74333:15;;74363:11;74377:1;74363:15;;74393:11;74407:1;74393:15;;74428:9;74440:3;74428:15;;74423:6662;74484:1;:6;;74514:8;;;74513:15;74509:1743;;74553:10;;;;;-1:-1:-1;;;;;74737:3:0;74732;74725:91;74712:104;-1:-1:-1;74843:10:0;-1:-1:-1;;;;;74868:3:0;74863;74856:91;74843:104;;74984:2;74979;:7;74974:12;;75023:2;75018;:7;-1:-1:-1;;;;;75018:83:0;75013:88;;-1:-1:-1;;;;;75133:91:0;;;;;75145:3;75140;75133:91;75128:96;-1:-1:-1;;;;;;75268:3:0;75263;75256:91;75251:96;;74509:1743;;75393:9;75412:1;75406:2;:7;;75417:1;75405:13;75393:25;;75454:1;75449;:6;;75447:9;75441:15;;;;75479:31;;:::i;:::-;-1:-1:-1;75566:10:0;;;:13;;75513:6;;75542:10;;-1:-1:-1;;;;;75584:73:0;75580:1;75566:16;;;;;;;;;;;75562:2;75555:103;75705:10;;:13;75542:116;;-1:-1:-1;75681:10:0;;-1:-1:-1;;;;;75723:73:0;75719:1;75705:16;;;;;;;;;;;75701:2;75694:103;75844:10;;:13;;;75681:116;;-1:-1:-1;75820:10:0;;-1:-1:-1;;;;;75862:73:0;75858:1;75844:16;;;;;;;;;;;75840:2;75833:103;75820:116;;75970:2;75965;:7;-1:-1:-1;;;;;75965:83:0;75959:89;;76082:2;76077;:7;76071:13;;76118:2;76113;:7;76107:13;;76154:2;76149;:7;-1:-1:-1;;;;;76149:83:0;76143:89;;74509:1743;;;;;;;;;;76275:9;;;76274:16;76270:1746;;76315:10;;;;;-1:-1:-1;;;;;76499:3:0;76494;76487:91;76474:104;-1:-1:-1;76605:10:0;-1:-1:-1;;;;;76630:3:0;76625;76618:91;76605:104;;76746:2;76741;:7;76736:12;;76785:2;76780;:7;-1:-1:-1;;;;;76780:83:0;76775:88;;-1:-1:-1;;;;;76895:91:0;;;;;76907:3;76902;76895:91;76890:96;-1:-1:-1;;;;;;77030:3:0;77025;77018:91;77180:1;77213:6;;;77211:9;77204:16;;;77013:96;;-1:-1:-1;77168:8:0;;;77167:14;;-1:-1:-1;77243:31:0;;-1:-1:-1;77243:31:0;:::i;:::-;-1:-1:-1;77330:10:0;;;;:13;77277:6;;77306:10;;-1:-1:-1;;;;;77348:73:0;77344:1;77330:16;;;;;;;;;;;77326:2;77319:103;77469:10;;;;;:13;;77306:116;;-1:-1:-1;77445:10:0;;-1:-1:-1;;;;;77487:73:0;77483:1;77469:16;;;;;;;;;;;77465:2;77458:103;77608:10;;;;:13;;;77445:116;;-1:-1:-1;77584:10:0;;-1:-1:-1;;;;;77626:73:0;77622:1;77608:16;;;;;;;;;;;77604:2;77597:103;77584:116;;77734:2;77729;:7;-1:-1:-1;;;;;77729:83:0;77723:89;;77846:2;77841;:7;-1:-1:-1;;;;;77841:83:0;77835:89;;77958:2;77953;:7;77947:13;;77994:2;77989;:7;77983:13;;76270:1746;;;;;;;;;;78038:6;78034:1718;;78069:10;;;;;-1:-1:-1;;;;;78253:3:0;78248;78241:91;78228:104;-1:-1:-1;78359:10:0;-1:-1:-1;;;;;78384:3:0;78379;78372:91;78359:104;;78500:2;78495;:7;78490:12;;78539:2;78534;:7;-1:-1:-1;;;;;78534:83:0;78529:88;;-1:-1:-1;;;;;78649:91:0;;;;;78661:3;78656;78649:91;78644:96;-1:-1:-1;;;;;;78784:3:0;78779;78772:91;78767:96;-1:-1:-1;;;78927:1:0;78921:7;;78951:31;;:::i;:::-;-1:-1:-1;79038:10:0;;;;:13;78985:6;;79014:10;;-1:-1:-1;;;;;79056:73:0;79052:1;79038:16;;;;;;;;;;;79034:2;79027:103;79177:10;;;;;:13;;79014:116;;-1:-1:-1;79153:10:0;;-1:-1:-1;;;;;79195:73:0;79191:1;79177:16;;;;;;;;;;;79173:2;79166:103;79316:10;;;;:13;;;79153:116;;-1:-1:-1;79292:10:0;;-1:-1:-1;;;;;79334:73:0;79330:1;79316:16;;;;;;;;;;;79312:2;79305:103;79292:116;;79442:2;79437;:7;-1:-1:-1;;;;;79437:83:0;79431:89;;79554:2;79549;:7;-1:-1:-1;;;;;79549:83:0;79543:89;;79666:2;79661;:7;79655:13;;79702:2;79697;:7;79691:13;;79727:5;;;;;;;;;;;;78034:1718;79793:10;-1:-1:-1;;;;;79818:3:0;79813;79806:91;79793:104;-1:-1:-1;79920:10:0;-1:-1:-1;;;;;79945:3:0;79940;79933:91;79920:104;-1:-1:-1;80047:10:0;-1:-1:-1;;;;;80072:3:0;80067;80060:91;80047:104;-1:-1:-1;80174:11:0;-1:-1:-1;;;;;80199:2:0;80195;80188:89;80174:103;-1:-1:-1;80300:11:0;-1:-1:-1;;;;;80325:2:0;80321;80314:89;80300:103;-1:-1:-1;80426:12:0;-1:-1:-1;;;;;80452:2:0;80448;80441:89;80426:104;-1:-1:-1;80553:11:0;-1:-1:-1;;;;;80578:2:0;80574;80567:89;80553:103;;80692:4;80685;:11;80679:17;;80731:3;80725;:9;-1:-1:-1;;;;;80725:85:0;80719:91;;80845:3;80839;:9;80833:15;;-1:-1:-1;;;;;80877:173:0;;;;;80971:3;-1:-1:-1;;80895:79:0;80890:3;80884;:9;80877:173;80871:179;-1:-1:-1;;;;74446:3:0;;;;-1:-1:-1;74423:6662:0;;-1:-1:-1;;;;;;74423:6662:0;;-1:-1:-1;81104:3:0;;-1:-1:-1;81127:3:0;;-1:-1:-1;81150:3:0;-1:-1:-1;81173:3:0;-1:-1:-1;81238:10:0;;-1:-1:-1;81238:10:0;;-1:-1:-1;81264:99:0;-1:-1:-1;;;;;81284:2:0;81280;81273:89;81264:8;:99::i;:::-;81237:126;;;;-1:-1:-1;;;;;81379:89:0;;;;;81390:2;81386;81379:89;81374:94;-1:-1:-1;;;;;;81495:2:0;81491;81484:89;81479:94;-1:-1:-1;;;;;;81600:2:0;81596;81589:89;81584:94;-1:-1:-1;;;;;;81705:2:0;81701;81694:89;81689:94;-1:-1:-1;;;;;;81810:2:0;81806;81799:89;81794:94;-1:-1:-1;;;;;;81915:2:0;81911;81904:89;81899:94;-1:-1:-1;;;;;;82035:73:0;82031:2;82027;82020:89;82016:2;82009:176;82004:181;-1:-1:-1;;;;;;82227:73:0;82223:2;82219;82212:89;82208:2;82201:176;82420:3;82414:9;;;;82408:16;;;82637:1;82449:91;;;-1:-1:-1;;;;;;;;;;;82449:91:0;-1:-1:-1;;;;;;;;;;;82545:93:0;;;;;;;;82448:191;82851:2;82664:90;;;-1:-1:-1;;;;;;;;;;;82664:90:0;-1:-1:-1;;;;;;;;;;;82759:94:0;;;;;;;;82663:191;83061:2;82879:85;;;-1:-1:-1;;;;;;;;;;;82879:85:0;-1:-1:-1;;;;;;;;;;;82969:94:0;;;;;;;;82878:186;83262:2;83089:76;;;-1:-1:-1;;;;;;;;;;;83089:76:0;-1:-1:-1;;;;;;;;;;;83170:94:0;;;;;;;;83088:177;83326:3;83290:17;;;83312;;;83289:41;83349:6;;;-1:-1:-1;;;;;;;;;;26907:56456:0;;;;;;;;:::o;290:26609::-;341:14;;-1:-1:-1;;;;;397:1:0;394;387:87;381:93;-1:-1:-1;;;;;;506:3:0;501;494:91;485:100;-1:-1:-1;;;;;;711:1:0;-1:-1:-1;;;;;627:6:0;619;612:97;605:183;596:192;-1:-1:-1;;;;;;820:3:0;812:6;805:94;799:100;-1:-1:-1;;;;;;1019:6:0;-1:-1:-1;;;;;938:3:0;933;926:91;919:182;910:191;-1:-1:-1;1112:9:0;-1:-1:-1;;;;;1139:6:0;1131;1124:97;1112:109;-1:-1:-1;;;;;;1246:1:0;1243;1236:87;1232:91;-1:-1:-1;;;;;;1348:1:0;1345;1338:87;1334:91;-1:-1:-1;;;;;;1450:1:0;1447;1440:87;1436:91;-1:-1:-1;;;;;;1552:1:0;1549;1542:87;1538:91;-1:-1:-1;;;;;;1664:1:0;1656:6;1649:92;1640:101;-1:-1:-1;;;;;;1771:6:0;1763;1756:97;1752:101;-1:-1:-1;;;;;;1878:1:0;1875;1868:87;1864:91;-1:-1:-1;;;;;;1980:1:0;1977;1970:87;1966:91;-1:-1:-1;;;;;;2082:1:0;2079;2072:87;2068:91;-1:-1:-1;;;;;;2184:1:0;2181;2174:87;2170:91;-1:-1:-1;;;;;;2286:1:0;2283;2276:87;2272:91;-1:-1:-1;;;;;;2388:1:0;2385;2378:87;2374:91;-1:-1:-1;;;;;;2490:1:0;2487;2480:87;2476:91;-1:-1:-1;;;;;;2592:1:0;2589;2582:87;2578:91;-1:-1:-1;;;;;;2694:1:0;2691;2684:87;2680:91;-1:-1:-1;;;;;;2801:1:0;2793:6;2786:92;2782:96;-1:-1:-1;2889:9:0;-1:-1:-1;;;;;2911:1:0;2908;2901:87;2889:99;-1:-1:-1;;;;;;3013:1:0;3010;3003:87;2999:91;-1:-1:-1;;;;;;3115:1:0;3112;3105:87;3101:91;-1:-1:-1;;;;;;3217:1:0;3214;3207:87;3203:91;-1:-1:-1;;;;;;3319:1:0;3316;3309:87;3305:91;-1:-1:-1;;;;;;3421:1:0;3418;3411:87;3407:91;-1:-1:-1;;;;;;3523:1:0;3520;3513:87;3509:91;-1:-1:-1;;;;;;3625:1:0;3622;3615:87;3611:91;-1:-1:-1;;;;;;3727:1:0;3724;3717:87;3713:91;-1:-1:-1;;;;;;3829:1:0;3826;3819:87;3815:91;-1:-1:-1;;;;;;3931:1:0;3928;3921:87;3917:91;-1:-1:-1;;;;;;4033:1:0;4030;4023:87;4019:91;-1:-1:-1;;;;;;4135:1:0;4132;4125:87;4121:91;-1:-1:-1;;;;;;4237:1:0;4234;4227:87;4223:91;-1:-1:-1;;;;;;4339:1:0;4336;4329:87;4325:91;-1:-1:-1;;;;;;4441:1:0;4438;4431:87;4427:91;-1:-1:-1;;;;;;4543:1:0;4540;4533:87;4529:91;-1:-1:-1;;;;;;4645:1:0;4642;4635:87;4631:91;-1:-1:-1;;;;;;4747:1:0;4744;4737:87;4733:91;-1:-1:-1;;;;;;4849:1:0;4846;4839:87;4835:91;-1:-1:-1;;;;;;4951:1:0;4948;4941:87;4937:91;-1:-1:-1;;;;;;5053:1:0;5050;5043:87;5039:91;-1:-1:-1;;;;;;5155:1:0;5152;5145:87;5141:91;-1:-1:-1;;;;;;5257:1:0;5254;5247:87;5243:91;-1:-1:-1;;;;;;5359:1:0;5356;5349:87;5345:91;-1:-1:-1;;;;;;5461:1:0;5458;5451:87;5447:91;-1:-1:-1;;;;;;5563:1:0;5560;5553:87;5549:91;-1:-1:-1;;;;;;5665:1:0;5662;5655:87;5651:91;-1:-1:-1;;;;;;5767:1:0;5764;5757:87;5753:91;-1:-1:-1;;;;;;5869:1:0;5866;5859:87;5855:91;-1:-1:-1;;;;;;5971:1:0;5968;5961:87;5957:91;-1:-1:-1;;;;;;6083:1:0;6075:6;6068:92;6059:101;-1:-1:-1;;;;;;6190:6:0;6182;6175:97;6171:101;-1:-1:-1;;;;;;6297:1:0;6294;6287:87;6283:91;-1:-1:-1;;;;;;6399:1:0;6396;6389:87;6385:91;-1:-1:-1;;;;;;6501:1:0;6498;6491:87;6487:91;-1:-1:-1;;;;;;6603:1:0;6600;6593:87;6589:91;-1:-1:-1;;;;;;6705:1:0;6702;6695:87;6691:91;-1:-1:-1;;;;;;6807:1:0;6804;6797:87;6793:91;-1:-1:-1;;;;;;6909:1:0;6906;6899:87;6895:91;-1:-1:-1;;;;;;7011:1:0;7008;7001:87;6997:91;-1:-1:-1;;;;;;7113:1:0;7110;7103:87;7099:91;-1:-1:-1;;;;;;7215:1:0;7212;7205:87;7201:91;-1:-1:-1;;;;;;7317:1:0;7314;7307:87;7303:91;-1:-1:-1;;;;;;7419:1:0;7416;7409:87;7405:91;-1:-1:-1;;;;;;7521:1:0;7518;7511:87;7507:91;-1:-1:-1;;;;;;7623:1:0;7620;7613:87;7609:91;-1:-1:-1;;;;;;7725:1:0;7722;7715:87;7711:91;-1:-1:-1;;;;;;7827:1:0;7824;7817:87;7813:91;-1:-1:-1;;;;;;7929:1:0;7926;7919:87;7915:91;-1:-1:-1;;;;;;8031:1:0;8028;8021:87;8017:91;-1:-1:-1;;;;;;8133:1:0;8130;8123:87;8119:91;-1:-1:-1;;;;;;8235:1:0;8232;8225:87;8221:91;-1:-1:-1;;;;;;8337:1:0;8334;8327:87;8323:91;-1:-1:-1;;;;;;8439:1:0;8436;8429:87;8425:91;-1:-1:-1;;;;;;8541:1:0;8538;8531:87;8527:91;-1:-1:-1;;;;;;8643:1:0;8640;8633:87;8629:91;-1:-1:-1;;;;;;8745:1:0;8742;8735:87;8731:91;-1:-1:-1;;;;;;8847:1:0;8844;8837:87;8833:91;-1:-1:-1;;;;;;8949:1:0;8946;8939:87;8935:91;-1:-1:-1;;;;;;9051:1:0;9048;9041:87;9037:91;-1:-1:-1;;;;;;9153:1:0;9150;9143:87;9139:91;-1:-1:-1;;;;;;9255:1:0;9252;9245:87;9241:91;-1:-1:-1;;;;;;9357:1:0;9354;9347:87;9343:91;-1:-1:-1;;;;;;9459:1:0;9456;9449:87;9445:91;-1:-1:-1;;;;;;9561:1:0;9558;9551:87;9547:91;-1:-1:-1;;;;;;9663:1:0;9660;9653:87;9649:91;-1:-1:-1;;;;;;9765:1:0;9762;9755:87;9751:91;-1:-1:-1;;;;;;9867:1:0;9864;9857:87;9853:91;-1:-1:-1;;;;;;9969:1:0;9966;9959:87;9955:91;-1:-1:-1;;;;;;10071:1:0;10068;10061:87;10057:91;-1:-1:-1;;;;;;10173:1:0;10170;10163:87;10159:91;-1:-1:-1;;;;;;10275:1:0;10272;10265:87;10261:91;-1:-1:-1;;;;;;10377:1:0;10374;10367:87;10363:91;-1:-1:-1;;;;;;10479:1:0;10476;10469:87;10465:91;-1:-1:-1;;;;;;10581:1:0;10578;10571:87;10567:91;-1:-1:-1;;;;;;10683:1:0;10680;10673:87;10669:91;-1:-1:-1;;;;;;10785:1:0;10782;10775:87;10771:91;-1:-1:-1;;;;;;10887:1:0;10884;10877:87;10873:91;-1:-1:-1;;;;;;10989:1:0;10986;10979:87;10975:91;-1:-1:-1;;;;;;11091:1:0;11088;11081:87;11077:91;-1:-1:-1;;;;;;11193:1:0;11190;11183:87;11179:91;-1:-1:-1;;;;;;11300:1:0;11292:6;11285:92;11281:96;-1:-1:-1;;;;;;11402:1:0;11399;11392:87;11388:91;-1:-1:-1;;;;;;11504:1:0;11501;11494:87;11490:91;-1:-1:-1;;;;;;11606:1:0;11603;11596:87;11592:91;-1:-1:-1;;;;;;11708:1:0;11705;11698:87;11694:91;-1:-1:-1;;;;;;11810:1:0;11807;11800:87;11796:91;-1:-1:-1;;;;;;11912:1:0;11909;11902:87;11898:91;-1:-1:-1;;;;;;12014:1:0;12011;12004:87;12000:91;-1:-1:-1;;;;;;12116:1:0;12113;12106:87;12102:91;-1:-1:-1;;;;;;12218:1:0;12215;12208:87;12204:91;-1:-1:-1;;;;;;12320:1:0;12317;12310:87;12306:91;-1:-1:-1;;;;;;12422:1:0;12419;12412:87;12408:91;-1:-1:-1;;;;;;12524:1:0;12521;12514:87;12510:91;-1:-1:-1;;;;;;12626:1:0;12623;12616:87;12612:91;-1:-1:-1;;;;;;12728:1:0;12725;12718:87;12714:91;-1:-1:-1;;;;;;12830:1:0;12827;12820:87;12816:91;-1:-1:-1;;;;;;12932:1:0;12929;12922:87;12918:91;-1:-1:-1;;;;;;13034:1:0;13031;13024:87;13020:91;-1:-1:-1;;;;;;13136:1:0;13133;13126:87;13122:91;-1:-1:-1;;;;;;13238:1:0;13235;13228:87;13224:91;-1:-1:-1;;;;;;13340:1:0;13337;13330:87;13326:91;-1:-1:-1;;;;;;13442:1:0;13439;13432:87;13428:91;-1:-1:-1;;;;;;13544:1:0;13541;13534:87;13530:91;-1:-1:-1;;;;;;13646:1:0;13643;13636:87;13632:91;-1:-1:-1;;;;;;13748:1:0;13745;13738:87;13734:91;-1:-1:-1;;;;;;13850:1:0;13847;13840:87;13836:91;-1:-1:-1;;;;;;13952:1:0;13949;13942:87;13938:91;-1:-1:-1;;;;;;14054:1:0;14051;14044:87;14040:91;-1:-1:-1;;;;;;14156:1:0;14153;14146:87;14142:91;-1:-1:-1;;;;;;14258:1:0;14255;14248:87;14244:91;-1:-1:-1;;;;;;14360:1:0;14357;14350:87;14346:91;-1:-1:-1;;;;;;14462:1:0;14459;14452:87;14448:91;-1:-1:-1;;;;;;14564:1:0;14561;14554:87;14550:91;-1:-1:-1;;;;;;14666:1:0;14663;14656:87;14652:91;-1:-1:-1;;;;;;14768:1:0;14765;14758:87;14754:91;-1:-1:-1;;;;;;14870:1:0;14867;14860:87;14856:91;-1:-1:-1;;;;;;14972:1:0;14969;14962:87;14958:91;-1:-1:-1;;;;;;15074:1:0;15071;15064:87;15060:91;-1:-1:-1;;;;;;15176:1:0;15173;15166:87;15162:91;-1:-1:-1;;;;;;15278:1:0;15275;15268:87;15264:91;-1:-1:-1;;;;;;15380:1:0;15377;15370:87;15366:91;-1:-1:-1;;;;;;15482:1:0;15479;15472:87;15468:91;-1:-1:-1;;;;;;15584:1:0;15581;15574:87;15570:91;-1:-1:-1;;;;;;15686:1:0;15683;15676:87;15672:91;-1:-1:-1;;;;;;15788:1:0;15785;15778:87;15774:91;-1:-1:-1;;;;;;15890:1:0;15887;15880:87;15876:91;-1:-1:-1;;;;;;15992:1:0;15989;15982:87;15978:91;-1:-1:-1;;;;;;16094:1:0;16091;16084:87;16080:91;-1:-1:-1;;;;;;16196:1:0;16193;16186:87;16182:91;-1:-1:-1;;;;;;16298:1:0;16295;16288:87;16284:91;-1:-1:-1;;;;;;16400:1:0;16397;16390:87;16386:91;-1:-1:-1;;;;;;16502:1:0;16499;16492:87;16488:91;-1:-1:-1;;;;;;16604:1:0;16601;16594:87;16590:91;-1:-1:-1;;;;;;16706:1:0;16703;16696:87;16692:91;-1:-1:-1;;;;;;16808:1:0;16805;16798:87;16794:91;-1:-1:-1;;;;;;16910:1:0;16907;16900:87;16896:91;-1:-1:-1;;;;;;17012:1:0;17009;17002:87;16998:91;-1:-1:-1;;;;;;17114:1:0;17111;17104:87;17100:91;-1:-1:-1;;;;;;17216:1:0;17213;17206:87;17202:91;-1:-1:-1;;;;;;17318:1:0;17315;17308:87;17304:91;-1:-1:-1;;;;;;17420:1:0;17417;17410:87;17406:91;-1:-1:-1;;;;;;17522:1:0;17519;17512:87;17508:91;-1:-1:-1;;;;;;17624:1:0;17621;17614:87;17610:91;-1:-1:-1;;;;;;17726:1:0;17723;17716:87;17712:91;-1:-1:-1;;;;;;17828:1:0;17825;17818:87;17814:91;-1:-1:-1;;;;;;17930:1:0;17927;17920:87;17916:91;-1:-1:-1;;;;;;18032:1:0;18029;18022:87;18018:91;-1:-1:-1;;;;;;18134:1:0;18131;18124:87;18120:91;-1:-1:-1;;;;;;18236:1:0;18233;18226:87;18222:91;-1:-1:-1;;;;;;18338:1:0;18335;18328:87;18324:91;-1:-1:-1;;;;;;18440:1:0;18437;18430:87;18426:91;-1:-1:-1;;;;;;18542:1:0;18539;18532:87;18528:91;-1:-1:-1;;;;;;18644:1:0;18641;18634:87;18630:91;-1:-1:-1;;;;;;18746:1:0;18743;18736:87;18732:91;-1:-1:-1;;;;;;18848:1:0;18845;18838:87;18834:91;-1:-1:-1;;;;;;18950:1:0;18947;18940:87;18936:91;-1:-1:-1;;;;;;19052:1:0;19049;19042:87;19038:91;-1:-1:-1;;;;;;19154:1:0;19151;19144:87;19140:91;-1:-1:-1;;;;;;19256:1:0;19253;19246:87;19242:91;-1:-1:-1;;;;;;19358:1:0;19355;19348:87;19344:91;-1:-1:-1;;;;;;19460:1:0;19457;19450:87;19446:91;-1:-1:-1;;;;;;19562:1:0;19559;19552:87;19548:91;-1:-1:-1;;;;;;19664:1:0;19661;19654:87;19650:91;-1:-1:-1;;;;;;19766:1:0;19763;19756:87;19752:91;-1:-1:-1;;;;;;19868:1:0;19865;19858:87;19854:91;-1:-1:-1;;;;;;19970:1:0;19967;19960:87;19956:91;-1:-1:-1;;;;;;20072:1:0;20069;20062:87;20058:91;-1:-1:-1;;;;;;20174:1:0;20171;20164:87;20160:91;-1:-1:-1;;;;;;20276:1:0;20273;20266:87;20262:91;-1:-1:-1;;;;;;20378:1:0;20375;20368:87;20364:91;-1:-1:-1;;;;;;20480:1:0;20477;20470:87;20466:91;-1:-1:-1;;;;;;20582:1:0;20579;20572:87;20568:91;-1:-1:-1;;;;;;20684:1:0;20681;20674:87;20670:91;-1:-1:-1;;;;;;20786:1:0;20783;20776:87;20772:91;-1:-1:-1;;;;;;20888:1:0;20885;20878:87;20874:91;-1:-1:-1;;;;;;20990:1:0;20987;20980:87;20976:91;-1:-1:-1;;;;;;21092:1:0;21089;21082:87;21078:91;-1:-1:-1;;;;;;21194:1:0;21191;21184:87;21180:91;-1:-1:-1;;;;;;21296:1:0;21293;21286:87;21282:91;-1:-1:-1;;;;;;21398:1:0;21395;21388:87;21384:91;-1:-1:-1;;;;;;21500:1:0;21497;21490:87;21486:91;-1:-1:-1;;;;;;21602:1:0;21599;21592:87;21588:91;-1:-1:-1;;;;;;21704:1:0;21701;21694:87;21690:91;-1:-1:-1;;;;;;21806:1:0;21803;21796:87;21792:91;-1:-1:-1;;;;;;21908:1:0;21905;21898:87;21894:91;-1:-1:-1;;;;;;22010:1:0;22007;22000:87;21996:91;-1:-1:-1;;;;;;22112:1:0;22109;22102:87;22098:91;-1:-1:-1;;;;;;22214:1:0;22211;22204:87;22200:91;-1:-1:-1;;;;;;22316:1:0;22313;22306:87;22302:91;-1:-1:-1;;;;;;22418:1:0;22415;22408:87;22404:91;-1:-1:-1;;;;;;22520:1:0;22517;22510:87;22506:91;-1:-1:-1;;;;;;22622:1:0;22619;22612:87;22608:91;-1:-1:-1;;;;;;22724:1:0;22721;22714:87;22710:91;-1:-1:-1;;;;;;22826:1:0;22823;22816:87;22812:91;-1:-1:-1;;;;;;22928:1:0;22925;22918:87;22914:91;-1:-1:-1;;;;;;23030:1:0;23027;23020:87;23016:91;-1:-1:-1;;;;;;23132:1:0;23129;23122:87;23118:91;-1:-1:-1;;;;;;23234:1:0;23231;23224:87;23220:91;-1:-1:-1;;;;;;23336:1:0;23333;23326:87;23322:91;-1:-1:-1;;;;;;23438:1:0;23435;23428:87;23424:91;-1:-1:-1;;;;;;23540:1:0;23537;23530:87;23526:91;-1:-1:-1;;;;;;23642:1:0;23639;23632:87;23628:91;-1:-1:-1;;;;;;23744:1:0;23741;23734:87;23730:91;-1:-1:-1;;;;;;23846:1:0;23843;23836:87;23832:91;-1:-1:-1;;;;;;23948:1:0;23945;23938:87;23934:91;-1:-1:-1;;;;;;24050:1:0;24047;24040:87;24036:91;-1:-1:-1;;;;;;24152:1:0;24149;24142:87;24138:91;-1:-1:-1;;;;;;24254:1:0;24251;24244:87;24240:91;-1:-1:-1;;;;;;24356:1:0;24353;24346:87;24342:91;-1:-1:-1;;;;;;24458:1:0;24455;24448:87;24444:91;-1:-1:-1;;;;;;24560:1:0;24557;24550:87;24546:91;-1:-1:-1;;;;;;24662:1:0;24659;24652:87;24648:91;-1:-1:-1;;;;;;24764:1:0;24761;24754:87;24750:91;-1:-1:-1;;;;;;24866:1:0;24863;24856:87;24852:91;-1:-1:-1;;;;;;24968:1:0;24965;24958:87;24954:91;-1:-1:-1;;;;;;25070:1:0;25067;25060:87;25056:91;-1:-1:-1;;;;;;25172:1:0;25169;25162:87;25158:91;-1:-1:-1;;;;;;25274:1:0;25271;25264:87;25260:91;-1:-1:-1;;;;;;25376:1:0;25373;25366:87;25362:91;-1:-1:-1;;;;;;25478:1:0;25475;25468:87;25464:91;-1:-1:-1;;;;;;25580:1:0;25577;25570:87;25566:91;-1:-1:-1;;;;;;25682:1:0;25679;25672:87;25668:91;-1:-1:-1;;;;;;25784:1:0;25781;25774:87;25770:91;-1:-1:-1;;;;;;25886:1:0;25883;25876:87;25872:91;-1:-1:-1;;;;;;25988:1:0;25985;25978:87;25974:91;-1:-1:-1;;;;;;26090:1:0;26087;26080:87;26076:91;-1:-1:-1;;;;;;26192:1:0;26189;26182:87;26178:91;-1:-1:-1;;;;;;26294:1:0;26291;26284:87;26280:91;-1:-1:-1;;;;;;26396:1:0;26393;26386:87;26382:91;-1:-1:-1;;;;;;26498:1:0;26495;26488:87;26484:91;-1:-1:-1;;;;;;26600:1:0;26597;26590:87;26586:91;-1:-1:-1;;;;;;26702:1:0;26699;26692:87;26688:91;-1:-1:-1;;;;;;26814:1:0;26806:6;26799:92;26790:101;;290:26609;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://cdaf11667ae78c5d395a7be78dc17d02cf8d2e256a7744e4b794e705073df3ef
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.