{
  "contractName": "strings",
  "abi": [],
  "bytecode": "0x604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a723058208e2e7c9eb0c75d096a877f09c256b4568c2e448e5c4aacd9716a4d4756a206f00029",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fd00a165627a7a723058208e2e7c9eb0c75d096a877f09c256b4568c2e448e5c4aacd9716a4d4756a206f00029",
  "sourceMap": "2003:23357:9:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24",
  "deployedSourceMap": "2003:23357:9:-;;;;;;;;",
  "source": "/*\n * @title String & slice utility library for Solidity contracts.\n * @author Nick Johnson <arachnid@notdot.net>\n *\n * @dev Functionality in this library is largely implemented using an\n *      abstraction called a 'slice'. A slice represents a part of a string -\n *      anything from the entire string to a single character, or even no\n *      characters at all (a 0-length slice). Since a slice only has to specify\n *      an offset and a length, copying and manipulating slices is a lot less\n *      expensive than copying and manipulating the strings they reference.\n *\n *      To further reduce gas costs, most functions on slice that need to return\n *      a slice modify the original one instead of allocating a new one; for\n *      instance, `s.split(\".\")` will return the text up to the first '.',\n *      modifying s to only contain the remainder of the string after the '.'.\n *      In situations where you do not want to modify the original slice, you\n *      can make a copy first with `.copy()`, for example:\n *      `s.copy().split(\".\")`. Try and avoid using this idiom in loops; since\n *      Solidity has no memory management, it will result in allocating many\n *      short-lived slices that are later discarded.\n *\n *      Functions that return two slices come in two versions: a non-allocating\n *      version that takes the second slice as an argument, modifying it in\n *      place, and an allocating version that allocates and returns the second\n *      slice; see `nextRune` for example.\n *\n *      Functions that have to copy string data will return strings rather than\n *      slices; these can be cast back to slices for further processing if\n *      required.\n *\n *      For convenience, some functions are provided with non-modifying\n *      variants that create a new slice and return both; for instance,\n *      `s.splitNew('.')` leaves s unmodified, and returns two values\n *      corresponding to the left and right parts of the string.\n */\n\npragma solidity ^0.4.14;\n\nlibrary strings {\n    struct slice {\n        uint _len;\n        uint _ptr;\n    }\n\n    function memcpy(uint dest, uint src, uint len) private pure {\n        // Copy word-length chunks while possible\n        for(; len >= 32; len -= 32) {\n            assembly {\n                mstore(dest, mload(src))\n            }\n            dest += 32;\n            src += 32;\n        }\n\n        // Copy remaining bytes\n        uint mask = 256 ** (32 - len) - 1;\n        assembly {\n            let srcpart := and(mload(src), not(mask))\n            let destpart := and(mload(dest), mask)\n            mstore(dest, or(destpart, srcpart))\n        }\n    }\n\n    /*\n     * @dev Returns a slice containing the entire string.\n     * @param self The string to make a slice from.\n     * @return A newly allocated slice containing the entire string.\n     */\n    function toSlice(string memory self) internal pure returns (slice memory) {\n        uint ptr;\n        assembly {\n            ptr := add(self, 0x20)\n        }\n        return slice(bytes(self).length, ptr);\n    }\n\n    /*\n     * @dev Returns the length of a null-terminated bytes32 string.\n     * @param self The value to find the length of.\n     * @return The length of the string, from 0 to 32.\n     */\n    function len(bytes32 self) internal pure returns (uint) {\n        uint ret;\n        if (self == 0)\n            return 0;\n        if (self & 0xffffffffffffffffffffffffffffffff == 0) {\n            ret += 16;\n            self = bytes32(uint(self) / 0x100000000000000000000000000000000);\n        }\n        if (self & 0xffffffffffffffff == 0) {\n            ret += 8;\n            self = bytes32(uint(self) / 0x10000000000000000);\n        }\n        if (self & 0xffffffff == 0) {\n            ret += 4;\n            self = bytes32(uint(self) / 0x100000000);\n        }\n        if (self & 0xffff == 0) {\n            ret += 2;\n            self = bytes32(uint(self) / 0x10000);\n        }\n        if (self & 0xff == 0) {\n            ret += 1;\n        }\n        return 32 - ret;\n    }\n\n    /*\n     * @dev Returns a slice containing the entire bytes32, interpreted as a\n     *      null-terminated utf-8 string.\n     * @param self The bytes32 value to convert to a slice.\n     * @return A new slice containing the value of the input argument up to the\n     *         first null.\n     */\n    function toSliceB32(bytes32 self) internal pure returns (slice memory ret) {\n        // Allocate space for `self` in memory, copy it there, and point ret at it\n        assembly {\n            let ptr := mload(0x40)\n            mstore(0x40, add(ptr, 0x20))\n            mstore(ptr, self)\n            mstore(add(ret, 0x20), ptr)\n        }\n        ret._len = len(self);\n    }\n\n    /*\n     * @dev Returns a new slice containing the same data as the current slice.\n     * @param self The slice to copy.\n     * @return A new slice containing the same data as `self`.\n     */\n    function copy(slice memory self) internal pure returns (slice memory) {\n        return slice(self._len, self._ptr);\n    }\n\n    /*\n     * @dev Copies a slice to a new string.\n     * @param self The slice to copy.\n     * @return A newly allocated string containing the slice's text.\n     */\n    function toString(slice memory self) internal pure returns (string memory) {\n        string memory ret = new string(self._len);\n        uint retptr;\n        assembly { retptr := add(ret, 32) }\n\n        memcpy(retptr, self._ptr, self._len);\n        return ret;\n    }\n\n    /*\n     * @dev Returns the length in runes of the slice. Note that this operation\n     *      takes time proportional to the length of the slice; avoid using it\n     *      in loops, and call `slice.empty()` if you only need to know whether\n     *      the slice is empty or not.\n     * @param self The slice to operate on.\n     * @return The length of the slice in runes.\n     */\n    function len(slice memory self) internal pure returns (uint l) {\n        // Starting at ptr-31 means the LSB will be the byte we care about\n        uint ptr = self._ptr - 31;\n        uint end = ptr + self._len;\n        for (l = 0; ptr < end; l++) {\n            uint8 b;\n            assembly { b := and(mload(ptr), 0xFF) }\n            if (b < 0x80) {\n                ptr += 1;\n            } else if(b < 0xE0) {\n                ptr += 2;\n            } else if(b < 0xF0) {\n                ptr += 3;\n            } else if(b < 0xF8) {\n                ptr += 4;\n            } else if(b < 0xFC) {\n                ptr += 5;\n            } else {\n                ptr += 6;\n            }\n        }\n    }\n\n    /*\n     * @dev Returns true if the slice is empty (has a length of 0).\n     * @param self The slice to operate on.\n     * @return True if the slice is empty, False otherwise.\n     */\n    function empty(slice memory self) internal pure returns (bool) {\n        return self._len == 0;\n    }\n\n    /*\n     * @dev Returns a positive number if `other` comes lexicographically after\n     *      `self`, a negative number if it comes before, or zero if the\n     *      contents of the two slices are equal. Comparison is done per-rune,\n     *      on unicode codepoints.\n     * @param self The first slice to compare.\n     * @param other The second slice to compare.\n     * @return The result of the comparison.\n     */\n    function compare(slice memory self, slice memory other) internal pure returns (int) {\n        uint shortest = self._len;\n        if (other._len < self._len)\n            shortest = other._len;\n\n        uint selfptr = self._ptr;\n        uint otherptr = other._ptr;\n        for (uint idx = 0; idx < shortest; idx += 32) {\n            uint a;\n            uint b;\n            assembly {\n                a := mload(selfptr)\n                b := mload(otherptr)\n            }\n            if (a != b) {\n                // Mask out irrelevant bytes and check again\n                uint256 mask = uint256(-1); // 0xffff...\n                if(shortest < 32) {\n                    mask = ~(2 ** (8 * (32 - shortest + idx)) - 1);\n                }\n                uint256 diff = (a & mask) - (b & mask);\n                if (diff != 0)\n                    return int(diff);\n            }\n            selfptr += 32;\n            otherptr += 32;\n        }\n        return int(self._len) - int(other._len);\n    }\n\n    /*\n     * @dev Returns true if the two slices contain the same text.\n     * @param self The first slice to compare.\n     * @param self The second slice to compare.\n     * @return True if the slices are equal, false otherwise.\n     */\n    function equals(slice memory self, slice memory other) internal pure returns (bool) {\n        return compare(self, other) == 0;\n    }\n\n    /*\n     * @dev Extracts the first rune in the slice into `rune`, advancing the\n     *      slice to point to the next rune and returning `self`.\n     * @param self The slice to operate on.\n     * @param rune The slice that will contain the first rune.\n     * @return `rune`.\n     */\n    function nextRune(slice memory self, slice memory rune) internal pure returns (slice memory) {\n        rune._ptr = self._ptr;\n\n        if (self._len == 0) {\n            rune._len = 0;\n            return rune;\n        }\n\n        uint l;\n        uint b;\n        // Load the first byte of the rune into the LSBs of b\n        assembly { b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF) }\n        if (b < 0x80) {\n            l = 1;\n        } else if(b < 0xE0) {\n            l = 2;\n        } else if(b < 0xF0) {\n            l = 3;\n        } else {\n            l = 4;\n        }\n\n        // Check for truncated codepoints\n        if (l > self._len) {\n            rune._len = self._len;\n            self._ptr += self._len;\n            self._len = 0;\n            return rune;\n        }\n\n        self._ptr += l;\n        self._len -= l;\n        rune._len = l;\n        return rune;\n    }\n\n    /*\n     * @dev Returns the first rune in the slice, advancing the slice to point\n     *      to the next rune.\n     * @param self The slice to operate on.\n     * @return A slice containing only the first rune from `self`.\n     */\n    function nextRune(slice memory self) internal pure returns (slice memory ret) {\n        nextRune(self, ret);\n    }\n\n    /*\n     * @dev Returns the number of the first codepoint in the slice.\n     * @param self The slice to operate on.\n     * @return The number of the first codepoint in the slice.\n     */\n    function ord(slice memory self) internal pure returns (uint ret) {\n        if (self._len == 0) {\n            return 0;\n        }\n\n        uint word;\n        uint length;\n        uint divisor = 2 ** 248;\n\n        // Load the rune into the MSBs of b\n        assembly { word:= mload(mload(add(self, 32))) }\n        uint b = word / divisor;\n        if (b < 0x80) {\n            ret = b;\n            length = 1;\n        } else if(b < 0xE0) {\n            ret = b & 0x1F;\n            length = 2;\n        } else if(b < 0xF0) {\n            ret = b & 0x0F;\n            length = 3;\n        } else {\n            ret = b & 0x07;\n            length = 4;\n        }\n\n        // Check for truncated codepoints\n        if (length > self._len) {\n            return 0;\n        }\n\n        for (uint i = 1; i < length; i++) {\n            divisor = divisor / 256;\n            b = (word / divisor) & 0xFF;\n            if (b & 0xC0 != 0x80) {\n                // Invalid UTF-8 sequence\n                return 0;\n            }\n            ret = (ret * 64) | (b & 0x3F);\n        }\n\n        return ret;\n    }\n\n    /*\n     * @dev Returns the keccak-256 hash of the slice.\n     * @param self The slice to hash.\n     * @return The hash of the slice.\n     */\n    function keccak(slice memory self) internal pure returns (bytes32 ret) {\n        assembly {\n            ret := keccak256(mload(add(self, 32)), mload(self))\n        }\n    }\n\n    /*\n     * @dev Returns true if `self` starts with `needle`.\n     * @param self The slice to operate on.\n     * @param needle The slice to search for.\n     * @return True if the slice starts with the provided text, false otherwise.\n     */\n    function startsWith(slice memory self, slice memory needle) internal pure returns (bool) {\n        if (self._len < needle._len) {\n            return false;\n        }\n\n        if (self._ptr == needle._ptr) {\n            return true;\n        }\n\n        bool equal;\n        assembly {\n            let length := mload(needle)\n            let selfptr := mload(add(self, 0x20))\n            let needleptr := mload(add(needle, 0x20))\n            equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n        }\n        return equal;\n    }\n\n    /*\n     * @dev If `self` starts with `needle`, `needle` is removed from the\n     *      beginning of `self`. Otherwise, `self` is unmodified.\n     * @param self The slice to operate on.\n     * @param needle The slice to search for.\n     * @return `self`\n     */\n    function beyond(slice memory self, slice memory needle) internal pure returns (slice memory) {\n        if (self._len < needle._len) {\n            return self;\n        }\n\n        bool equal = true;\n        if (self._ptr != needle._ptr) {\n            assembly {\n                let length := mload(needle)\n                let selfptr := mload(add(self, 0x20))\n                let needleptr := mload(add(needle, 0x20))\n                equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n            }\n        }\n\n        if (equal) {\n            self._len -= needle._len;\n            self._ptr += needle._len;\n        }\n\n        return self;\n    }\n\n    /*\n     * @dev Returns true if the slice ends with `needle`.\n     * @param self The slice to operate on.\n     * @param needle The slice to search for.\n     * @return True if the slice starts with the provided text, false otherwise.\n     */\n    function endsWith(slice memory self, slice memory needle) internal pure returns (bool) {\n        if (self._len < needle._len) {\n            return false;\n        }\n\n        uint selfptr = self._ptr + self._len - needle._len;\n\n        if (selfptr == needle._ptr) {\n            return true;\n        }\n\n        bool equal;\n        assembly {\n            let length := mload(needle)\n            let needleptr := mload(add(needle, 0x20))\n            equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n        }\n\n        return equal;\n    }\n\n    /*\n     * @dev If `self` ends with `needle`, `needle` is removed from the\n     *      end of `self`. Otherwise, `self` is unmodified.\n     * @param self The slice to operate on.\n     * @param needle The slice to search for.\n     * @return `self`\n     */\n    function until(slice memory self, slice memory needle) internal pure returns (slice memory) {\n        if (self._len < needle._len) {\n            return self;\n        }\n\n        uint selfptr = self._ptr + self._len - needle._len;\n        bool equal = true;\n        if (selfptr != needle._ptr) {\n            assembly {\n                let length := mload(needle)\n                let needleptr := mload(add(needle, 0x20))\n                equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n            }\n        }\n\n        if (equal) {\n            self._len -= needle._len;\n        }\n\n        return self;\n    }\n\n    // Returns the memory address of the first byte of the first occurrence of\n    // `needle` in `self`, or the first byte after `self` if not found.\n    function findPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) {\n        uint ptr = selfptr;\n        uint idx;\n\n        if (needlelen <= selflen) {\n            if (needlelen <= 32) {\n                bytes32 mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1));\n\n                bytes32 needledata;\n                assembly { needledata := and(mload(needleptr), mask) }\n\n                uint end = selfptr + selflen - needlelen;\n                bytes32 ptrdata;\n                assembly { ptrdata := and(mload(ptr), mask) }\n\n                while (ptrdata != needledata) {\n                    if (ptr >= end)\n                        return selfptr + selflen;\n                    ptr++;\n                    assembly { ptrdata := and(mload(ptr), mask) }\n                }\n                return ptr;\n            } else {\n                // For long needles, use hashing\n                bytes32 hash;\n                assembly { hash := keccak256(needleptr, needlelen) }\n\n                for (idx = 0; idx <= selflen - needlelen; idx++) {\n                    bytes32 testHash;\n                    assembly { testHash := keccak256(ptr, needlelen) }\n                    if (hash == testHash)\n                        return ptr;\n                    ptr += 1;\n                }\n            }\n        }\n        return selfptr + selflen;\n    }\n\n    // Returns the memory address of the first byte after the last occurrence of\n    // `needle` in `self`, or the address of `self` if not found.\n    function rfindPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) {\n        uint ptr;\n\n        if (needlelen <= selflen) {\n            if (needlelen <= 32) {\n                bytes32 mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1));\n\n                bytes32 needledata;\n                assembly { needledata := and(mload(needleptr), mask) }\n\n                ptr = selfptr + selflen - needlelen;\n                bytes32 ptrdata;\n                assembly { ptrdata := and(mload(ptr), mask) }\n\n                while (ptrdata != needledata) {\n                    if (ptr <= selfptr)\n                        return selfptr;\n                    ptr--;\n                    assembly { ptrdata := and(mload(ptr), mask) }\n                }\n                return ptr + needlelen;\n            } else {\n                // For long needles, use hashing\n                bytes32 hash;\n                assembly { hash := keccak256(needleptr, needlelen) }\n                ptr = selfptr + (selflen - needlelen);\n                while (ptr >= selfptr) {\n                    bytes32 testHash;\n                    assembly { testHash := keccak256(ptr, needlelen) }\n                    if (hash == testHash)\n                        return ptr + needlelen;\n                    ptr -= 1;\n                }\n            }\n        }\n        return selfptr;\n    }\n\n    /*\n     * @dev Modifies `self` to contain everything from the first occurrence of\n     *      `needle` to the end of the slice. `self` is set to the empty slice\n     *      if `needle` is not found.\n     * @param self The slice to search and modify.\n     * @param needle The text to search for.\n     * @return `self`.\n     */\n    function find(slice memory self, slice memory needle) internal pure returns (slice memory) {\n        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr);\n        self._len -= ptr - self._ptr;\n        self._ptr = ptr;\n        return self;\n    }\n\n    /*\n     * @dev Modifies `self` to contain the part of the string from the start of\n     *      `self` to the end of the first occurrence of `needle`. If `needle`\n     *      is not found, `self` is set to the empty slice.\n     * @param self The slice to search and modify.\n     * @param needle The text to search for.\n     * @return `self`.\n     */\n    function rfind(slice memory self, slice memory needle) internal pure returns (slice memory) {\n        uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr);\n        self._len = ptr - self._ptr;\n        return self;\n    }\n\n    /*\n     * @dev Splits the slice, setting `self` to everything after the first\n     *      occurrence of `needle`, and `token` to everything before it. If\n     *      `needle` does not occur in `self`, `self` is set to the empty slice,\n     *      and `token` is set to the entirety of `self`.\n     * @param self The slice to split.\n     * @param needle The text to search for in `self`.\n     * @param token An output parameter to which the first token is written.\n     * @return `token`.\n     */\n    function split(slice memory self, slice memory needle, slice memory token) internal pure returns (slice memory) {\n        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr);\n        token._ptr = self._ptr;\n        token._len = ptr - self._ptr;\n        if (ptr == self._ptr + self._len) {\n            // Not found\n            self._len = 0;\n        } else {\n            self._len -= token._len + needle._len;\n            self._ptr = ptr + needle._len;\n        }\n        return token;\n    }\n\n    /*\n     * @dev Splits the slice, setting `self` to everything after the first\n     *      occurrence of `needle`, and returning everything before it. If\n     *      `needle` does not occur in `self`, `self` is set to the empty slice,\n     *      and the entirety of `self` is returned.\n     * @param self The slice to split.\n     * @param needle The text to search for in `self`.\n     * @return The part of `self` up to the first occurrence of `delim`.\n     */\n    function split(slice memory self, slice memory needle) internal pure returns (slice memory token) {\n        split(self, needle, token);\n    }\n\n    /*\n     * @dev Splits the slice, setting `self` to everything before the last\n     *      occurrence of `needle`, and `token` to everything after it. If\n     *      `needle` does not occur in `self`, `self` is set to the empty slice,\n     *      and `token` is set to the entirety of `self`.\n     * @param self The slice to split.\n     * @param needle The text to search for in `self`.\n     * @param token An output parameter to which the first token is written.\n     * @return `token`.\n     */\n    function rsplit(slice memory self, slice memory needle, slice memory token) internal pure returns (slice memory) {\n        uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr);\n        token._ptr = ptr;\n        token._len = self._len - (ptr - self._ptr);\n        if (ptr == self._ptr) {\n            // Not found\n            self._len = 0;\n        } else {\n            self._len -= token._len + needle._len;\n        }\n        return token;\n    }\n\n    /*\n     * @dev Splits the slice, setting `self` to everything before the last\n     *      occurrence of `needle`, and returning everything after it. If\n     *      `needle` does not occur in `self`, `self` is set to the empty slice,\n     *      and the entirety of `self` is returned.\n     * @param self The slice to split.\n     * @param needle The text to search for in `self`.\n     * @return The part of `self` after the last occurrence of `delim`.\n     */\n    function rsplit(slice memory self, slice memory needle) internal pure returns (slice memory token) {\n        rsplit(self, needle, token);\n    }\n\n    /*\n     * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`.\n     * @param self The slice to search.\n     * @param needle The text to search for in `self`.\n     * @return The number of occurrences of `needle` found in `self`.\n     */\n    function count(slice memory self, slice memory needle) internal pure returns (uint cnt) {\n        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr) + needle._len;\n        while (ptr <= self._ptr + self._len) {\n            cnt++;\n            ptr = findPtr(self._len - (ptr - self._ptr), ptr, needle._len, needle._ptr) + needle._len;\n        }\n    }\n\n    /*\n     * @dev Returns True if `self` contains `needle`.\n     * @param self The slice to search.\n     * @param needle The text to search for in `self`.\n     * @return True if `needle` is found in `self`, false otherwise.\n     */\n    function contains(slice memory self, slice memory needle) internal pure returns (bool) {\n        return rfindPtr(self._len, self._ptr, needle._len, needle._ptr) != self._ptr;\n    }\n\n    /*\n     * @dev Returns a newly allocated string containing the concatenation of\n     *      `self` and `other`.\n     * @param self The first slice to concatenate.\n     * @param other The second slice to concatenate.\n     * @return The concatenation of the two strings.\n     */\n    function concat(slice memory self, slice memory other) internal pure returns (string memory) {\n        string memory ret = new string(self._len + other._len);\n        uint retptr;\n        assembly { retptr := add(ret, 32) }\n        memcpy(retptr, self._ptr, self._len);\n        memcpy(retptr + self._len, other._ptr, other._len);\n        return ret;\n    }\n\n    /*\n     * @dev Joins an array of slices, using `self` as a delimiter, returning a\n     *      newly allocated string.\n     * @param self The delimiter to use.\n     * @param parts A list of slices to join.\n     * @return A newly allocated string containing all the slices in `parts`,\n     *         joined with `self`.\n     */\n    function join(slice memory self, slice[] memory parts) internal pure returns (string memory) {\n        if (parts.length == 0)\n            return \"\";\n\n        uint length = self._len * (parts.length - 1);\n        for(uint i = 0; i < parts.length; i++)\n            length += parts[i]._len;\n\n        string memory ret = new string(length);\n        uint retptr;\n        assembly { retptr := add(ret, 32) }\n\n        for(i = 0; i < parts.length; i++) {\n            memcpy(retptr, parts[i]._ptr, parts[i]._len);\n            retptr += parts[i]._len;\n            if (i < parts.length - 1) {\n                memcpy(retptr, self._ptr, self._len);\n                retptr += self._len;\n            }\n        }\n\n        return ret;\n    }\n}",
  "sourcePath": "tokenboost-solidity/contracts/utils/strings.sol",
  "ast": {
    "absolutePath": "tokenboost-solidity/contracts/utils/strings.sol",
    "exportedSymbols": {
      "strings": [
        2700
      ]
    },
    "id": 2701,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1007,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".14"
        ],
        "nodeType": "PragmaDirective",
        "src": "1977:24:9"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2700,
        "linearizedBaseContracts": [
          2700
        ],
        "name": "strings",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "strings.slice",
            "id": 1012,
            "members": [
              {
                "constant": false,
                "id": 1009,
                "name": "_len",
                "nodeType": "VariableDeclaration",
                "scope": 1012,
                "src": "2048:9:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1008,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2048:4:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1011,
                "name": "_ptr",
                "nodeType": "VariableDeclaration",
                "scope": 1012,
                "src": "2067:9:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1010,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2067:4:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "slice",
            "nodeType": "StructDefinition",
            "scope": 2700,
            "src": "2025:58:9",
            "visibility": "public"
          },
          {
            "body": {
              "id": 1051,
              "nodeType": "Block",
              "src": "2149:488:9",
              "statements": [
                {
                  "body": {
                    "id": 1037,
                    "nodeType": "Block",
                    "src": "2237:136:9",
                    "statements": [
                      {
                        "externalReferences": [
                          {
                            "dest": {
                              "declaration": 1014,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "2285:4:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "src": {
                              "declaration": 1016,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "2297:3:9",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 1028,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    mstore(dest, mload(src))\n}",
                        "src": "2251:82:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1029,
                            "name": "dest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1014,
                            "src": "2329:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 1030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2337:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2329:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1032,
                        "nodeType": "ExpressionStatement",
                        "src": "2329:10:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1035,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1033,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1016,
                            "src": "2353:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 1034,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2360:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2353:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1036,
                        "nodeType": "ExpressionStatement",
                        "src": "2353:9:9"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1021,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1018,
                      "src": "2215:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 1022,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2222:2:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "2215:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1038,
                  "initializationExpression": null,
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1026,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 1024,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1018,
                        "src": "2226:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "3332",
                        "id": 1025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2233:2:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "2226:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1027,
                    "nodeType": "ExpressionStatement",
                    "src": "2226:9:9"
                  },
                  "nodeType": "ForStatement",
                  "src": "2209:164:9"
                },
                {
                  "assignments": [
                    1040
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1040,
                      "name": "mask",
                      "nodeType": "VariableDeclaration",
                      "scope": 1052,
                      "src": "2415:9:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1039,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2415:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1049,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1048,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1046,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "hexValue": "323536",
                        "id": 1041,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2427:3:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_256_by_1",
                          "typeString": "int_const 256"
                        },
                        "value": "256"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "**",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1044,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "3332",
                              "id": 1042,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2435:2:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 1043,
                              "name": "len",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1018,
                              "src": "2440:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2435:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 1045,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2434:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2427:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 1047,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2447:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "2427:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2415:33:9"
                },
                {
                  "externalReferences": [
                    {
                      "src": {
                        "declaration": 1016,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2506:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "mask": {
                        "declaration": 1040,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2516:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "dest": {
                        "declaration": 1014,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2561:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "mask": {
                        "declaration": 1040,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2568:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "dest": {
                        "declaration": 1014,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2593:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1050,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let srcpart := and(mload(src), not(mask))\n    let destpart := and(mload(dest), mask)\n    mstore(dest, or(destpart, srcpart))\n}",
                  "src": "2458:179:9"
                }
              ]
            },
            "documentation": null,
            "id": 1052,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "memcpy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1019,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1014,
                  "name": "dest",
                  "nodeType": "VariableDeclaration",
                  "scope": 1052,
                  "src": "2105:9:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1013,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2105:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1016,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 1052,
                  "src": "2116:8:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1015,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2116:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1018,
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 1052,
                  "src": "2126:8:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1017,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2126:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2104:31:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1020,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2149:0:9"
            },
            "scope": 2700,
            "src": "2089:548:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1071,
              "nodeType": "Block",
              "src": "2911:136:9",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1060,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1072,
                      "src": "2921:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1059,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2921:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1061,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2921:8:9"
                },
                {
                  "externalReferences": [
                    {
                      "ptr": {
                        "declaration": 1060,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2962:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 1054,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2973:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1062,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ptr := add(self, 0x20)\n}",
                  "src": "2939:70:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1065,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1054,
                              "src": "3022:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1064,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3016:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": "bytes"
                          },
                          "id": 1066,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3016:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1067,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3016:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1068,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1060,
                        "src": "3036:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1063,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1012,
                      "src": "3010:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_slice_$1012_storage_ptr_$",
                        "typeString": "type(struct strings.slice storage pointer)"
                      }
                    },
                    "id": 1069,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3010:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1058,
                  "id": 1070,
                  "nodeType": "Return",
                  "src": "3003:37:9"
                }
              ]
            },
            "documentation": null,
            "id": 1072,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "toSlice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1055,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1054,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1072,
                  "src": "2854:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1053,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2854:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2853:20:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1058,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1057,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1072,
                  "src": "2897:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1056,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "2897:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2896:14:9"
            },
            "scope": 2700,
            "src": "2837:210:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1187,
              "nodeType": "Block",
              "src": "3299:712:9",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1080,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 1188,
                      "src": "3309:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1079,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3309:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1081,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3309:8:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1084,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1082,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1074,
                      "src": "3331:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1083,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3339:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3331:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1087,
                  "nodeType": "IfStatement",
                  "src": "3327:35:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1085,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3361:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 1078,
                    "id": 1086,
                    "nodeType": "Return",
                    "src": "3354:8:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 1090,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1088,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1074,
                        "src": "3376:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30786666666666666666666666666666666666666666666666666666666666666666",
                        "id": 1089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3383:34:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_340282366920938463463374607431768211455_by_1",
                          "typeString": "int_const 3402...(31 digits omitted)...1455"
                        },
                        "value": "0xffffffffffffffffffffffffffffffff"
                      },
                      "src": "3376:41:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1091,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3421:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3376:46:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1108,
                  "nodeType": "IfStatement",
                  "src": "3372:164:9",
                  "trueBody": {
                    "id": 1107,
                    "nodeType": "Block",
                    "src": "3424:112:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1095,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1093,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1080,
                            "src": "3438:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3136",
                            "id": 1094,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3445:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_16_by_1",
                              "typeString": "int_const 16"
                            },
                            "value": "16"
                          },
                          "src": "3438:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1096,
                        "nodeType": "ExpressionStatement",
                        "src": "3438:9:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1105,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1097,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1074,
                            "src": "3461:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1103,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1100,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1074,
                                      "src": "3481:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1099,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3476:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint"
                                  },
                                  "id": 1101,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3476:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3078313030303030303030303030303030303030303030303030303030303030303030",
                                  "id": 1102,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3489:35:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  },
                                  "value": "0x100000000000000000000000000000000"
                                },
                                "src": "3476:48:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1098,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3468:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 1104,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3468:57:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3461:64:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1106,
                        "nodeType": "ExpressionStatement",
                        "src": "3461:64:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 1111,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1109,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1074,
                        "src": "3549:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "307866666666666666666666666666666666",
                        "id": 1110,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3556:18:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_18446744073709551615_by_1",
                          "typeString": "int_const 18446744073709551615"
                        },
                        "value": "0xffffffffffffffff"
                      },
                      "src": "3549:25:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1112,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3578:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3549:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1129,
                  "nodeType": "IfStatement",
                  "src": "3545:131:9",
                  "trueBody": {
                    "id": 1128,
                    "nodeType": "Block",
                    "src": "3581:95:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1114,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1080,
                            "src": "3595:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "38",
                            "id": 1115,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3602:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_8_by_1",
                              "typeString": "int_const 8"
                            },
                            "value": "8"
                          },
                          "src": "3595:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1117,
                        "nodeType": "ExpressionStatement",
                        "src": "3595:8:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1118,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1074,
                            "src": "3617:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1124,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1121,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1074,
                                      "src": "3637:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1120,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3632:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint"
                                  },
                                  "id": 1122,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3632:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783130303030303030303030303030303030",
                                  "id": 1123,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3645:19:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                    "typeString": "int_const 18446744073709551616"
                                  },
                                  "value": "0x10000000000000000"
                                },
                                "src": "3632:32:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1119,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3624:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 1125,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3624:41:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3617:48:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1127,
                        "nodeType": "ExpressionStatement",
                        "src": "3617:48:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1134,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 1132,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1130,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1074,
                        "src": "3689:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30786666666666666666",
                        "id": 1131,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3696:10:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4294967295_by_1",
                          "typeString": "int_const 4294967295"
                        },
                        "value": "0xffffffff"
                      },
                      "src": "3689:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1133,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3710:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3689:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1150,
                  "nodeType": "IfStatement",
                  "src": "3685:115:9",
                  "trueBody": {
                    "id": 1149,
                    "nodeType": "Block",
                    "src": "3713:87:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1135,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1080,
                            "src": "3727:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "34",
                            "id": 1136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3734:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "src": "3727:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1138,
                        "nodeType": "ExpressionStatement",
                        "src": "3727:8:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1139,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1074,
                            "src": "3749:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1145,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1142,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1074,
                                      "src": "3769:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1141,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3764:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint"
                                  },
                                  "id": 1143,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3764:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3078313030303030303030",
                                  "id": 1144,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3777:11:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4294967296_by_1",
                                    "typeString": "int_const 4294967296"
                                  },
                                  "value": "0x100000000"
                                },
                                "src": "3764:24:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1140,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3756:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 1146,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3756:33:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3749:40:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1148,
                        "nodeType": "ExpressionStatement",
                        "src": "3749:40:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1155,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 1153,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1151,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1074,
                        "src": "3813:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "307866666666",
                        "id": 1152,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3820:6:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_65535_by_1",
                          "typeString": "int_const 65535"
                        },
                        "value": "0xffff"
                      },
                      "src": "3813:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1154,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3830:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3813:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1171,
                  "nodeType": "IfStatement",
                  "src": "3809:107:9",
                  "trueBody": {
                    "id": 1170,
                    "nodeType": "Block",
                    "src": "3833:83:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1156,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1080,
                            "src": "3847:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 1157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3854:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "3847:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1159,
                        "nodeType": "ExpressionStatement",
                        "src": "3847:8:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1160,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1074,
                            "src": "3869:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1166,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1163,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1074,
                                      "src": "3889:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1162,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3884:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint"
                                  },
                                  "id": 1164,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3884:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783130303030",
                                  "id": 1165,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3897:7:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_65536_by_1",
                                    "typeString": "int_const 65536"
                                  },
                                  "value": "0x10000"
                                },
                                "src": "3884:20:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1161,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3876:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 1167,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3876:29:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3869:36:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1169,
                        "nodeType": "ExpressionStatement",
                        "src": "3869:36:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 1174,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1172,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1074,
                        "src": "3929:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30786666",
                        "id": 1173,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3936:4:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_255_by_1",
                          "typeString": "int_const 255"
                        },
                        "value": "0xff"
                      },
                      "src": "3929:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3944:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3929:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1182,
                  "nodeType": "IfStatement",
                  "src": "3925:55:9",
                  "trueBody": {
                    "id": 1181,
                    "nodeType": "Block",
                    "src": "3947:33:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1179,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1177,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1080,
                            "src": "3961:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 1178,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3968:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "3961:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1180,
                        "nodeType": "ExpressionStatement",
                        "src": "3961:8:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 1183,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3996:2:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1184,
                      "name": "ret",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1080,
                      "src": "4001:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3996:8:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1078,
                  "id": 1186,
                  "nodeType": "Return",
                  "src": "3989:15:9"
                }
              ]
            },
            "documentation": null,
            "id": 1188,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "len",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1074,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1188,
                  "src": "3256:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1073,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3256:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3255:14:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1078,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1077,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1188,
                  "src": "3293:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1076,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3293:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3292:6:9"
            },
            "scope": 2700,
            "src": "3243:768:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1204,
              "nodeType": "Block",
              "src": "4392:295:9",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "ret": {
                        "declaration": 1193,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4625:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 1190,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4596:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1195,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let ptr := mload(0x40)\n    mstore(0x40, add(ptr, 0x20))\n    mstore(ptr, self)\n    mstore(add(ret, 0x20), ptr)\n}",
                  "src": "4485:178:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1196,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1193,
                        "src": "4660:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1198,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "4660:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1200,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1190,
                          "src": "4675:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 1199,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          1188,
                          1338
                        ],
                        "referencedDeclaration": 1188,
                        "src": "4671:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$",
                          "typeString": "function (bytes32) pure returns (uint256)"
                        }
                      },
                      "id": 1201,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4671:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4660:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1203,
                  "nodeType": "ExpressionStatement",
                  "src": "4660:20:9"
                }
              ]
            },
            "documentation": null,
            "id": 1205,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "toSliceB32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1191,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1190,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1205,
                  "src": "4337:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1189,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4337:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4336:14:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1193,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1205,
                  "src": "4374:16:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1192,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "4374:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4373:18:9"
            },
            "scope": 2700,
            "src": "4317:370:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1219,
              "nodeType": "Block",
              "src": "4958:51:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1213,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1207,
                          "src": "4981:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1214,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "4981:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1215,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1207,
                          "src": "4992:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1216,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "4992:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1212,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1012,
                      "src": "4975:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_slice_$1012_storage_ptr_$",
                        "typeString": "type(struct strings.slice storage pointer)"
                      }
                    },
                    "id": 1217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4975:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1211,
                  "id": 1218,
                  "nodeType": "Return",
                  "src": "4968:34:9"
                }
              ]
            },
            "documentation": null,
            "id": 1220,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "copy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1207,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1220,
                  "src": "4902:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1206,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "4902:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4901:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1211,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1210,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1220,
                  "src": "4944:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1209,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "4944:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4943:14:9"
            },
            "scope": 2700,
            "src": "4888:121:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1249,
              "nodeType": "Block",
              "src": "5256:190:9",
              "statements": [
                {
                  "assignments": [
                    1228
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1228,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 1250,
                      "src": "5266:17:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 1227,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5266:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1234,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1231,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1222,
                          "src": "5297:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1232,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "5297:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1230,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5286:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 1229,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5290:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 1233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5286:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5266:41:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1236,
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1250,
                      "src": "5317:11:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1235,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5317:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1237,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5317:11:9"
                },
                {
                  "externalReferences": [
                    {
                      "retptr": {
                        "declaration": 1236,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5349:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 1228,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5363:3:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1238,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    retptr := add(ret, 32)\n}",
                  "src": "5338:51:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1240,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1236,
                        "src": "5390:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1241,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1222,
                          "src": "5398:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1242,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "5398:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1243,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1222,
                          "src": "5409:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1244,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "5409:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1239,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1052,
                      "src": "5383:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 1245,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5383:36:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1246,
                  "nodeType": "ExpressionStatement",
                  "src": "5383:36:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1247,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1228,
                    "src": "5436:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1226,
                  "id": 1248,
                  "nodeType": "Return",
                  "src": "5429:10:9"
                }
              ]
            },
            "documentation": null,
            "id": 1250,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "toString",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1223,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1222,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1250,
                  "src": "5199:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1221,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "5199:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5198:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1225,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1250,
                  "src": "5241:6:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1224,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5241:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5240:15:9"
            },
            "scope": 2700,
            "src": "5181:265:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1337,
              "nodeType": "Block",
              "src": "5900:629:9",
              "statements": [
                {
                  "assignments": [
                    1258
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1258,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1338,
                      "src": "5985:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1257,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5985:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1263,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1259,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1252,
                        "src": "5996:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1260,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "5996:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3331",
                      "id": 1261,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6008:2:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_31_by_1",
                        "typeString": "int_const 31"
                      },
                      "value": "31"
                    },
                    "src": "5996:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5985:25:9"
                },
                {
                  "assignments": [
                    1265
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1265,
                      "name": "end",
                      "nodeType": "VariableDeclaration",
                      "scope": 1338,
                      "src": "6020:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1264,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6020:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1270,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1266,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1258,
                      "src": "6031:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1267,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1252,
                        "src": "6037:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1268,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "6037:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6031:15:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6020:26:9"
                },
                {
                  "body": {
                    "id": 1335,
                    "nodeType": "Block",
                    "src": "6084:439:9",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1282,
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 1338,
                            "src": "6098:7:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 1281,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "6098:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1283,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6098:7:9"
                      },
                      {
                        "externalReferences": [
                          {
                            "ptr": {
                              "declaration": 1258,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "6145:3:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "b": {
                              "declaration": 1282,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "6130:1:9",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 1284,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    b := and(mload(ptr), 0xFF)\n}",
                        "src": "6119:54:9"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 1287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1285,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1282,
                            "src": "6175:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30783830",
                            "id": 1286,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6179:4:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "6175:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 1295,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1293,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1282,
                              "src": "6235:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30784530",
                              "id": 1294,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6239:4:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_224_by_1",
                                "typeString": "int_const 224"
                              },
                              "value": "0xE0"
                            },
                            "src": "6235:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "id": 1303,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1301,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1282,
                                "src": "6295:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30784630",
                                "id": 1302,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6299:4:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_240_by_1",
                                  "typeString": "int_const 240"
                                },
                                "value": "0xF0"
                              },
                              "src": "6295:8:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 1311,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1309,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1282,
                                  "src": "6355:1:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30784638",
                                  "id": 1310,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6359:4:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_248_by_1",
                                    "typeString": "int_const 248"
                                  },
                                  "value": "0xF8"
                                },
                                "src": "6355:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 1319,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1317,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1282,
                                    "src": "6415:1:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30784643",
                                    "id": 1318,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6419:4:9",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_252_by_1",
                                      "typeString": "int_const 252"
                                    },
                                    "value": "0xFC"
                                  },
                                  "src": "6415:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseBody": {
                                  "id": 1329,
                                  "nodeType": "Block",
                                  "src": "6472:41:9",
                                  "statements": [
                                    {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1327,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "id": 1325,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1258,
                                          "src": "6490:3:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "hexValue": "36",
                                          "id": 1326,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6497:1:9",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_6_by_1",
                                            "typeString": "int_const 6"
                                          },
                                          "value": "6"
                                        },
                                        "src": "6490:8:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1328,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6490:8:9"
                                    }
                                  ]
                                },
                                "id": 1330,
                                "nodeType": "IfStatement",
                                "src": "6412:101:9",
                                "trueBody": {
                                  "id": 1324,
                                  "nodeType": "Block",
                                  "src": "6425:41:9",
                                  "statements": [
                                    {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1322,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "id": 1320,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1258,
                                          "src": "6443:3:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "hexValue": "35",
                                          "id": 1321,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6450:1:9",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_5_by_1",
                                            "typeString": "int_const 5"
                                          },
                                          "value": "5"
                                        },
                                        "src": "6443:8:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1323,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6443:8:9"
                                    }
                                  ]
                                }
                              },
                              "id": 1331,
                              "nodeType": "IfStatement",
                              "src": "6352:161:9",
                              "trueBody": {
                                "id": 1316,
                                "nodeType": "Block",
                                "src": "6365:41:9",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1314,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 1312,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1258,
                                        "src": "6383:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "34",
                                        "id": 1313,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6390:1:9",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_4_by_1",
                                          "typeString": "int_const 4"
                                        },
                                        "value": "4"
                                      },
                                      "src": "6383:8:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1315,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6383:8:9"
                                  }
                                ]
                              }
                            },
                            "id": 1332,
                            "nodeType": "IfStatement",
                            "src": "6292:221:9",
                            "trueBody": {
                              "id": 1308,
                              "nodeType": "Block",
                              "src": "6305:41:9",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1306,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 1304,
                                      "name": "ptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1258,
                                      "src": "6323:3:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "hexValue": "33",
                                      "id": 1305,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6330:1:9",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "src": "6323:8:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1307,
                                  "nodeType": "ExpressionStatement",
                                  "src": "6323:8:9"
                                }
                              ]
                            }
                          },
                          "id": 1333,
                          "nodeType": "IfStatement",
                          "src": "6232:281:9",
                          "trueBody": {
                            "id": 1300,
                            "nodeType": "Block",
                            "src": "6245:41:9",
                            "statements": [
                              {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1298,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 1296,
                                    "name": "ptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1258,
                                    "src": "6263:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "+=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "hexValue": "32",
                                    "id": 1297,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6270:1:9",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "6263:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1299,
                                "nodeType": "ExpressionStatement",
                                "src": "6263:8:9"
                              }
                            ]
                          }
                        },
                        "id": 1334,
                        "nodeType": "IfStatement",
                        "src": "6171:342:9",
                        "trueBody": {
                          "id": 1292,
                          "nodeType": "Block",
                          "src": "6185:41:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1290,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1288,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1258,
                                  "src": "6203:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 1289,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6210:1:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "6203:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1291,
                              "nodeType": "ExpressionStatement",
                              "src": "6203:8:9"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1275,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1258,
                      "src": "6068:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1276,
                      "name": "end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1265,
                      "src": "6074:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6068:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1336,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1273,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 1271,
                        "name": "l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1255,
                        "src": "6061:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1272,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6065:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6061:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1274,
                    "nodeType": "ExpressionStatement",
                    "src": "6061:5:9"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6079:3:9",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1278,
                        "name": "l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1255,
                        "src": "6079:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1280,
                    "nodeType": "ExpressionStatement",
                    "src": "6079:3:9"
                  },
                  "nodeType": "ForStatement",
                  "src": "6056:467:9"
                }
              ]
            },
            "documentation": null,
            "id": 1338,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "len",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1252,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1338,
                  "src": "5850:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1251,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "5850:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5849:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1256,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1255,
                  "name": "l",
                  "nodeType": "VariableDeclaration",
                  "scope": 1338,
                  "src": "5892:6:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1254,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5892:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5891:8:9"
            },
            "scope": 2700,
            "src": "5837:692:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1350,
              "nodeType": "Block",
              "src": "6785:38:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1345,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1340,
                        "src": "6802:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1346,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "6802:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1347,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6815:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6802:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1344,
                  "id": 1349,
                  "nodeType": "Return",
                  "src": "6795:21:9"
                }
              ]
            },
            "documentation": null,
            "id": 1351,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "empty",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1341,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1340,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1351,
                  "src": "6737:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1339,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "6737:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6736:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1343,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1351,
                  "src": "6779:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1342,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6779:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6778:6:9"
            },
            "scope": 2700,
            "src": "6722:101:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1479,
              "nodeType": "Block",
              "src": "7335:909:9",
              "statements": [
                {
                  "assignments": [
                    1361
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1361,
                      "name": "shortest",
                      "nodeType": "VariableDeclaration",
                      "scope": 1480,
                      "src": "7345:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1360,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7345:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1364,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1362,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1353,
                      "src": "7361:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "id": 1363,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_len",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1009,
                    "src": "7361:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7345:25:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1365,
                        "name": "other",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1355,
                        "src": "7384:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1366,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "7384:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1367,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1353,
                        "src": "7397:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1368,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "7397:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7384:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1375,
                  "nodeType": "IfStatement",
                  "src": "7380:61:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1373,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 1370,
                        "name": "shortest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1361,
                        "src": "7420:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1371,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1355,
                          "src": "7431:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1372,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "7431:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7420:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1374,
                    "nodeType": "ExpressionStatement",
                    "src": "7420:21:9"
                  }
                },
                {
                  "assignments": [
                    1377
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1377,
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1480,
                      "src": "7452:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1376,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7452:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1380,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1378,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1353,
                      "src": "7467:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "id": 1379,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1011,
                    "src": "7467:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7452:24:9"
                },
                {
                  "assignments": [
                    1382
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1382,
                      "name": "otherptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1480,
                      "src": "7486:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1381,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7486:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1385,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1383,
                      "name": "other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1355,
                      "src": "7502:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "id": 1384,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1011,
                    "src": "7502:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7486:26:9"
                },
                {
                  "body": {
                    "id": 1467,
                    "nodeType": "Block",
                    "src": "7568:621:9",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1398,
                            "name": "a",
                            "nodeType": "VariableDeclaration",
                            "scope": 1480,
                            "src": "7582:6:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1397,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "7582:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1399,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7582:6:9"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1401,
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 1480,
                            "src": "7602:6:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1400,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "7602:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1402,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7602:6:9"
                      },
                      {
                        "externalReferences": [
                          {
                            "a": {
                              "declaration": 1398,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7649:1:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "selfptr": {
                              "declaration": 1377,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7660:7:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "b": {
                              "declaration": 1401,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7685:1:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "otherptr": {
                              "declaration": 1382,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7696:8:9",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 1403,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    a := mload(selfptr)\n    b := mload(otherptr)\n}",
                        "src": "7622:112:9"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1404,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1398,
                            "src": "7736:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1405,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1401,
                            "src": "7741:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7736:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1458,
                        "nodeType": "IfStatement",
                        "src": "7732:392:9",
                        "trueBody": {
                          "id": 1457,
                          "nodeType": "Block",
                          "src": "7744:380:9",
                          "statements": [
                            {
                              "assignments": [
                                1408
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1408,
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1480,
                                  "src": "7823:12:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1407,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7823:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1413,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1411,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "7846:2:9",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 1410,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7847:1:9",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_-1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_-1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  ],
                                  "id": 1409,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7838:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 1412,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7838:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7823:26:9"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1416,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1414,
                                  "name": "shortest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1361,
                                  "src": "7883:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3332",
                                  "id": 1415,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7894:2:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "7883:13:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 1436,
                              "nodeType": "IfStatement",
                              "src": "7880:105:9",
                              "trueBody": {
                                "id": 1435,
                                "nodeType": "Block",
                                "src": "7898:87:9",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1433,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 1417,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1408,
                                        "src": "7920:4:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 1432,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "~",
                                        "prefix": true,
                                        "src": "7927:39:9",
                                        "subExpression": {
                                          "argumentTypes": null,
                                          "components": [
                                            {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 1430,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 1428,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "argumentTypes": null,
                                                  "hexValue": "32",
                                                  "id": 1418,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "7929:1:9",
                                                  "subdenomination": null,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_2_by_1",
                                                    "typeString": "int_const 2"
                                                  },
                                                  "value": "2"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "**",
                                                "rightExpression": {
                                                  "argumentTypes": null,
                                                  "components": [
                                                    {
                                                      "argumentTypes": null,
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "id": 1426,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "leftExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "38",
                                                        "id": 1419,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "7935:1:9",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_8_by_1",
                                                          "typeString": "int_const 8"
                                                        },
                                                        "value": "8"
                                                      },
                                                      "nodeType": "BinaryOperation",
                                                      "operator": "*",
                                                      "rightExpression": {
                                                        "argumentTypes": null,
                                                        "components": [
                                                          {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            },
                                                            "id": 1424,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                              "argumentTypes": null,
                                                              "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              },
                                                              "id": 1422,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "leftExpression": {
                                                                "argumentTypes": null,
                                                                "hexValue": "3332",
                                                                "id": 1420,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "7940:2:9",
                                                                "subdenomination": null,
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_rational_32_by_1",
                                                                  "typeString": "int_const 32"
                                                                },
                                                                "value": "32"
                                                              },
                                                              "nodeType": "BinaryOperation",
                                                              "operator": "-",
                                                              "rightExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1421,
                                                                "name": "shortest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1361,
                                                                "src": "7945:8:9",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_uint256",
                                                                  "typeString": "uint256"
                                                                }
                                                              },
                                                              "src": "7940:13:9",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "+",
                                                            "rightExpression": {
                                                              "argumentTypes": null,
                                                              "id": 1423,
                                                              "name": "idx",
                                                              "nodeType": "Identifier",
                                                              "overloadedDeclarations": [],
                                                              "referencedDeclaration": 1387,
                                                              "src": "7956:3:9",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "src": "7940:19:9",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          }
                                                        ],
                                                        "id": 1425,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "7939:21:9",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "src": "7935:25:9",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "id": 1427,
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "TupleExpression",
                                                  "src": "7934:27:9",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "src": "7929:32:9",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "-",
                                              "rightExpression": {
                                                "argumentTypes": null,
                                                "hexValue": "31",
                                                "id": 1429,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7964:1:9",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_1_by_1",
                                                  "typeString": "int_const 1"
                                                },
                                                "value": "1"
                                              },
                                              "src": "7929:36:9",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 1431,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "7928:38:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7920:46:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1434,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7920:46:9"
                                  }
                                ]
                              }
                            },
                            {
                              "assignments": [
                                1438
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1438,
                                  "name": "diff",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1480,
                                  "src": "8002:12:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1437,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8002:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1448,
                              "initialValue": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1447,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1441,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1439,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1398,
                                        "src": "8018:1:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 1440,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1408,
                                        "src": "8022:4:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8018:8:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1442,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8017:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1445,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1443,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1401,
                                        "src": "8031:1:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 1444,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1408,
                                        "src": "8035:4:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8031:8:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1446,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8030:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "8017:23:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "8002:38:9"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1451,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1449,
                                  "name": "diff",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1438,
                                  "src": "8062:4:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1450,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8070:1:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "8062:9:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 1456,
                              "nodeType": "IfStatement",
                              "src": "8058:51:9",
                              "trueBody": {
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1453,
                                      "name": "diff",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1438,
                                      "src": "8104:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1452,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "8100:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": "int"
                                  },
                                  "id": 1454,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8100:9:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "functionReturnParameters": 1359,
                                "id": 1455,
                                "nodeType": "Return",
                                "src": "8093:16:9"
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1461,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1459,
                            "name": "selfptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1377,
                            "src": "8137:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 1460,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8148:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "8137:13:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1462,
                        "nodeType": "ExpressionStatement",
                        "src": "8137:13:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1465,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1463,
                            "name": "otherptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1382,
                            "src": "8164:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 1464,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8176:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "8164:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1466,
                        "nodeType": "ExpressionStatement",
                        "src": "8164:14:9"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1390,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1387,
                      "src": "7541:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1391,
                      "name": "shortest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1361,
                      "src": "7547:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7541:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1468,
                  "initializationExpression": {
                    "assignments": [
                      1387
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1387,
                        "name": "idx",
                        "nodeType": "VariableDeclaration",
                        "scope": 1480,
                        "src": "7527:8:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1386,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "7527:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1389,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1388,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7538:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "7527:12:9"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 1393,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1387,
                        "src": "7557:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "3332",
                        "id": 1394,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7564:2:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "7557:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1396,
                    "nodeType": "ExpressionStatement",
                    "src": "7557:9:9"
                  },
                  "nodeType": "ForStatement",
                  "src": "7522:667:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 1477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1470,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1353,
                            "src": "8209:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 1471,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "8209:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1469,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8205:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": "int"
                      },
                      "id": 1472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8205:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1474,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1355,
                            "src": "8226:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 1475,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "8226:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8222:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": "int"
                      },
                      "id": 1476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8222:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "8205:32:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 1359,
                  "id": 1478,
                  "nodeType": "Return",
                  "src": "8198:39:9"
                }
              ]
            },
            "documentation": null,
            "id": 1480,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1356,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1353,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1480,
                  "src": "7268:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1352,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "7268:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1355,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1480,
                  "src": "7287:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1354,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "7287:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7267:39:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1359,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1358,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1480,
                  "src": "7330:3:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 1357,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "7330:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7329:5:9"
            },
            "scope": 2700,
            "src": "7251:993:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1496,
              "nodeType": "Block",
              "src": "8572:49:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 1494,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1490,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1482,
                          "src": "8597:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1491,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1484,
                          "src": "8603:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        ],
                        "id": 1489,
                        "name": "compare",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1480,
                        "src": "8589:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1012_memory_ptr_$_t_struct$_slice_$1012_memory_ptr_$returns$_t_int256_$",
                          "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (int256)"
                        }
                      },
                      "id": 1492,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8589:20:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1493,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8613:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8589:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1488,
                  "id": 1495,
                  "nodeType": "Return",
                  "src": "8582:32:9"
                }
              ]
            },
            "documentation": null,
            "id": 1497,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "equals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1482,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1497,
                  "src": "8504:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1481,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "8504:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1484,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1497,
                  "src": "8523:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1483,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "8523:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8503:39:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1488,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1487,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1497,
                  "src": "8566:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1486,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8566:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8565:6:9"
            },
            "scope": 2700,
            "src": "8488:133:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1614,
              "nodeType": "Block",
              "src": "9007:785:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1506,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1501,
                        "src": "9017:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1508,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "9017:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1509,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "9029:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1510,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "9029:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9017:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1512,
                  "nodeType": "ExpressionStatement",
                  "src": "9017:21:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1513,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "9053:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1514,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "9053:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1515,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9066:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9053:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1526,
                  "nodeType": "IfStatement",
                  "src": "9049:83:9",
                  "trueBody": {
                    "id": 1525,
                    "nodeType": "Block",
                    "src": "9069:63:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1517,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1501,
                              "src": "9083:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1519,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "9083:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1520,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9095:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9083:13:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1522,
                        "nodeType": "ExpressionStatement",
                        "src": "9083:13:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1523,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1501,
                          "src": "9117:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1505,
                        "id": 1524,
                        "nodeType": "Return",
                        "src": "9110:11:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1528,
                      "name": "l",
                      "nodeType": "VariableDeclaration",
                      "scope": 1615,
                      "src": "9142:6:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1527,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9142:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1529,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9142:6:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1531,
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 1615,
                      "src": "9158:6:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1530,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9158:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1532,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9158:6:9"
                },
                {
                  "externalReferences": [
                    {
                      "b": {
                        "declaration": 1531,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9247:1:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 1499,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9276:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1533,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF)\n}",
                  "src": "9236:76:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1534,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1531,
                      "src": "9314:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30783830",
                      "id": 1535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9318:4:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "9314:8:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1544,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1542,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1531,
                        "src": "9363:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30784530",
                        "id": 1543,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9367:4:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "9363:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1550,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1531,
                          "src": "9412:1:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30784630",
                          "id": 1551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9416:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "9412:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 1562,
                        "nodeType": "Block",
                        "src": "9458:30:9",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1560,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1558,
                                "name": "l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1528,
                                "src": "9472:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "34",
                                "id": 1559,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9476:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "9472:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1561,
                            "nodeType": "ExpressionStatement",
                            "src": "9472:5:9"
                          }
                        ]
                      },
                      "id": 1563,
                      "nodeType": "IfStatement",
                      "src": "9409:79:9",
                      "trueBody": {
                        "id": 1557,
                        "nodeType": "Block",
                        "src": "9422:30:9",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1555,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1553,
                                "name": "l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1528,
                                "src": "9436:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 1554,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9440:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "9436:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1556,
                            "nodeType": "ExpressionStatement",
                            "src": "9436:5:9"
                          }
                        ]
                      }
                    },
                    "id": 1564,
                    "nodeType": "IfStatement",
                    "src": "9360:128:9",
                    "trueBody": {
                      "id": 1549,
                      "nodeType": "Block",
                      "src": "9373:30:9",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 1547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 1545,
                              "name": "l",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1528,
                              "src": "9387:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 1546,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9391:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "9387:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1548,
                          "nodeType": "ExpressionStatement",
                          "src": "9387:5:9"
                        }
                      ]
                    }
                  },
                  "id": 1565,
                  "nodeType": "IfStatement",
                  "src": "9310:178:9",
                  "trueBody": {
                    "id": 1541,
                    "nodeType": "Block",
                    "src": "9324:30:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1537,
                            "name": "l",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1528,
                            "src": "9338:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 1538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9342:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "9338:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1540,
                        "nodeType": "ExpressionStatement",
                        "src": "9338:5:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1566,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1528,
                      "src": "9544:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1567,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "9548:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1568,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "9548:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9544:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1593,
                  "nodeType": "IfStatement",
                  "src": "9540:153:9",
                  "trueBody": {
                    "id": 1592,
                    "nodeType": "Block",
                    "src": "9559:134:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1570,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1501,
                              "src": "9573:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1572,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "9573:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1573,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1499,
                              "src": "9585:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1574,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "9585:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9573:21:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1576,
                        "nodeType": "ExpressionStatement",
                        "src": "9573:21:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1577,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1499,
                              "src": "9608:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1579,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1011,
                            "src": "9608:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1580,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1499,
                              "src": "9621:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1581,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "9621:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9608:22:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1583,
                        "nodeType": "ExpressionStatement",
                        "src": "9608:22:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1584,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1499,
                              "src": "9644:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1586,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "9644:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1587,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9656:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9644:13:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1589,
                        "nodeType": "ExpressionStatement",
                        "src": "9644:13:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1590,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1501,
                          "src": "9678:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1505,
                        "id": 1591,
                        "nodeType": "Return",
                        "src": "9671:11:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1594,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "9703:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1596,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "9703:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1597,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1528,
                      "src": "9716:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9703:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1599,
                  "nodeType": "ExpressionStatement",
                  "src": "9703:14:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1600,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "9727:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1602,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "9727:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1603,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1528,
                      "src": "9740:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9727:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1605,
                  "nodeType": "ExpressionStatement",
                  "src": "9727:14:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1610,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1606,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1501,
                        "src": "9751:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1608,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "9751:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1609,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1528,
                      "src": "9763:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9751:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1611,
                  "nodeType": "ExpressionStatement",
                  "src": "9751:13:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1612,
                    "name": "rune",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1501,
                    "src": "9781:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1505,
                  "id": 1613,
                  "nodeType": "Return",
                  "src": "9774:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 1615,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "nextRune",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1502,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1499,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1615,
                  "src": "8932:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1498,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "8932:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1501,
                  "name": "rune",
                  "nodeType": "VariableDeclaration",
                  "scope": 1615,
                  "src": "8951:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1500,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "8951:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8931:38:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1505,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1504,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1615,
                  "src": "8993:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1503,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "8993:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8992:14:9"
            },
            "scope": 2700,
            "src": "8914:878:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1627,
              "nodeType": "Block",
              "src": "10110:36:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1623,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1617,
                        "src": "10129:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1624,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1620,
                        "src": "10135:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "id": 1622,
                      "name": "nextRune",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1615,
                        1628
                      ],
                      "referencedDeclaration": 1615,
                      "src": "10120:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1012_memory_ptr_$_t_struct$_slice_$1012_memory_ptr_$returns$_t_struct$_slice_$1012_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (struct strings.slice memory)"
                      }
                    },
                    "id": 1625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10120:19:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 1626,
                  "nodeType": "ExpressionStatement",
                  "src": "10120:19:9"
                }
              ]
            },
            "documentation": null,
            "id": 1628,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "nextRune",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1618,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1617,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1628,
                  "src": "10050:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1616,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "10050:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10049:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1621,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1620,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1628,
                  "src": "10092:16:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1619,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "10092:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10091:18:9"
            },
            "scope": 2700,
            "src": "10032:114:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1774,
              "nodeType": "Block",
              "src": "10407:1013:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1635,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1630,
                        "src": "10421:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1636,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "10421:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1637,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10434:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10421:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1642,
                  "nodeType": "IfStatement",
                  "src": "10417:53:9",
                  "trueBody": {
                    "id": 1641,
                    "nodeType": "Block",
                    "src": "10437:33:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10458:1:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1634,
                        "id": 1640,
                        "nodeType": "Return",
                        "src": "10451:8:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1644,
                      "name": "word",
                      "nodeType": "VariableDeclaration",
                      "scope": 1775,
                      "src": "10480:9:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1643,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10480:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1645,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10480:9:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1647,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 1775,
                      "src": "10499:11:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1646,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10499:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1648,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10499:11:9"
                },
                {
                  "assignments": [
                    1650
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1650,
                      "name": "divisor",
                      "nodeType": "VariableDeclaration",
                      "scope": 1775,
                      "src": "10520:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1649,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10520:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1654,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    },
                    "id": 1653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 1651,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10535:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "323438",
                      "id": 1652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10540:3:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_248_by_1",
                        "typeString": "int_const 248"
                      },
                      "value": "248"
                    },
                    "src": "10535:8:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10520:23:9"
                },
                {
                  "externalReferences": [
                    {
                      "word": {
                        "declaration": 1644,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10609:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 1630,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10632:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1655,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    word := mload(mload(add(self, 32)))\n}",
                  "src": "10598:60:9"
                },
                {
                  "assignments": [
                    1657
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1657,
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 1775,
                      "src": "10654:6:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1656,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10654:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1661,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1658,
                      "name": "word",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1644,
                      "src": "10663:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1659,
                      "name": "divisor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1650,
                      "src": "10670:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10663:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10654:23:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1664,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1662,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1657,
                      "src": "10691:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30783830",
                      "id": 1663,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10695:4:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "10691:8:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1676,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1674,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1657,
                        "src": "10766:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30784530",
                        "id": 1675,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10770:4:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "10766:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1688,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1657,
                          "src": "10848:1:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30784630",
                          "id": 1689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10852:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "10848:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 1712,
                        "nodeType": "Block",
                        "src": "10927:63:9",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1706,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1702,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1633,
                                "src": "10941:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1705,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1703,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1657,
                                  "src": "10947:1:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783037",
                                  "id": 1704,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10951:4:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_7_by_1",
                                    "typeString": "int_const 7"
                                  },
                                  "value": "0x07"
                                },
                                "src": "10947:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10941:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1707,
                            "nodeType": "ExpressionStatement",
                            "src": "10941:14:9"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1710,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1708,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1647,
                                "src": "10969:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "34",
                                "id": 1709,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10978:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "10969:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1711,
                            "nodeType": "ExpressionStatement",
                            "src": "10969:10:9"
                          }
                        ]
                      },
                      "id": 1713,
                      "nodeType": "IfStatement",
                      "src": "10845:145:9",
                      "trueBody": {
                        "id": 1701,
                        "nodeType": "Block",
                        "src": "10858:63:9",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1695,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1691,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1633,
                                "src": "10872:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1694,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1692,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1657,
                                  "src": "10878:1:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783046",
                                  "id": 1693,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10882:4:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_15_by_1",
                                    "typeString": "int_const 15"
                                  },
                                  "value": "0x0F"
                                },
                                "src": "10878:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10872:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1696,
                            "nodeType": "ExpressionStatement",
                            "src": "10872:14:9"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1699,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1697,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1647,
                                "src": "10900:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 1698,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10909:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "10900:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1700,
                            "nodeType": "ExpressionStatement",
                            "src": "10900:10:9"
                          }
                        ]
                      }
                    },
                    "id": 1714,
                    "nodeType": "IfStatement",
                    "src": "10763:227:9",
                    "trueBody": {
                      "id": 1687,
                      "nodeType": "Block",
                      "src": "10776:63:9",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 1681,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 1677,
                              "name": "ret",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1633,
                              "src": "10790:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1680,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1678,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1657,
                                "src": "10796:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30783146",
                                "id": 1679,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10800:4:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x1F"
                              },
                              "src": "10796:8:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10790:14:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1682,
                          "nodeType": "ExpressionStatement",
                          "src": "10790:14:9"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 1685,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 1683,
                              "name": "length",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1647,
                              "src": "10818:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 1684,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10827:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "10818:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1686,
                          "nodeType": "ExpressionStatement",
                          "src": "10818:10:9"
                        }
                      ]
                    }
                  },
                  "id": 1715,
                  "nodeType": "IfStatement",
                  "src": "10687:303:9",
                  "trueBody": {
                    "id": 1673,
                    "nodeType": "Block",
                    "src": "10701:56:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1665,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1633,
                            "src": "10715:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1666,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1657,
                            "src": "10721:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10715:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1668,
                        "nodeType": "ExpressionStatement",
                        "src": "10715:7:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1669,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1647,
                            "src": "10736:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 1670,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10745:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "10736:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1672,
                        "nodeType": "ExpressionStatement",
                        "src": "10736:10:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1716,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1647,
                      "src": "11046:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1717,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1630,
                        "src": "11055:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1718,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "11055:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11046:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1723,
                  "nodeType": "IfStatement",
                  "src": "11042:57:9",
                  "trueBody": {
                    "id": 1722,
                    "nodeType": "Block",
                    "src": "11066:33:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11087:1:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1634,
                        "id": 1721,
                        "nodeType": "Return",
                        "src": "11080:8:9"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 1770,
                    "nodeType": "Block",
                    "src": "11143:250:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1734,
                            "name": "divisor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1650,
                            "src": "11157:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1737,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1735,
                              "name": "divisor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1650,
                              "src": "11167:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "323536",
                              "id": 1736,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11177:3:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_256_by_1",
                                "typeString": "int_const 256"
                              },
                              "value": "256"
                            },
                            "src": "11167:13:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11157:23:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1739,
                        "nodeType": "ExpressionStatement",
                        "src": "11157:23:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1747,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1740,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1657,
                            "src": "11194:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1746,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1743,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1741,
                                    "name": "word",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1644,
                                    "src": "11199:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 1742,
                                    "name": "divisor",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1650,
                                    "src": "11206:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "11199:14:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 1744,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11198:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30784646",
                              "id": 1745,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11217:4:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_255_by_1",
                                "typeString": "int_const 255"
                              },
                              "value": "0xFF"
                            },
                            "src": "11198:23:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11194:27:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1748,
                        "nodeType": "ExpressionStatement",
                        "src": "11194:27:9"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1751,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1749,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1657,
                              "src": "11239:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30784330",
                              "id": 1750,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11243:4:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_192_by_1",
                                "typeString": "int_const 192"
                              },
                              "value": "0xC0"
                            },
                            "src": "11239:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30783830",
                            "id": 1752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11251:4:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "11239:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1757,
                        "nodeType": "IfStatement",
                        "src": "11235:105:9",
                        "trueBody": {
                          "id": 1756,
                          "nodeType": "Block",
                          "src": "11257:83:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1754,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11324:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 1634,
                              "id": 1755,
                              "nodeType": "Return",
                              "src": "11317:8:9"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1758,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1633,
                            "src": "11353:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1767,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1761,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1759,
                                    "name": "ret",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1633,
                                    "src": "11360:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "3634",
                                    "id": 1760,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11366:2:9",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  "src": "11360:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 1762,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11359:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "|",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1765,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1763,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1657,
                                    "src": "11373:1:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30783346",
                                    "id": 1764,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11377:4:9",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_63_by_1",
                                      "typeString": "int_const 63"
                                    },
                                    "value": "0x3F"
                                  },
                                  "src": "11373:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 1766,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11372:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "11359:23:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11353:29:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1769,
                        "nodeType": "ExpressionStatement",
                        "src": "11353:29:9"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1728,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1725,
                      "src": "11126:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1729,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1647,
                      "src": "11130:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11126:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1771,
                  "initializationExpression": {
                    "assignments": [
                      1725
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1725,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1775,
                        "src": "11114:6:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1724,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "11114:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1727,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 1726,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11123:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "11114:10:9"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1732,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "11138:3:9",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1731,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1725,
                        "src": "11138:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1733,
                    "nodeType": "ExpressionStatement",
                    "src": "11138:3:9"
                  },
                  "nodeType": "ForStatement",
                  "src": "11109:284:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1772,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1633,
                    "src": "11410:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1634,
                  "id": 1773,
                  "nodeType": "Return",
                  "src": "11403:10:9"
                }
              ]
            },
            "documentation": null,
            "id": 1775,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "ord",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1630,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1775,
                  "src": "10355:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1629,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "10355:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10354:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1634,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1633,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1775,
                  "src": "10397:8:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1632,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10397:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10396:10:9"
            },
            "scope": 2700,
            "src": "10342:1078:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1783,
              "nodeType": "Block",
              "src": "11642:100:9",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "self": {
                        "declaration": 1777,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11720:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 1780,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11675:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 1777,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11702:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1782,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ret := keccak256(mload(add(self, 32)), mload(self))\n}",
                  "src": "11652:90:9"
                }
              ]
            },
            "documentation": null,
            "id": 1784,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "keccak",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1778,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1777,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1784,
                  "src": "11587:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1776,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "11587:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11586:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1781,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1780,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1784,
                  "src": "11629:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1779,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11629:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11628:13:9"
            },
            "scope": 2700,
            "src": "11571:171:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1817,
              "nodeType": "Block",
              "src": "12080:456:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1797,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1793,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1786,
                        "src": "12094:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1794,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "12094:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1795,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1788,
                        "src": "12106:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1796,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "12106:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12094:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1801,
                  "nodeType": "IfStatement",
                  "src": "12090:66:9",
                  "trueBody": {
                    "id": 1800,
                    "nodeType": "Block",
                    "src": "12119:37:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 1798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12140:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 1792,
                        "id": 1799,
                        "nodeType": "Return",
                        "src": "12133:12:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1802,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1786,
                        "src": "12170:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1803,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "12170:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1804,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1788,
                        "src": "12183:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1805,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "12183:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12170:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1810,
                  "nodeType": "IfStatement",
                  "src": "12166:66:9",
                  "trueBody": {
                    "id": 1809,
                    "nodeType": "Block",
                    "src": "12196:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12217:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1792,
                        "id": 1808,
                        "nodeType": "Return",
                        "src": "12210:11:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1812,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 1818,
                      "src": "12242:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1811,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "12242:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1813,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12242:10:9"
                },
                {
                  "externalReferences": [
                    {
                      "needle": {
                        "declaration": 1788,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12305:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 1786,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12350:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "equal": {
                        "declaration": 1812,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12429:5:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "needle": {
                        "declaration": 1788,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12402:6:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1814,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let length := mload(needle)\n    let selfptr := mload(add(self, 0x20))\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                  "src": "12262:261:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1815,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1812,
                    "src": "12524:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1792,
                  "id": 1816,
                  "nodeType": "Return",
                  "src": "12517:12:9"
                }
              ]
            },
            "documentation": null,
            "id": 1818,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "startsWith",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1786,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1818,
                  "src": "12011:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1785,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "12011:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1788,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 1818,
                  "src": "12030:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1787,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "12030:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12010:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1791,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1818,
                  "src": "12074:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1790,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12074:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12073:6:9"
            },
            "scope": 2700,
            "src": "11991:545:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1867,
              "nodeType": "Block",
              "src": "12901:568:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1827,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1820,
                        "src": "12915:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1828,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "12915:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1829,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1822,
                        "src": "12927:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1830,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "12927:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12915:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1835,
                  "nodeType": "IfStatement",
                  "src": "12911:65:9",
                  "trueBody": {
                    "id": 1834,
                    "nodeType": "Block",
                    "src": "12940:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1832,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1820,
                          "src": "12961:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1826,
                        "id": 1833,
                        "nodeType": "Return",
                        "src": "12954:11:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1837
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1837,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 1868,
                      "src": "12986:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1836,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "12986:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1839,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1838,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12999:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12986:17:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1840,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1820,
                        "src": "13017:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1841,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "13017:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1842,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1822,
                        "src": "13030:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1843,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "13030:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13017:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1847,
                  "nodeType": "IfStatement",
                  "src": "13013:320:9",
                  "trueBody": {
                    "id": 1846,
                    "nodeType": "Block",
                    "src": "13043:290:9",
                    "statements": [
                      {
                        "externalReferences": [
                          {
                            "needle": {
                              "declaration": 1822,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13104:6:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "self": {
                              "declaration": 1820,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13153:4:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "equal": {
                              "declaration": 1837,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13240:5:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 1822,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13209:6:9",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 1845,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    let length := mload(needle)\n    let selfptr := mload(add(self, 0x20))\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                        "src": "13057:276:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1848,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1837,
                    "src": "13347:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1864,
                  "nodeType": "IfStatement",
                  "src": "13343:98:9",
                  "trueBody": {
                    "id": 1863,
                    "nodeType": "Block",
                    "src": "13354:87:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1854,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1849,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1820,
                              "src": "13368:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1851,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "13368:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1852,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1822,
                              "src": "13381:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1853,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "13381:11:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13368:24:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1855,
                        "nodeType": "ExpressionStatement",
                        "src": "13368:24:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1856,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1820,
                              "src": "13406:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1858,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1011,
                            "src": "13406:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1859,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1822,
                              "src": "13419:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1860,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "13419:11:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13406:24:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1862,
                        "nodeType": "ExpressionStatement",
                        "src": "13406:24:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1865,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1820,
                    "src": "13458:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1826,
                  "id": 1866,
                  "nodeType": "Return",
                  "src": "13451:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 1868,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "beyond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1823,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1820,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1868,
                  "src": "12824:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1819,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "12824:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1822,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 1868,
                  "src": "12843:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1821,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "12843:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12823:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1826,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1825,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1868,
                  "src": "12887:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1824,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "12887:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12886:14:9"
            },
            "scope": 2700,
            "src": "12808:661:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1911,
              "nodeType": "Block",
              "src": "13806:466:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1877,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1870,
                        "src": "13820:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1878,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "13820:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1879,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1872,
                        "src": "13832:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1880,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "13832:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13820:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1885,
                  "nodeType": "IfStatement",
                  "src": "13816:66:9",
                  "trueBody": {
                    "id": 1884,
                    "nodeType": "Block",
                    "src": "13845:37:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 1882,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13866:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 1876,
                        "id": 1883,
                        "nodeType": "Return",
                        "src": "13859:12:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1887
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1887,
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1912,
                      "src": "13892:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1886,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13892:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1896,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1892,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1888,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1870,
                          "src": "13907:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1889,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "13907:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1890,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1870,
                          "src": "13919:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1891,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "13919:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "13907:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1893,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1872,
                        "src": "13931:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1894,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "13931:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13907:35:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13892:50:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1897,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1887,
                      "src": "13957:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1898,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1872,
                        "src": "13968:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1899,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "13968:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13957:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1904,
                  "nodeType": "IfStatement",
                  "src": "13953:64:9",
                  "trueBody": {
                    "id": 1903,
                    "nodeType": "Block",
                    "src": "13981:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1901,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14002:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1876,
                        "id": 1902,
                        "nodeType": "Return",
                        "src": "13995:11:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1906,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 1912,
                      "src": "14027:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1905,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "14027:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1907,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14027:10:9"
                },
                {
                  "externalReferences": [
                    {
                      "needle": {
                        "declaration": 1872,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14090:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "needle": {
                        "declaration": 1872,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14137:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "equal": {
                        "declaration": 1906,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14164:5:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "selfptr": {
                        "declaration": 1887,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14186:7:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1908,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let length := mload(needle)\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                  "src": "14047:212:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1909,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1906,
                    "src": "14260:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1876,
                  "id": 1910,
                  "nodeType": "Return",
                  "src": "14253:12:9"
                }
              ]
            },
            "documentation": null,
            "id": 1912,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "endsWith",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1873,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1870,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1912,
                  "src": "13737:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1869,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "13737:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1872,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 1912,
                  "src": "13756:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1871,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "13756:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13736:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1875,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1912,
                  "src": "13800:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1874,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13800:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13799:6:9"
            },
            "scope": 2700,
            "src": "13719:553:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1964,
              "nodeType": "Block",
              "src": "14628:534:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1921,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1914,
                        "src": "14642:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1922,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "14642:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1923,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1916,
                        "src": "14654:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1924,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "14654:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14642:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1929,
                  "nodeType": "IfStatement",
                  "src": "14638:65:9",
                  "trueBody": {
                    "id": 1928,
                    "nodeType": "Block",
                    "src": "14667:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1926,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1914,
                          "src": "14688:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1920,
                        "id": 1927,
                        "nodeType": "Return",
                        "src": "14681:11:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1931
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1931,
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1965,
                      "src": "14713:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1930,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "14713:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1940,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1936,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1932,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1914,
                          "src": "14728:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1933,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "14728:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1934,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1914,
                          "src": "14740:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1935,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "14740:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "14728:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1937,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1916,
                        "src": "14752:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1938,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "14752:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14728:35:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14713:50:9"
                },
                {
                  "assignments": [
                    1942
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1942,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 1965,
                      "src": "14773:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1941,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "14773:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1944,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14786:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14773:17:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1945,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1931,
                      "src": "14804:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1946,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1916,
                        "src": "14815:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1947,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "14815:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14804:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1951,
                  "nodeType": "IfStatement",
                  "src": "14800:264:9",
                  "trueBody": {
                    "id": 1950,
                    "nodeType": "Block",
                    "src": "14828:236:9",
                    "statements": [
                      {
                        "externalReferences": [
                          {
                            "needle": {
                              "declaration": 1916,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "14889:6:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 1916,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "14940:6:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "equal": {
                              "declaration": 1942,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "14971:5:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "selfptr": {
                              "declaration": 1931,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "14993:7:9",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 1949,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    let length := mload(needle)\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                        "src": "14842:222:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1952,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1942,
                    "src": "15078:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1961,
                  "nodeType": "IfStatement",
                  "src": "15074:60:9",
                  "trueBody": {
                    "id": 1960,
                    "nodeType": "Block",
                    "src": "15085:49:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1953,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1914,
                              "src": "15099:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1955,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "15099:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1956,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1916,
                              "src": "15112:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1957,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "15112:11:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15099:24:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1959,
                        "nodeType": "ExpressionStatement",
                        "src": "15099:24:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1962,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1914,
                    "src": "15151:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1920,
                  "id": 1963,
                  "nodeType": "Return",
                  "src": "15144:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 1965,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "until",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1917,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1914,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1965,
                  "src": "14551:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1913,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "14551:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1916,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 1965,
                  "src": "14570:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1915,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "14570:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14550:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1920,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1919,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1965,
                  "src": "14614:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1918,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "14614:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14613:14:9"
            },
            "scope": 2700,
            "src": "14536:626:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2085,
              "nodeType": "Block",
              "src": "15424:1267:9",
              "statements": [
                {
                  "assignments": [
                    1979
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1979,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2086,
                      "src": "15434:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1978,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15434:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1981,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 1980,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1969,
                    "src": "15445:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15434:18:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1983,
                      "name": "idx",
                      "nodeType": "VariableDeclaration",
                      "scope": 2086,
                      "src": "15462:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1982,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15462:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1984,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15462:8:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1987,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1985,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1971,
                      "src": "15485:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1986,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1967,
                      "src": "15498:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15485:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2080,
                  "nodeType": "IfStatement",
                  "src": "15481:1170:9",
                  "trueBody": {
                    "id": 2079,
                    "nodeType": "Block",
                    "src": "15507:1144:9",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1990,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1988,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1971,
                            "src": "15525:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 1989,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15538:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "15525:15:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2077,
                          "nodeType": "Block",
                          "src": "16175:466:9",
                          "statements": [
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2046,
                                  "name": "hash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2086,
                                  "src": "16242:12:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2045,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16242:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2047,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "16242:12:9"
                            },
                            {
                              "externalReferences": [
                                {
                                  "hash": {
                                    "declaration": 2046,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16283:4:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needleptr": {
                                    "declaration": 1973,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16301:9:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needlelen": {
                                    "declaration": 1971,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16312:9:9",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 2048,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    hash := keccak256(needleptr, needlelen)\n}",
                              "src": "16272:73:9"
                            },
                            {
                              "body": {
                                "id": 2075,
                                "nodeType": "Block",
                                "src": "16391:236:9",
                                "statements": [
                                  {
                                    "assignments": [],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 2062,
                                        "name": "testHash",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 2086,
                                        "src": "16413:16:9",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 2061,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "16413:7:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "value": null,
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 2063,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "16413:16:9"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "testHash": {
                                          "declaration": 2062,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16462:8:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptr": {
                                          "declaration": 1979,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16484:3:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "needlelen": {
                                          "declaration": 1971,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16489:9:9",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 2064,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    testHash := keccak256(ptr, needlelen)\n}",
                                    "src": "16451:73:9"
                                  },
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 2067,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 2065,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2046,
                                        "src": "16526:4:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 2066,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2062,
                                        "src": "16534:8:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "16526:16:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 2070,
                                    "nodeType": "IfStatement",
                                    "src": "16522:56:9",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 2068,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1979,
                                        "src": "16575:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 1977,
                                      "id": 2069,
                                      "nodeType": "Return",
                                      "src": "16568:10:9"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2073,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 2071,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1979,
                                        "src": "16600:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 2072,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "16607:1:9",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "16600:8:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2074,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16600:8:9"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2057,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 2053,
                                  "name": "idx",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1983,
                                  "src": "16356:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2056,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2054,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1967,
                                    "src": "16363:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 2055,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1971,
                                    "src": "16373:9:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "16363:19:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16356:26:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2076,
                              "initializationExpression": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2051,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 2049,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1983,
                                    "src": "16347:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2050,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16353:1:9",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "16347:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2052,
                                "nodeType": "ExpressionStatement",
                                "src": "16347:7:9"
                              },
                              "loopExpression": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2059,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "++",
                                  "prefix": false,
                                  "src": "16384:5:9",
                                  "subExpression": {
                                    "argumentTypes": null,
                                    "id": 2058,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1983,
                                    "src": "16384:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2060,
                                "nodeType": "ExpressionStatement",
                                "src": "16384:5:9"
                              },
                              "nodeType": "ForStatement",
                              "src": "16342:285:9"
                            }
                          ]
                        },
                        "id": 2078,
                        "nodeType": "IfStatement",
                        "src": "15521:1120:9",
                        "trueBody": {
                          "id": 2044,
                          "nodeType": "Block",
                          "src": "15542:627:9",
                          "statements": [
                            {
                              "assignments": [
                                1992
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1992,
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2086,
                                  "src": "15560:12:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 1991,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15560:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2008,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2006,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "~",
                                    "prefix": true,
                                    "src": "15583:34:9",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 2004,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 2002,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "32",
                                              "id": 1994,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "15585:1:9",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                              },
                                              "value": "2"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "components": [
                                                {
                                                  "argumentTypes": null,
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 2000,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "38",
                                                    "id": 1995,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "15591:1:9",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_8_by_1",
                                                      "typeString": "int_const 8"
                                                    },
                                                    "value": "8"
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "*",
                                                  "rightExpression": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                      {
                                                        "argumentTypes": null,
                                                        "commonType": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        "id": 1998,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                          "argumentTypes": null,
                                                          "hexValue": "3332",
                                                          "id": 1996,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "15596:2:9",
                                                          "subdenomination": null,
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                          },
                                                          "value": "32"
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                          "argumentTypes": null,
                                                          "id": 1997,
                                                          "name": "needlelen",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 1971,
                                                          "src": "15601:9:9",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "src": "15596:14:9",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "id": 1999,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "15595:16:9",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "15591:20:9",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 2001,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "15590:22:9",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "15585:27:9",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 2003,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "15615:1:9",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "15585:31:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 2005,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "15584:33:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1993,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15575:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 2007,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15575:43:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15560:58:9"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2010,
                                  "name": "needledata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2086,
                                  "src": "15637:18:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2009,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15637:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2011,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15637:18:9"
                            },
                            {
                              "externalReferences": [
                                {
                                  "needleptr": {
                                    "declaration": 1973,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15708:9:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needledata": {
                                    "declaration": 2010,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15684:10:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 1992,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15720:4:9",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 2012,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    needledata := and(mload(needleptr), mask)\n}",
                              "src": "15673:76:9"
                            },
                            {
                              "assignments": [
                                2014
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2014,
                                  "name": "end",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2086,
                                  "src": "15745:8:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 2013,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15745:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2020,
                              "initialValue": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2019,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2017,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2015,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1969,
                                    "src": "15756:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 2016,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1967,
                                    "src": "15766:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "15756:17:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 2018,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1971,
                                  "src": "15776:9:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15756:29:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15745:40:9"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2022,
                                  "name": "ptrdata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2086,
                                  "src": "15803:15:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2021,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15803:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2023,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15803:15:9"
                            },
                            {
                              "externalReferences": [
                                {
                                  "ptr": {
                                    "declaration": 1979,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15868:3:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "ptrdata": {
                                    "declaration": 2022,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15847:7:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 1992,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15874:4:9",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 2024,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                              "src": "15836:68:9"
                            },
                            {
                              "body": {
                                "id": 2040,
                                "nodeType": "Block",
                                "src": "15929:198:9",
                                "statements": [
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2030,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 2028,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1979,
                                        "src": "15955:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 2029,
                                        "name": "end",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2014,
                                        "src": "15962:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "15955:10:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 2035,
                                    "nodeType": "IfStatement",
                                    "src": "15951:64:9",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2033,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 2031,
                                          "name": "selfptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1969,
                                          "src": "15998:7:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 2032,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1967,
                                          "src": "16008:7:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "15998:17:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 1977,
                                      "id": 2034,
                                      "nodeType": "Return",
                                      "src": "15991:24:9"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2037,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "16037:5:9",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "id": 2036,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1979,
                                        "src": "16037:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2038,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16037:5:9"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "ptr": {
                                          "declaration": 1979,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16096:3:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptrdata": {
                                          "declaration": 2022,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16075:7:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "mask": {
                                          "declaration": 1992,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16102:4:9",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 2039,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                                    "src": "16064:63:9"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 2027,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 2025,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2022,
                                  "src": "15906:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 2026,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2010,
                                  "src": "15917:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "15906:21:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2041,
                              "nodeType": "WhileStatement",
                              "src": "15899:228:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2042,
                                "name": "ptr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1979,
                                "src": "16151:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 1977,
                              "id": 2043,
                              "nodeType": "Return",
                              "src": "16144:10:9"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2081,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1969,
                      "src": "16667:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2082,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1967,
                      "src": "16677:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16667:17:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1977,
                  "id": 2084,
                  "nodeType": "Return",
                  "src": "16660:24:9"
                }
              ]
            },
            "documentation": null,
            "id": 2086,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "findPtr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1974,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1967,
                  "name": "selflen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "15336:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1966,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15336:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1969,
                  "name": "selfptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "15350:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1968,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15350:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1971,
                  "name": "needlelen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "15364:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1970,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15364:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1973,
                  "name": "needleptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "15380:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1972,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15380:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15335:60:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1977,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1976,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "15418:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1975,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15418:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15417:6:9"
            },
            "scope": 2700,
            "src": "15319:1372:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2202,
              "nodeType": "Block",
              "src": "16950:1270:9",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2100,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2203,
                      "src": "16960:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2099,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "16960:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2101,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16960:8:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2102,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "16983:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2103,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2088,
                      "src": "16996:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16983:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2199,
                  "nodeType": "IfStatement",
                  "src": "16979:1211:9",
                  "trueBody": {
                    "id": 2198,
                    "nodeType": "Block",
                    "src": "17005:1185:9",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2105,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2092,
                            "src": "17023:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 2106,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17036:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "17023:15:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2196,
                          "nodeType": "Block",
                          "src": "17674:506:9",
                          "statements": [
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2163,
                                  "name": "hash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2203,
                                  "src": "17741:12:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2162,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17741:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2164,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17741:12:9"
                            },
                            {
                              "externalReferences": [
                                {
                                  "hash": {
                                    "declaration": 2163,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17782:4:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needleptr": {
                                    "declaration": 2094,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17800:9:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needlelen": {
                                    "declaration": 2092,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17811:9:9",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 2165,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    hash := keccak256(needleptr, needlelen)\n}",
                              "src": "17771:72:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2173,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2166,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2100,
                                  "src": "17840:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2172,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2167,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2090,
                                    "src": "17846:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2170,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 2168,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2088,
                                          "src": "17857:7:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 2169,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2092,
                                          "src": "17867:9:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "17857:19:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 2171,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "17856:21:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "17846:31:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17840:37:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2174,
                              "nodeType": "ExpressionStatement",
                              "src": "17840:37:9"
                            },
                            {
                              "body": {
                                "id": 2194,
                                "nodeType": "Block",
                                "src": "17918:248:9",
                                "statements": [
                                  {
                                    "assignments": [],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 2179,
                                        "name": "testHash",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 2203,
                                        "src": "17940:16:9",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 2178,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "17940:7:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "value": null,
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 2180,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "17940:16:9"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "testHash": {
                                          "declaration": 2179,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "17989:8:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptr": {
                                          "declaration": 2100,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "18011:3:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "needlelen": {
                                          "declaration": 2092,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "18016:9:9",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 2181,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    testHash := keccak256(ptr, needlelen)\n}",
                                    "src": "17978:73:9"
                                  },
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 2184,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 2182,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2163,
                                        "src": "18053:4:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 2183,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2179,
                                        "src": "18061:8:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "18053:16:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 2189,
                                    "nodeType": "IfStatement",
                                    "src": "18049:68:9",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2187,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 2185,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2100,
                                          "src": "18102:3:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 2186,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2092,
                                          "src": "18108:9:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "18102:15:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 2098,
                                      "id": 2188,
                                      "nodeType": "Return",
                                      "src": "18095:22:9"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2192,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 2190,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2100,
                                        "src": "18139:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "-=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 2191,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "18146:1:9",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "18139:8:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2193,
                                    "nodeType": "ExpressionStatement",
                                    "src": "18139:8:9"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2177,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 2175,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2100,
                                  "src": "17902:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 2176,
                                  "name": "selfptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2090,
                                  "src": "17909:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17902:14:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2195,
                              "nodeType": "WhileStatement",
                              "src": "17895:271:9"
                            }
                          ]
                        },
                        "id": 2197,
                        "nodeType": "IfStatement",
                        "src": "17019:1161:9",
                        "trueBody": {
                          "id": 2161,
                          "nodeType": "Block",
                          "src": "17040:628:9",
                          "statements": [
                            {
                              "assignments": [
                                2109
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2109,
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2203,
                                  "src": "17058:12:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2108,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17058:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2125,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2123,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "~",
                                    "prefix": true,
                                    "src": "17081:34:9",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 2121,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 2119,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "32",
                                              "id": 2111,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "17083:1:9",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                              },
                                              "value": "2"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "components": [
                                                {
                                                  "argumentTypes": null,
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 2117,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "38",
                                                    "id": 2112,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "17089:1:9",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_8_by_1",
                                                      "typeString": "int_const 8"
                                                    },
                                                    "value": "8"
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "*",
                                                  "rightExpression": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                      {
                                                        "argumentTypes": null,
                                                        "commonType": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        "id": 2115,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                          "argumentTypes": null,
                                                          "hexValue": "3332",
                                                          "id": 2113,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "17094:2:9",
                                                          "subdenomination": null,
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                          },
                                                          "value": "32"
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                          "argumentTypes": null,
                                                          "id": 2114,
                                                          "name": "needlelen",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 2092,
                                                          "src": "17099:9:9",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "src": "17094:14:9",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "id": 2116,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "17093:16:9",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "17089:20:9",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 2118,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "17088:22:9",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "17083:27:9",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 2120,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "17113:1:9",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "17083:31:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 2122,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "17082:33:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2110,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "17073:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 2124,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17073:43:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17058:58:9"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2127,
                                  "name": "needledata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2203,
                                  "src": "17135:18:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2126,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17135:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2128,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17135:18:9"
                            },
                            {
                              "externalReferences": [
                                {
                                  "needleptr": {
                                    "declaration": 2094,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17206:9:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needledata": {
                                    "declaration": 2127,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17182:10:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 2109,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17218:4:9",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 2129,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    needledata := and(mload(needleptr), mask)\n}",
                              "src": "17171:75:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2136,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2130,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2100,
                                  "src": "17243:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2135,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2133,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 2131,
                                      "name": "selfptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2090,
                                      "src": "17249:7:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 2132,
                                      "name": "selflen",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2088,
                                      "src": "17259:7:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "17249:17:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 2134,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2092,
                                    "src": "17269:9:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "17249:29:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17243:35:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2137,
                              "nodeType": "ExpressionStatement",
                              "src": "17243:35:9"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2139,
                                  "name": "ptrdata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2203,
                                  "src": "17296:15:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2138,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17296:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2140,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17296:15:9"
                            },
                            {
                              "externalReferences": [
                                {
                                  "ptr": {
                                    "declaration": 2100,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17361:3:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "ptrdata": {
                                    "declaration": 2139,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17340:7:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 2109,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17367:4:9",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 2141,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                              "src": "17329:68:9"
                            },
                            {
                              "body": {
                                "id": 2155,
                                "nodeType": "Block",
                                "src": "17422:192:9",
                                "statements": [
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2147,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 2145,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2100,
                                        "src": "17448:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 2146,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2090,
                                        "src": "17455:7:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "17448:14:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 2150,
                                    "nodeType": "IfStatement",
                                    "src": "17444:58:9",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 2148,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2090,
                                        "src": "17495:7:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 2098,
                                      "id": 2149,
                                      "nodeType": "Return",
                                      "src": "17488:14:9"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2152,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "--",
                                      "prefix": false,
                                      "src": "17524:5:9",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "id": 2151,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2100,
                                        "src": "17524:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2153,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17524:5:9"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "ptr": {
                                          "declaration": 2100,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "17583:3:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptrdata": {
                                          "declaration": 2139,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "17562:7:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "mask": {
                                          "declaration": 2109,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "17589:4:9",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 2154,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                                    "src": "17551:63:9"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 2144,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 2142,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2139,
                                  "src": "17399:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 2143,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2127,
                                  "src": "17410:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "17399:21:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2156,
                              "nodeType": "WhileStatement",
                              "src": "17392:222:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2159,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 2157,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2100,
                                  "src": "17638:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 2158,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2092,
                                  "src": "17644:9:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17638:15:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 2098,
                              "id": 2160,
                              "nodeType": "Return",
                              "src": "17631:22:9"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2200,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2090,
                    "src": "18206:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2098,
                  "id": 2201,
                  "nodeType": "Return",
                  "src": "18199:14:9"
                }
              ]
            },
            "documentation": null,
            "id": 2203,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rfindPtr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2095,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2088,
                  "name": "selflen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "16862:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2087,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16862:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2090,
                  "name": "selfptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "16876:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2089,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16876:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2092,
                  "name": "needlelen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "16890:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2091,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16890:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2094,
                  "name": "needleptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "16906:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2093,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16906:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16861:60:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2098,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2097,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "16944:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2096,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16944:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16943:6:9"
            },
            "scope": 2700,
            "src": "16844:1376:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2242,
              "nodeType": "Block",
              "src": "18647:167:9",
              "statements": [
                {
                  "assignments": [
                    2213
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2213,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2243,
                      "src": "18657:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2212,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "18657:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2224,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2215,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2205,
                          "src": "18676:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2216,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "18676:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2217,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2205,
                          "src": "18687:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2218,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "18687:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2219,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2207,
                          "src": "18698:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2220,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "18698:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2221,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2207,
                          "src": "18711:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2222,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "18711:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2214,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2086,
                      "src": "18668:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18668:55:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18657:66:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2225,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "18733:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2227,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "18733:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2231,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2228,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2213,
                        "src": "18746:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2229,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2205,
                          "src": "18752:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2230,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "18752:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "18746:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18733:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2233,
                  "nodeType": "ExpressionStatement",
                  "src": "18733:28:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2234,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "18771:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2236,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "18771:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2237,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2213,
                      "src": "18783:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18771:15:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2239,
                  "nodeType": "ExpressionStatement",
                  "src": "18771:15:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2240,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2205,
                    "src": "18803:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2211,
                  "id": 2241,
                  "nodeType": "Return",
                  "src": "18796:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 2243,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "find",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2205,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2243,
                  "src": "18570:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2204,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "18570:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2207,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2243,
                  "src": "18589:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2206,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "18589:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18569:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2211,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2210,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2243,
                  "src": "18633:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2209,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "18633:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18632:14:9"
            },
            "scope": 2700,
            "src": "18556:258:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2276,
              "nodeType": "Block",
              "src": "19265:142:9",
              "statements": [
                {
                  "assignments": [
                    2253
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2253,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2277,
                      "src": "19275:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2252,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "19275:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2264,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2255,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2245,
                          "src": "19295:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2256,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "19295:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2257,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2245,
                          "src": "19306:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2258,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "19306:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2259,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2247,
                          "src": "19317:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2260,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "19317:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2261,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2247,
                          "src": "19330:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2262,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "19330:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2254,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2203,
                      "src": "19286:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19286:56:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19275:67:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2265,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2245,
                        "src": "19352:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2267,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "19352:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2271,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2268,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2253,
                        "src": "19364:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2269,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2245,
                          "src": "19370:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2270,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "19370:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "19364:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19352:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2273,
                  "nodeType": "ExpressionStatement",
                  "src": "19352:27:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2274,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2245,
                    "src": "19396:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2251,
                  "id": 2275,
                  "nodeType": "Return",
                  "src": "19389:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 2277,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rfind",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2245,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "19188:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2244,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "19188:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2247,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "19207:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2246,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "19207:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19187:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2251,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2250,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "19251:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2249,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "19251:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19250:14:9"
            },
            "scope": 2700,
            "src": "19173:234:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2354,
              "nodeType": "Block",
              "src": "20025:392:9",
              "statements": [
                {
                  "assignments": [
                    2289
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2289,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2355,
                      "src": "20035:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2288,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "20035:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2300,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2291,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2279,
                          "src": "20054:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2292,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "20054:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2293,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2279,
                          "src": "20065:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2294,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "20065:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2295,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2281,
                          "src": "20076:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2296,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "20076:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2297,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2281,
                          "src": "20089:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2298,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "20089:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2290,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2086,
                      "src": "20046:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20046:55:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20035:66:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2301,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2283,
                        "src": "20111:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2303,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "20111:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2304,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2279,
                        "src": "20124:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2305,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "20124:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20111:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2307,
                  "nodeType": "ExpressionStatement",
                  "src": "20111:22:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2308,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2283,
                        "src": "20143:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2310,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "20143:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2314,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2311,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "20156:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2312,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2279,
                          "src": "20162:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2313,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "20162:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20156:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20143:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2316,
                  "nodeType": "ExpressionStatement",
                  "src": "20143:28:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2323,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2317,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2289,
                      "src": "20185:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2318,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2279,
                          "src": "20192:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2319,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "20192:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2320,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2279,
                          "src": "20204:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2321,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "20204:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20192:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20185:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2350,
                    "nodeType": "Block",
                    "src": "20284:105:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2331,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2279,
                              "src": "20298:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2333,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "20298:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2338,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2334,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2283,
                                "src": "20311:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2335,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "20311:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2336,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2281,
                                "src": "20324:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2337,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "20324:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20311:24:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20298:37:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2340,
                        "nodeType": "ExpressionStatement",
                        "src": "20298:37:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2348,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2341,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2279,
                              "src": "20349:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2343,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1011,
                            "src": "20349:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2347,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2344,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2289,
                              "src": "20361:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2345,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2281,
                                "src": "20367:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2346,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "20367:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20361:17:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20349:29:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2349,
                        "nodeType": "ExpressionStatement",
                        "src": "20349:29:9"
                      }
                    ]
                  },
                  "id": 2351,
                  "nodeType": "IfStatement",
                  "src": "20181:208:9",
                  "trueBody": {
                    "id": 2330,
                    "nodeType": "Block",
                    "src": "20215:63:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2328,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2324,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2279,
                              "src": "20254:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2326,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "20254:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2327,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20266:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "20254:13:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2329,
                        "nodeType": "ExpressionStatement",
                        "src": "20254:13:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2352,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2283,
                    "src": "20405:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2287,
                  "id": 2353,
                  "nodeType": "Return",
                  "src": "20398:12:9"
                }
              ]
            },
            "documentation": null,
            "id": 2355,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "split",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2284,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2279,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2355,
                  "src": "19928:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2278,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "19928:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2281,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2355,
                  "src": "19947:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2280,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "19947:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2283,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2355,
                  "src": "19968:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2282,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "19968:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19927:60:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2287,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2286,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2355,
                  "src": "20011:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2285,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "20011:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20010:14:9"
            },
            "scope": 2700,
            "src": "19913:504:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2370,
              "nodeType": "Block",
              "src": "20986:43:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2365,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2357,
                        "src": "21002:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2366,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2359,
                        "src": "21008:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2367,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2362,
                        "src": "21016:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "id": 2364,
                      "name": "split",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2355,
                        2371
                      ],
                      "referencedDeclaration": 2355,
                      "src": "20996:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1012_memory_ptr_$_t_struct$_slice_$1012_memory_ptr_$_t_struct$_slice_$1012_memory_ptr_$returns$_t_struct$_slice_$1012_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory,struct strings.slice memory) pure returns (struct strings.slice memory)"
                      }
                    },
                    "id": 2368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20996:26:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 2369,
                  "nodeType": "ExpressionStatement",
                  "src": "20996:26:9"
                }
              ]
            },
            "documentation": null,
            "id": 2371,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "split",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2357,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2371,
                  "src": "20903:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2356,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "20903:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2359,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2371,
                  "src": "20922:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2358,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "20922:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20902:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2362,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2371,
                  "src": "20966:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2361,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "20966:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20965:20:9"
            },
            "scope": 2700,
            "src": "20888:141:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2439,
              "nodeType": "Block",
              "src": "21647:346:9",
              "statements": [
                {
                  "assignments": [
                    2383
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2383,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2440,
                      "src": "21657:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2382,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "21657:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2394,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2385,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2373,
                          "src": "21677:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2386,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "21677:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2387,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2373,
                          "src": "21688:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2388,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "21688:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2389,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2375,
                          "src": "21699:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2390,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "21699:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2391,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2375,
                          "src": "21712:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2392,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "21712:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2384,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2203,
                      "src": "21668:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21668:56:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21657:67:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2395,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2377,
                        "src": "21734:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2397,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "21734:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2398,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2383,
                      "src": "21747:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21734:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2400,
                  "nodeType": "ExpressionStatement",
                  "src": "21734:16:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2401,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2377,
                        "src": "21760:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2403,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "21760:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2404,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2373,
                          "src": "21773:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2405,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "21773:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2409,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2406,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2383,
                              "src": "21786:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2407,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2373,
                                "src": "21792:4:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2408,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1011,
                              "src": "21792:9:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "21786:15:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 2410,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "21785:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "21773:29:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21760:42:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2413,
                  "nodeType": "ExpressionStatement",
                  "src": "21760:42:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2414,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2383,
                      "src": "21816:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2415,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2373,
                        "src": "21823:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2416,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "21823:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21816:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2435,
                    "nodeType": "Block",
                    "src": "21903:62:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2433,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2425,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2373,
                              "src": "21917:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2427,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "21917:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2432,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2428,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2377,
                                "src": "21930:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2429,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "21930:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2430,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2375,
                                "src": "21943:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2431,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "21943:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "21930:24:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "21917:37:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2434,
                        "nodeType": "ExpressionStatement",
                        "src": "21917:37:9"
                      }
                    ]
                  },
                  "id": 2436,
                  "nodeType": "IfStatement",
                  "src": "21812:153:9",
                  "trueBody": {
                    "id": 2424,
                    "nodeType": "Block",
                    "src": "21834:63:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2422,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2418,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2373,
                              "src": "21873:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2420,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "21873:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2421,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21885:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "21873:13:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2423,
                        "nodeType": "ExpressionStatement",
                        "src": "21873:13:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2437,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2377,
                    "src": "21981:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2381,
                  "id": 2438,
                  "nodeType": "Return",
                  "src": "21974:12:9"
                }
              ]
            },
            "documentation": null,
            "id": 2440,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rsplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2378,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2373,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2440,
                  "src": "21550:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2372,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "21550:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2375,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2440,
                  "src": "21569:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2374,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "21569:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2377,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2440,
                  "src": "21590:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2376,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "21590:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21549:60:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2381,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2380,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2440,
                  "src": "21633:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2379,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "21633:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21632:14:9"
            },
            "scope": 2700,
            "src": "21534:459:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2455,
              "nodeType": "Block",
              "src": "22561:44:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2450,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2442,
                        "src": "22578:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2451,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2444,
                        "src": "22584:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2452,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2447,
                        "src": "22592:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "id": 2449,
                      "name": "rsplit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2440,
                        2456
                      ],
                      "referencedDeclaration": 2440,
                      "src": "22571:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1012_memory_ptr_$_t_struct$_slice_$1012_memory_ptr_$_t_struct$_slice_$1012_memory_ptr_$returns$_t_struct$_slice_$1012_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory,struct strings.slice memory) pure returns (struct strings.slice memory)"
                      }
                    },
                    "id": 2453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22571:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 2454,
                  "nodeType": "ExpressionStatement",
                  "src": "22571:27:9"
                }
              ]
            },
            "documentation": null,
            "id": 2456,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rsplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2442,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2456,
                  "src": "22478:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2441,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "22478:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2444,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2456,
                  "src": "22497:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2443,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "22497:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22477:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2447,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2456,
                  "src": "22541:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2446,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "22541:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22540:20:9"
            },
            "scope": 2700,
            "src": "22462:143:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2514,
              "nodeType": "Block",
              "src": "22962:276:9",
              "statements": [
                {
                  "assignments": [
                    2466
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2466,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2515,
                      "src": "22972:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2465,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "22972:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2480,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2468,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2458,
                            "src": "22991:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2469,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "22991:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2470,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2458,
                            "src": "23002:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2471,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1011,
                          "src": "23002:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2472,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2460,
                            "src": "23013:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2473,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "23013:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2474,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2460,
                            "src": "23026:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2475,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1011,
                          "src": "23026:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2467,
                        "name": "findPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2086,
                        "src": "22983:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 2476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22983:55:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2477,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2460,
                        "src": "23041:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2478,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "23041:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22983:69:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22972:80:9"
                },
                {
                  "body": {
                    "id": 2512,
                    "nodeType": "Block",
                    "src": "23099:133:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "23113:5:9",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 2488,
                            "name": "cnt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2463,
                            "src": "23113:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2490,
                        "nodeType": "ExpressionStatement",
                        "src": "23113:5:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2491,
                            "name": "ptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2466,
                            "src": "23132:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2509,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2500,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2493,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2458,
                                      "src": "23146:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 2494,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1009,
                                    "src": "23146:9:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2498,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 2495,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2466,
                                          "src": "23159:3:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 2496,
                                            "name": "self",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2458,
                                            "src": "23165:4:9",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                              "typeString": "struct strings.slice memory"
                                            }
                                          },
                                          "id": 2497,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "_ptr",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 1011,
                                          "src": "23165:9:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "23159:15:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 2499,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "23158:17:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "23146:29:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 2501,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2466,
                                  "src": "23177:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2502,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2460,
                                    "src": "23182:6:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                      "typeString": "struct strings.slice memory"
                                    }
                                  },
                                  "id": 2503,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1009,
                                  "src": "23182:11:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2504,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2460,
                                    "src": "23195:6:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                      "typeString": "struct strings.slice memory"
                                    }
                                  },
                                  "id": 2505,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_ptr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1011,
                                  "src": "23195:11:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2492,
                                "name": "findPtr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2086,
                                "src": "23138:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 2506,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23138:69:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2507,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2460,
                                "src": "23210:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2508,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "23210:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "23138:83:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23132:89:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2511,
                        "nodeType": "ExpressionStatement",
                        "src": "23132:89:9"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2481,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2466,
                      "src": "23069:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2482,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2458,
                          "src": "23076:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2483,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "23076:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2484,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2458,
                          "src": "23088:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2485,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "23088:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "23076:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23069:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2513,
                  "nodeType": "WhileStatement",
                  "src": "23062:170:9"
                }
              ]
            },
            "documentation": null,
            "id": 2515,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "count",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2458,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2515,
                  "src": "22889:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2457,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "22889:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2460,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2515,
                  "src": "22908:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2459,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "22908:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22888:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2463,
                  "name": "cnt",
                  "nodeType": "VariableDeclaration",
                  "scope": 2515,
                  "src": "22952:8:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2462,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "22952:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22951:10:9"
            },
            "scope": 2700,
            "src": "22874:364:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2538,
              "nodeType": "Block",
              "src": "23564:93:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2525,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2517,
                            "src": "23590:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2526,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "23590:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2527,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2517,
                            "src": "23601:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2528,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1011,
                          "src": "23601:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2529,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2519,
                            "src": "23612:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2530,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "23612:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2531,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2519,
                            "src": "23625:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2532,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1011,
                          "src": "23625:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2524,
                        "name": "rfindPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2203,
                        "src": "23581:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 2533,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23581:56:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2534,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2517,
                        "src": "23641:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2535,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "23641:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23581:69:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2523,
                  "id": 2537,
                  "nodeType": "Return",
                  "src": "23574:76:9"
                }
              ]
            },
            "documentation": null,
            "id": 2539,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "contains",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2517,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2539,
                  "src": "23495:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2516,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "23495:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2519,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2539,
                  "src": "23514:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2518,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "23514:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23494:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2522,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2539,
                  "src": "23558:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2521,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23558:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23557:6:9"
            },
            "scope": 2700,
            "src": "23477:180:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2584,
              "nodeType": "Block",
              "src": "24037:262:9",
              "statements": [
                {
                  "assignments": [
                    2549
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2549,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 2585,
                      "src": "24047:17:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2548,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "24047:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2558,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2556,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2552,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2541,
                            "src": "24078:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2553,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "24078:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2554,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "24090:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2555,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "24090:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "24078:22:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "24067:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 2550,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "24071:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 2557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24067:34:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24047:54:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2560,
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2585,
                      "src": "24111:11:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2559,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "24111:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2561,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24111:11:9"
                },
                {
                  "externalReferences": [
                    {
                      "retptr": {
                        "declaration": 2560,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "24143:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 2549,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "24157:3:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2562,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    retptr := add(ret, 32)\n}",
                  "src": "24132:50:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2564,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2560,
                        "src": "24183:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2565,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2541,
                          "src": "24191:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2566,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "24191:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2567,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2541,
                          "src": "24202:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2568,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "24202:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2563,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1052,
                      "src": "24176:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 2569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24176:36:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2570,
                  "nodeType": "ExpressionStatement",
                  "src": "24176:36:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2575,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2572,
                          "name": "retptr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2560,
                          "src": "24229:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2573,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2541,
                            "src": "24238:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2574,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "24238:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "24229:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2576,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "24249:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2577,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "24249:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2578,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "24261:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2579,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "24261:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2571,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1052,
                      "src": "24222:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 2580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24222:50:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2581,
                  "nodeType": "ExpressionStatement",
                  "src": "24222:50:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2582,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2549,
                    "src": "24289:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 2547,
                  "id": 2583,
                  "nodeType": "Return",
                  "src": "24282:10:9"
                }
              ]
            },
            "documentation": null,
            "id": 2585,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "concat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2541,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "23960:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2540,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "23960:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2543,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "23979:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2542,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "23979:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23959:39:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2547,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2546,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "24022:6:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2545,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "24022:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24021:15:9"
            },
            "scope": 2700,
            "src": "23944:355:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2698,
              "nodeType": "Block",
              "src": "24728:630:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2595,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2590,
                        "src": "24742:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 2596,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24742:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24758:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "24742:17:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2601,
                  "nodeType": "IfStatement",
                  "src": "24738:44:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "",
                      "id": 2599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24780:2:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                        "typeString": "literal_string \"\""
                      },
                      "value": ""
                    },
                    "functionReturnParameters": 2594,
                    "id": 2600,
                    "nodeType": "Return",
                    "src": "24773:9:9"
                  }
                },
                {
                  "assignments": [
                    2603
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2603,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2699,
                      "src": "24793:11:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2602,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "24793:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2612,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2604,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2587,
                        "src": "24807:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2605,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "24807:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2606,
                              "name": "parts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2590,
                              "src": "24820:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                                "typeString": "struct strings.slice memory[] memory"
                              }
                            },
                            "id": 2607,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "24820:12:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2608,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24835:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "24820:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2610,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "24819:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24807:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24793:44:9"
                },
                {
                  "body": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2629,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 2624,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2603,
                        "src": "24898:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2625,
                            "name": "parts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2590,
                            "src": "24908:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                              "typeString": "struct strings.slice memory[] memory"
                            }
                          },
                          "id": 2627,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2626,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2614,
                            "src": "24914:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "24908:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2628,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "24908:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "24898:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2630,
                    "nodeType": "ExpressionStatement",
                    "src": "24898:23:9"
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2617,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2614,
                      "src": "24863:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2618,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2590,
                        "src": "24867:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 2619,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24867:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24863:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2631,
                  "initializationExpression": {
                    "assignments": [
                      2614
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2614,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 2699,
                        "src": "24851:6:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2613,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "24851:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 2616,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2615,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24860:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "24851:10:9"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2622,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "24881:3:9",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2621,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2614,
                        "src": "24881:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2623,
                    "nodeType": "ExpressionStatement",
                    "src": "24881:3:9"
                  },
                  "nodeType": "ForStatement",
                  "src": "24847:74:9"
                },
                {
                  "assignments": [
                    2633
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2633,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 2699,
                      "src": "24932:17:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2632,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "24932:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2638,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2636,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2603,
                        "src": "24963:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "24952:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 2634,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "24956:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 2637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24952:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24932:38:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2640,
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2699,
                      "src": "24980:11:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2639,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "24980:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2641,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24980:11:9"
                },
                {
                  "externalReferences": [
                    {
                      "retptr": {
                        "declaration": 2640,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "25012:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 2633,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "25026:3:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2642,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    retptr := add(ret, 32)\n}",
                  "src": "25001:48:9"
                },
                {
                  "body": {
                    "id": 2694,
                    "nodeType": "Block",
                    "src": "25080:251:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2655,
                              "name": "retptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2640,
                              "src": "25101:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 2656,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2590,
                                  "src": "25109:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                                    "typeString": "struct strings.slice memory[] memory"
                                  }
                                },
                                "id": 2658,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 2657,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2614,
                                  "src": "25115:1:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "25109:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2659,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1011,
                              "src": "25109:13:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 2660,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2590,
                                  "src": "25124:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                                    "typeString": "struct strings.slice memory[] memory"
                                  }
                                },
                                "id": 2662,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 2661,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2614,
                                  "src": "25130:1:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "25124:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2663,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "25124:13:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2654,
                            "name": "memcpy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1052,
                            "src": "25094:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256,uint256) pure"
                            }
                          },
                          "id": 2664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25094:44:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2665,
                        "nodeType": "ExpressionStatement",
                        "src": "25094:44:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2666,
                            "name": "retptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2640,
                            "src": "25152:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2667,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2590,
                                "src": "25162:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                                  "typeString": "struct strings.slice memory[] memory"
                                }
                              },
                              "id": 2669,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2668,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2614,
                                "src": "25168:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "25162:8:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2670,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "25162:13:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25152:23:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2672,
                        "nodeType": "ExpressionStatement",
                        "src": "25152:23:9"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2678,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2673,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2614,
                            "src": "25193:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2677,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2674,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2590,
                                "src": "25197:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                                  "typeString": "struct strings.slice memory[] memory"
                                }
                              },
                              "id": 2675,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "25197:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 2676,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25212:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "25197:16:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25193:20:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2693,
                        "nodeType": "IfStatement",
                        "src": "25189:132:9",
                        "trueBody": {
                          "id": 2692,
                          "nodeType": "Block",
                          "src": "25215:106:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2680,
                                    "name": "retptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2640,
                                    "src": "25240:6:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2681,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2587,
                                      "src": "25248:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 2682,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_ptr",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1011,
                                    "src": "25248:9:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2683,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2587,
                                      "src": "25259:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 2684,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1009,
                                    "src": "25259:9:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2679,
                                  "name": "memcpy",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1052,
                                  "src": "25233:6:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256,uint256,uint256) pure"
                                  }
                                },
                                "id": 2685,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25233:36:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2686,
                              "nodeType": "ExpressionStatement",
                              "src": "25233:36:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2690,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2687,
                                  "name": "retptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2640,
                                  "src": "25287:6:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2688,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2587,
                                    "src": "25297:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                      "typeString": "struct strings.slice memory"
                                    }
                                  },
                                  "id": 2689,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1009,
                                  "src": "25297:9:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25287:19:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2691,
                              "nodeType": "ExpressionStatement",
                              "src": "25287:19:9"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2647,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2614,
                      "src": "25057:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2648,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2590,
                        "src": "25061:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 2649,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "25061:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25057:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2695,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 2643,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2614,
                        "src": "25050:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25054:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "25050:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2646,
                    "nodeType": "ExpressionStatement",
                    "src": "25050:5:9"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "25075:3:9",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2651,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2614,
                        "src": "25075:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2653,
                    "nodeType": "ExpressionStatement",
                    "src": "25075:3:9"
                  },
                  "nodeType": "ForStatement",
                  "src": "25046:285:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2696,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2633,
                    "src": "25348:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 2594,
                  "id": 2697,
                  "nodeType": "Return",
                  "src": "25341:10:9"
                }
              ]
            },
            "documentation": null,
            "id": 2699,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "join",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2591,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2587,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2699,
                  "src": "24649:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2586,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "24649:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2590,
                  "name": "parts",
                  "nodeType": "VariableDeclaration",
                  "scope": 2699,
                  "src": "24668:20:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                    "typeString": "struct strings.slice[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 2588,
                      "name": "slice",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1012,
                      "src": "24668:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                        "typeString": "struct strings.slice"
                      }
                    },
                    "id": 2589,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "24668:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_slice_$1012_storage_$dyn_storage_ptr",
                      "typeString": "struct strings.slice[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24648:41:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2594,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2593,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2699,
                  "src": "24713:6:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2592,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "24713:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24712:15:9"
            },
            "scope": 2700,
            "src": "24635:723:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 2701,
        "src": "2003:23357:9"
      }
    ],
    "src": "1977:23383:9"
  },
  "legacyAST": {
    "absolutePath": "tokenboost-solidity/contracts/utils/strings.sol",
    "exportedSymbols": {
      "strings": [
        2700
      ]
    },
    "id": 2701,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1007,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".14"
        ],
        "nodeType": "PragmaDirective",
        "src": "1977:24:9"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2700,
        "linearizedBaseContracts": [
          2700
        ],
        "name": "strings",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "strings.slice",
            "id": 1012,
            "members": [
              {
                "constant": false,
                "id": 1009,
                "name": "_len",
                "nodeType": "VariableDeclaration",
                "scope": 1012,
                "src": "2048:9:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1008,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2048:4:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1011,
                "name": "_ptr",
                "nodeType": "VariableDeclaration",
                "scope": 1012,
                "src": "2067:9:9",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1010,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2067:4:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "slice",
            "nodeType": "StructDefinition",
            "scope": 2700,
            "src": "2025:58:9",
            "visibility": "public"
          },
          {
            "body": {
              "id": 1051,
              "nodeType": "Block",
              "src": "2149:488:9",
              "statements": [
                {
                  "body": {
                    "id": 1037,
                    "nodeType": "Block",
                    "src": "2237:136:9",
                    "statements": [
                      {
                        "externalReferences": [
                          {
                            "dest": {
                              "declaration": 1014,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "2285:4:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "src": {
                              "declaration": 1016,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "2297:3:9",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 1028,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    mstore(dest, mload(src))\n}",
                        "src": "2251:82:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1029,
                            "name": "dest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1014,
                            "src": "2329:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 1030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2337:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2329:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1032,
                        "nodeType": "ExpressionStatement",
                        "src": "2329:10:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1035,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1033,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1016,
                            "src": "2353:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 1034,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2360:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2353:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1036,
                        "nodeType": "ExpressionStatement",
                        "src": "2353:9:9"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1021,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1018,
                      "src": "2215:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 1022,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2222:2:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "2215:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1038,
                  "initializationExpression": null,
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1026,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 1024,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1018,
                        "src": "2226:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "3332",
                        "id": 1025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2233:2:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "2226:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1027,
                    "nodeType": "ExpressionStatement",
                    "src": "2226:9:9"
                  },
                  "nodeType": "ForStatement",
                  "src": "2209:164:9"
                },
                {
                  "assignments": [
                    1040
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1040,
                      "name": "mask",
                      "nodeType": "VariableDeclaration",
                      "scope": 1052,
                      "src": "2415:9:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1039,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2415:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1049,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1048,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1046,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "hexValue": "323536",
                        "id": 1041,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2427:3:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_256_by_1",
                          "typeString": "int_const 256"
                        },
                        "value": "256"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "**",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1044,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "3332",
                              "id": 1042,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2435:2:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 1043,
                              "name": "len",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1018,
                              "src": "2440:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2435:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 1045,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2434:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2427:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 1047,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2447:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "2427:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2415:33:9"
                },
                {
                  "externalReferences": [
                    {
                      "src": {
                        "declaration": 1016,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2506:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "mask": {
                        "declaration": 1040,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2516:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "dest": {
                        "declaration": 1014,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2561:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "mask": {
                        "declaration": 1040,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2568:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "dest": {
                        "declaration": 1014,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2593:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1050,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let srcpart := and(mload(src), not(mask))\n    let destpart := and(mload(dest), mask)\n    mstore(dest, or(destpart, srcpart))\n}",
                  "src": "2458:179:9"
                }
              ]
            },
            "documentation": null,
            "id": 1052,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "memcpy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1019,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1014,
                  "name": "dest",
                  "nodeType": "VariableDeclaration",
                  "scope": 1052,
                  "src": "2105:9:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1013,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2105:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1016,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 1052,
                  "src": "2116:8:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1015,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2116:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1018,
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 1052,
                  "src": "2126:8:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1017,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2126:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2104:31:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1020,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2149:0:9"
            },
            "scope": 2700,
            "src": "2089:548:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1071,
              "nodeType": "Block",
              "src": "2911:136:9",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1060,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1072,
                      "src": "2921:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1059,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2921:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1061,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2921:8:9"
                },
                {
                  "externalReferences": [
                    {
                      "ptr": {
                        "declaration": 1060,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2962:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 1054,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2973:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1062,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ptr := add(self, 0x20)\n}",
                  "src": "2939:70:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1065,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1054,
                              "src": "3022:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1064,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3016:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": "bytes"
                          },
                          "id": 1066,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3016:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1067,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3016:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1068,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1060,
                        "src": "3036:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1063,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1012,
                      "src": "3010:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_slice_$1012_storage_ptr_$",
                        "typeString": "type(struct strings.slice storage pointer)"
                      }
                    },
                    "id": 1069,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3010:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1058,
                  "id": 1070,
                  "nodeType": "Return",
                  "src": "3003:37:9"
                }
              ]
            },
            "documentation": null,
            "id": 1072,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "toSlice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1055,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1054,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1072,
                  "src": "2854:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1053,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2854:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2853:20:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1058,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1057,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1072,
                  "src": "2897:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1056,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "2897:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2896:14:9"
            },
            "scope": 2700,
            "src": "2837:210:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1187,
              "nodeType": "Block",
              "src": "3299:712:9",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1080,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 1188,
                      "src": "3309:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1079,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3309:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1081,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3309:8:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1084,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1082,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1074,
                      "src": "3331:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1083,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3339:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3331:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1087,
                  "nodeType": "IfStatement",
                  "src": "3327:35:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1085,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3361:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 1078,
                    "id": 1086,
                    "nodeType": "Return",
                    "src": "3354:8:9"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 1090,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1088,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1074,
                        "src": "3376:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30786666666666666666666666666666666666666666666666666666666666666666",
                        "id": 1089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3383:34:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_340282366920938463463374607431768211455_by_1",
                          "typeString": "int_const 3402...(31 digits omitted)...1455"
                        },
                        "value": "0xffffffffffffffffffffffffffffffff"
                      },
                      "src": "3376:41:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1091,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3421:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3376:46:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1108,
                  "nodeType": "IfStatement",
                  "src": "3372:164:9",
                  "trueBody": {
                    "id": 1107,
                    "nodeType": "Block",
                    "src": "3424:112:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1095,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1093,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1080,
                            "src": "3438:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3136",
                            "id": 1094,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3445:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_16_by_1",
                              "typeString": "int_const 16"
                            },
                            "value": "16"
                          },
                          "src": "3438:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1096,
                        "nodeType": "ExpressionStatement",
                        "src": "3438:9:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1105,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1097,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1074,
                            "src": "3461:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1103,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1100,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1074,
                                      "src": "3481:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1099,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3476:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint"
                                  },
                                  "id": 1101,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3476:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3078313030303030303030303030303030303030303030303030303030303030303030",
                                  "id": 1102,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3489:35:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  },
                                  "value": "0x100000000000000000000000000000000"
                                },
                                "src": "3476:48:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1098,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3468:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 1104,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3468:57:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3461:64:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1106,
                        "nodeType": "ExpressionStatement",
                        "src": "3461:64:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 1111,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1109,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1074,
                        "src": "3549:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "307866666666666666666666666666666666",
                        "id": 1110,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3556:18:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_18446744073709551615_by_1",
                          "typeString": "int_const 18446744073709551615"
                        },
                        "value": "0xffffffffffffffff"
                      },
                      "src": "3549:25:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1112,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3578:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3549:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1129,
                  "nodeType": "IfStatement",
                  "src": "3545:131:9",
                  "trueBody": {
                    "id": 1128,
                    "nodeType": "Block",
                    "src": "3581:95:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1114,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1080,
                            "src": "3595:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "38",
                            "id": 1115,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3602:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_8_by_1",
                              "typeString": "int_const 8"
                            },
                            "value": "8"
                          },
                          "src": "3595:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1117,
                        "nodeType": "ExpressionStatement",
                        "src": "3595:8:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1118,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1074,
                            "src": "3617:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1124,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1121,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1074,
                                      "src": "3637:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1120,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3632:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint"
                                  },
                                  "id": 1122,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3632:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783130303030303030303030303030303030",
                                  "id": 1123,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3645:19:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                    "typeString": "int_const 18446744073709551616"
                                  },
                                  "value": "0x10000000000000000"
                                },
                                "src": "3632:32:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1119,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3624:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 1125,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3624:41:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3617:48:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1127,
                        "nodeType": "ExpressionStatement",
                        "src": "3617:48:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1134,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 1132,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1130,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1074,
                        "src": "3689:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30786666666666666666",
                        "id": 1131,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3696:10:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4294967295_by_1",
                          "typeString": "int_const 4294967295"
                        },
                        "value": "0xffffffff"
                      },
                      "src": "3689:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1133,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3710:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3689:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1150,
                  "nodeType": "IfStatement",
                  "src": "3685:115:9",
                  "trueBody": {
                    "id": 1149,
                    "nodeType": "Block",
                    "src": "3713:87:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1135,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1080,
                            "src": "3727:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "34",
                            "id": 1136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3734:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "src": "3727:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1138,
                        "nodeType": "ExpressionStatement",
                        "src": "3727:8:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1139,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1074,
                            "src": "3749:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1145,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1142,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1074,
                                      "src": "3769:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1141,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3764:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint"
                                  },
                                  "id": 1143,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3764:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3078313030303030303030",
                                  "id": 1144,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3777:11:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4294967296_by_1",
                                    "typeString": "int_const 4294967296"
                                  },
                                  "value": "0x100000000"
                                },
                                "src": "3764:24:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1140,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3756:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 1146,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3756:33:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3749:40:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1148,
                        "nodeType": "ExpressionStatement",
                        "src": "3749:40:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1155,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 1153,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1151,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1074,
                        "src": "3813:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "307866666666",
                        "id": 1152,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3820:6:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_65535_by_1",
                          "typeString": "int_const 65535"
                        },
                        "value": "0xffff"
                      },
                      "src": "3813:13:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1154,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3830:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3813:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1171,
                  "nodeType": "IfStatement",
                  "src": "3809:107:9",
                  "trueBody": {
                    "id": 1170,
                    "nodeType": "Block",
                    "src": "3833:83:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1156,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1080,
                            "src": "3847:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 1157,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3854:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "3847:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1159,
                        "nodeType": "ExpressionStatement",
                        "src": "3847:8:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1160,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1074,
                            "src": "3869:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1166,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1163,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1074,
                                      "src": "3889:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1162,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3884:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint"
                                  },
                                  "id": 1164,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3884:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783130303030",
                                  "id": 1165,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3897:7:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_65536_by_1",
                                    "typeString": "int_const 65536"
                                  },
                                  "value": "0x10000"
                                },
                                "src": "3884:20:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1161,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3876:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 1167,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3876:29:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3869:36:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1169,
                        "nodeType": "ExpressionStatement",
                        "src": "3869:36:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 1174,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1172,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1074,
                        "src": "3929:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30786666",
                        "id": 1173,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3936:4:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_255_by_1",
                          "typeString": "int_const 255"
                        },
                        "value": "0xff"
                      },
                      "src": "3929:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3944:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3929:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1182,
                  "nodeType": "IfStatement",
                  "src": "3925:55:9",
                  "trueBody": {
                    "id": 1181,
                    "nodeType": "Block",
                    "src": "3947:33:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1179,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1177,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1080,
                            "src": "3961:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 1178,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3968:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "3961:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1180,
                        "nodeType": "ExpressionStatement",
                        "src": "3961:8:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 1183,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3996:2:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1184,
                      "name": "ret",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1080,
                      "src": "4001:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3996:8:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1078,
                  "id": 1186,
                  "nodeType": "Return",
                  "src": "3989:15:9"
                }
              ]
            },
            "documentation": null,
            "id": 1188,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "len",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1074,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1188,
                  "src": "3256:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1073,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3256:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3255:14:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1078,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1077,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1188,
                  "src": "3293:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1076,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3293:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3292:6:9"
            },
            "scope": 2700,
            "src": "3243:768:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1204,
              "nodeType": "Block",
              "src": "4392:295:9",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "ret": {
                        "declaration": 1193,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4625:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 1190,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4596:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1195,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let ptr := mload(0x40)\n    mstore(0x40, add(ptr, 0x20))\n    mstore(ptr, self)\n    mstore(add(ret, 0x20), ptr)\n}",
                  "src": "4485:178:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1196,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1193,
                        "src": "4660:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1198,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "4660:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1200,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1190,
                          "src": "4675:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 1199,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          1188,
                          1338
                        ],
                        "referencedDeclaration": 1188,
                        "src": "4671:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$",
                          "typeString": "function (bytes32) pure returns (uint256)"
                        }
                      },
                      "id": 1201,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4671:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4660:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1203,
                  "nodeType": "ExpressionStatement",
                  "src": "4660:20:9"
                }
              ]
            },
            "documentation": null,
            "id": 1205,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "toSliceB32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1191,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1190,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1205,
                  "src": "4337:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1189,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4337:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4336:14:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1193,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1205,
                  "src": "4374:16:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1192,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "4374:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4373:18:9"
            },
            "scope": 2700,
            "src": "4317:370:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1219,
              "nodeType": "Block",
              "src": "4958:51:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1213,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1207,
                          "src": "4981:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1214,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "4981:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1215,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1207,
                          "src": "4992:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1216,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "4992:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1212,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1012,
                      "src": "4975:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_slice_$1012_storage_ptr_$",
                        "typeString": "type(struct strings.slice storage pointer)"
                      }
                    },
                    "id": 1217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4975:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1211,
                  "id": 1218,
                  "nodeType": "Return",
                  "src": "4968:34:9"
                }
              ]
            },
            "documentation": null,
            "id": 1220,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "copy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1207,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1220,
                  "src": "4902:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1206,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "4902:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4901:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1211,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1210,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1220,
                  "src": "4944:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1209,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "4944:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4943:14:9"
            },
            "scope": 2700,
            "src": "4888:121:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1249,
              "nodeType": "Block",
              "src": "5256:190:9",
              "statements": [
                {
                  "assignments": [
                    1228
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1228,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 1250,
                      "src": "5266:17:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 1227,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5266:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1234,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1231,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1222,
                          "src": "5297:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1232,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "5297:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1230,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5286:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 1229,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5290:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 1233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5286:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5266:41:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1236,
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1250,
                      "src": "5317:11:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1235,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5317:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1237,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5317:11:9"
                },
                {
                  "externalReferences": [
                    {
                      "retptr": {
                        "declaration": 1236,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5349:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 1228,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5363:3:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1238,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    retptr := add(ret, 32)\n}",
                  "src": "5338:51:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1240,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1236,
                        "src": "5390:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1241,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1222,
                          "src": "5398:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1242,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "5398:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1243,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1222,
                          "src": "5409:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1244,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "5409:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1239,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1052,
                      "src": "5383:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 1245,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5383:36:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1246,
                  "nodeType": "ExpressionStatement",
                  "src": "5383:36:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1247,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1228,
                    "src": "5436:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1226,
                  "id": 1248,
                  "nodeType": "Return",
                  "src": "5429:10:9"
                }
              ]
            },
            "documentation": null,
            "id": 1250,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "toString",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1223,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1222,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1250,
                  "src": "5199:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1221,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "5199:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5198:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1225,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1250,
                  "src": "5241:6:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1224,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5241:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5240:15:9"
            },
            "scope": 2700,
            "src": "5181:265:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1337,
              "nodeType": "Block",
              "src": "5900:629:9",
              "statements": [
                {
                  "assignments": [
                    1258
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1258,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1338,
                      "src": "5985:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1257,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5985:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1263,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1259,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1252,
                        "src": "5996:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1260,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "5996:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3331",
                      "id": 1261,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6008:2:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_31_by_1",
                        "typeString": "int_const 31"
                      },
                      "value": "31"
                    },
                    "src": "5996:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5985:25:9"
                },
                {
                  "assignments": [
                    1265
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1265,
                      "name": "end",
                      "nodeType": "VariableDeclaration",
                      "scope": 1338,
                      "src": "6020:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1264,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6020:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1270,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1266,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1258,
                      "src": "6031:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1267,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1252,
                        "src": "6037:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1268,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "6037:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6031:15:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6020:26:9"
                },
                {
                  "body": {
                    "id": 1335,
                    "nodeType": "Block",
                    "src": "6084:439:9",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1282,
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 1338,
                            "src": "6098:7:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 1281,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "6098:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1283,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6098:7:9"
                      },
                      {
                        "externalReferences": [
                          {
                            "ptr": {
                              "declaration": 1258,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "6145:3:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "b": {
                              "declaration": 1282,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "6130:1:9",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 1284,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    b := and(mload(ptr), 0xFF)\n}",
                        "src": "6119:54:9"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 1287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1285,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1282,
                            "src": "6175:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30783830",
                            "id": 1286,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6179:4:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "6175:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 1295,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1293,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1282,
                              "src": "6235:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30784530",
                              "id": 1294,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6239:4:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_224_by_1",
                                "typeString": "int_const 224"
                              },
                              "value": "0xE0"
                            },
                            "src": "6235:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "id": 1303,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1301,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1282,
                                "src": "6295:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30784630",
                                "id": 1302,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6299:4:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_240_by_1",
                                  "typeString": "int_const 240"
                                },
                                "value": "0xF0"
                              },
                              "src": "6295:8:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 1311,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1309,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1282,
                                  "src": "6355:1:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30784638",
                                  "id": 1310,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6359:4:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_248_by_1",
                                    "typeString": "int_const 248"
                                  },
                                  "value": "0xF8"
                                },
                                "src": "6355:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 1319,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1317,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1282,
                                    "src": "6415:1:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30784643",
                                    "id": 1318,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6419:4:9",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_252_by_1",
                                      "typeString": "int_const 252"
                                    },
                                    "value": "0xFC"
                                  },
                                  "src": "6415:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseBody": {
                                  "id": 1329,
                                  "nodeType": "Block",
                                  "src": "6472:41:9",
                                  "statements": [
                                    {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1327,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "id": 1325,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1258,
                                          "src": "6490:3:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "hexValue": "36",
                                          "id": 1326,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6497:1:9",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_6_by_1",
                                            "typeString": "int_const 6"
                                          },
                                          "value": "6"
                                        },
                                        "src": "6490:8:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1328,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6490:8:9"
                                    }
                                  ]
                                },
                                "id": 1330,
                                "nodeType": "IfStatement",
                                "src": "6412:101:9",
                                "trueBody": {
                                  "id": 1324,
                                  "nodeType": "Block",
                                  "src": "6425:41:9",
                                  "statements": [
                                    {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1322,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "argumentTypes": null,
                                          "id": 1320,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1258,
                                          "src": "6443:3:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "argumentTypes": null,
                                          "hexValue": "35",
                                          "id": 1321,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6450:1:9",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_5_by_1",
                                            "typeString": "int_const 5"
                                          },
                                          "value": "5"
                                        },
                                        "src": "6443:8:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1323,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6443:8:9"
                                    }
                                  ]
                                }
                              },
                              "id": 1331,
                              "nodeType": "IfStatement",
                              "src": "6352:161:9",
                              "trueBody": {
                                "id": 1316,
                                "nodeType": "Block",
                                "src": "6365:41:9",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1314,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 1312,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1258,
                                        "src": "6383:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "34",
                                        "id": 1313,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6390:1:9",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_4_by_1",
                                          "typeString": "int_const 4"
                                        },
                                        "value": "4"
                                      },
                                      "src": "6383:8:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1315,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6383:8:9"
                                  }
                                ]
                              }
                            },
                            "id": 1332,
                            "nodeType": "IfStatement",
                            "src": "6292:221:9",
                            "trueBody": {
                              "id": 1308,
                              "nodeType": "Block",
                              "src": "6305:41:9",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1306,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 1304,
                                      "name": "ptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1258,
                                      "src": "6323:3:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "hexValue": "33",
                                      "id": 1305,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6330:1:9",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "src": "6323:8:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1307,
                                  "nodeType": "ExpressionStatement",
                                  "src": "6323:8:9"
                                }
                              ]
                            }
                          },
                          "id": 1333,
                          "nodeType": "IfStatement",
                          "src": "6232:281:9",
                          "trueBody": {
                            "id": 1300,
                            "nodeType": "Block",
                            "src": "6245:41:9",
                            "statements": [
                              {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1298,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 1296,
                                    "name": "ptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1258,
                                    "src": "6263:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "+=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "hexValue": "32",
                                    "id": 1297,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6270:1:9",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "6263:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1299,
                                "nodeType": "ExpressionStatement",
                                "src": "6263:8:9"
                              }
                            ]
                          }
                        },
                        "id": 1334,
                        "nodeType": "IfStatement",
                        "src": "6171:342:9",
                        "trueBody": {
                          "id": 1292,
                          "nodeType": "Block",
                          "src": "6185:41:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1290,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1288,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1258,
                                  "src": "6203:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 1289,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6210:1:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "6203:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1291,
                              "nodeType": "ExpressionStatement",
                              "src": "6203:8:9"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1275,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1258,
                      "src": "6068:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1276,
                      "name": "end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1265,
                      "src": "6074:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6068:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1336,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1273,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 1271,
                        "name": "l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1255,
                        "src": "6061:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1272,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6065:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6061:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1274,
                    "nodeType": "ExpressionStatement",
                    "src": "6061:5:9"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6079:3:9",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1278,
                        "name": "l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1255,
                        "src": "6079:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1280,
                    "nodeType": "ExpressionStatement",
                    "src": "6079:3:9"
                  },
                  "nodeType": "ForStatement",
                  "src": "6056:467:9"
                }
              ]
            },
            "documentation": null,
            "id": 1338,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "len",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1252,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1338,
                  "src": "5850:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1251,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "5850:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5849:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1256,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1255,
                  "name": "l",
                  "nodeType": "VariableDeclaration",
                  "scope": 1338,
                  "src": "5892:6:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1254,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5892:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5891:8:9"
            },
            "scope": 2700,
            "src": "5837:692:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1350,
              "nodeType": "Block",
              "src": "6785:38:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1345,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1340,
                        "src": "6802:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1346,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "6802:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1347,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6815:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6802:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1344,
                  "id": 1349,
                  "nodeType": "Return",
                  "src": "6795:21:9"
                }
              ]
            },
            "documentation": null,
            "id": 1351,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "empty",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1341,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1340,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1351,
                  "src": "6737:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1339,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "6737:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6736:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1343,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1351,
                  "src": "6779:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1342,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6779:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6778:6:9"
            },
            "scope": 2700,
            "src": "6722:101:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1479,
              "nodeType": "Block",
              "src": "7335:909:9",
              "statements": [
                {
                  "assignments": [
                    1361
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1361,
                      "name": "shortest",
                      "nodeType": "VariableDeclaration",
                      "scope": 1480,
                      "src": "7345:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1360,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7345:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1364,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1362,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1353,
                      "src": "7361:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "id": 1363,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_len",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1009,
                    "src": "7361:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7345:25:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1365,
                        "name": "other",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1355,
                        "src": "7384:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1366,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "7384:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1367,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1353,
                        "src": "7397:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1368,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "7397:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7384:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1375,
                  "nodeType": "IfStatement",
                  "src": "7380:61:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1373,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 1370,
                        "name": "shortest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1361,
                        "src": "7420:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1371,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1355,
                          "src": "7431:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1372,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "7431:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7420:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1374,
                    "nodeType": "ExpressionStatement",
                    "src": "7420:21:9"
                  }
                },
                {
                  "assignments": [
                    1377
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1377,
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1480,
                      "src": "7452:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1376,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7452:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1380,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1378,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1353,
                      "src": "7467:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "id": 1379,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1011,
                    "src": "7467:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7452:24:9"
                },
                {
                  "assignments": [
                    1382
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1382,
                      "name": "otherptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1480,
                      "src": "7486:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1381,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7486:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1385,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1383,
                      "name": "other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1355,
                      "src": "7502:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "id": 1384,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1011,
                    "src": "7502:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7486:26:9"
                },
                {
                  "body": {
                    "id": 1467,
                    "nodeType": "Block",
                    "src": "7568:621:9",
                    "statements": [
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1398,
                            "name": "a",
                            "nodeType": "VariableDeclaration",
                            "scope": 1480,
                            "src": "7582:6:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1397,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "7582:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1399,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7582:6:9"
                      },
                      {
                        "assignments": [],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1401,
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 1480,
                            "src": "7602:6:9",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1400,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "7602:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1402,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7602:6:9"
                      },
                      {
                        "externalReferences": [
                          {
                            "a": {
                              "declaration": 1398,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7649:1:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "selfptr": {
                              "declaration": 1377,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7660:7:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "b": {
                              "declaration": 1401,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7685:1:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "otherptr": {
                              "declaration": 1382,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "7696:8:9",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 1403,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    a := mload(selfptr)\n    b := mload(otherptr)\n}",
                        "src": "7622:112:9"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1404,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1398,
                            "src": "7736:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1405,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1401,
                            "src": "7741:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7736:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1458,
                        "nodeType": "IfStatement",
                        "src": "7732:392:9",
                        "trueBody": {
                          "id": 1457,
                          "nodeType": "Block",
                          "src": "7744:380:9",
                          "statements": [
                            {
                              "assignments": [
                                1408
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1408,
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1480,
                                  "src": "7823:12:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1407,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7823:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1413,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1411,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "7846:2:9",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 1410,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7847:1:9",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_-1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_-1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  ],
                                  "id": 1409,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7838:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 1412,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7838:11:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7823:26:9"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1416,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1414,
                                  "name": "shortest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1361,
                                  "src": "7883:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "3332",
                                  "id": 1415,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7894:2:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "7883:13:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 1436,
                              "nodeType": "IfStatement",
                              "src": "7880:105:9",
                              "trueBody": {
                                "id": 1435,
                                "nodeType": "Block",
                                "src": "7898:87:9",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1433,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 1417,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1408,
                                        "src": "7920:4:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 1432,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "~",
                                        "prefix": true,
                                        "src": "7927:39:9",
                                        "subExpression": {
                                          "argumentTypes": null,
                                          "components": [
                                            {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 1430,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "argumentTypes": null,
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 1428,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "argumentTypes": null,
                                                  "hexValue": "32",
                                                  "id": 1418,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "7929:1:9",
                                                  "subdenomination": null,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_2_by_1",
                                                    "typeString": "int_const 2"
                                                  },
                                                  "value": "2"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "**",
                                                "rightExpression": {
                                                  "argumentTypes": null,
                                                  "components": [
                                                    {
                                                      "argumentTypes": null,
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "id": 1426,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "leftExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "38",
                                                        "id": 1419,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "7935:1:9",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_8_by_1",
                                                          "typeString": "int_const 8"
                                                        },
                                                        "value": "8"
                                                      },
                                                      "nodeType": "BinaryOperation",
                                                      "operator": "*",
                                                      "rightExpression": {
                                                        "argumentTypes": null,
                                                        "components": [
                                                          {
                                                            "argumentTypes": null,
                                                            "commonType": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            },
                                                            "id": 1424,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                              "argumentTypes": null,
                                                              "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              },
                                                              "id": 1422,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "leftExpression": {
                                                                "argumentTypes": null,
                                                                "hexValue": "3332",
                                                                "id": 1420,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "7940:2:9",
                                                                "subdenomination": null,
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_rational_32_by_1",
                                                                  "typeString": "int_const 32"
                                                                },
                                                                "value": "32"
                                                              },
                                                              "nodeType": "BinaryOperation",
                                                              "operator": "-",
                                                              "rightExpression": {
                                                                "argumentTypes": null,
                                                                "id": 1421,
                                                                "name": "shortest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1361,
                                                                "src": "7945:8:9",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_uint256",
                                                                  "typeString": "uint256"
                                                                }
                                                              },
                                                              "src": "7940:13:9",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "+",
                                                            "rightExpression": {
                                                              "argumentTypes": null,
                                                              "id": 1423,
                                                              "name": "idx",
                                                              "nodeType": "Identifier",
                                                              "overloadedDeclarations": [],
                                                              "referencedDeclaration": 1387,
                                                              "src": "7956:3:9",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "src": "7940:19:9",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          }
                                                        ],
                                                        "id": 1425,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "7939:21:9",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "src": "7935:25:9",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "id": 1427,
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "TupleExpression",
                                                  "src": "7934:27:9",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "src": "7929:32:9",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "-",
                                              "rightExpression": {
                                                "argumentTypes": null,
                                                "hexValue": "31",
                                                "id": 1429,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7964:1:9",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_1_by_1",
                                                  "typeString": "int_const 1"
                                                },
                                                "value": "1"
                                              },
                                              "src": "7929:36:9",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 1431,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "7928:38:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7920:46:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1434,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7920:46:9"
                                  }
                                ]
                              }
                            },
                            {
                              "assignments": [
                                1438
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1438,
                                  "name": "diff",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1480,
                                  "src": "8002:12:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1437,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8002:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1448,
                              "initialValue": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1447,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1441,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1439,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1398,
                                        "src": "8018:1:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 1440,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1408,
                                        "src": "8022:4:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8018:8:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1442,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8017:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1445,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1443,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1401,
                                        "src": "8031:1:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 1444,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1408,
                                        "src": "8035:4:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8031:8:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1446,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8030:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "8017:23:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "8002:38:9"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1451,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1449,
                                  "name": "diff",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1438,
                                  "src": "8062:4:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1450,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8070:1:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "8062:9:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 1456,
                              "nodeType": "IfStatement",
                              "src": "8058:51:9",
                              "trueBody": {
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1453,
                                      "name": "diff",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1438,
                                      "src": "8104:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1452,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "8100:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": "int"
                                  },
                                  "id": 1454,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8100:9:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "functionReturnParameters": 1359,
                                "id": 1455,
                                "nodeType": "Return",
                                "src": "8093:16:9"
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1461,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1459,
                            "name": "selfptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1377,
                            "src": "8137:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 1460,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8148:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "8137:13:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1462,
                        "nodeType": "ExpressionStatement",
                        "src": "8137:13:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1465,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1463,
                            "name": "otherptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1382,
                            "src": "8164:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 1464,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8176:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "8164:14:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1466,
                        "nodeType": "ExpressionStatement",
                        "src": "8164:14:9"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1390,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1387,
                      "src": "7541:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1391,
                      "name": "shortest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1361,
                      "src": "7547:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7541:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1468,
                  "initializationExpression": {
                    "assignments": [
                      1387
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1387,
                        "name": "idx",
                        "nodeType": "VariableDeclaration",
                        "scope": 1480,
                        "src": "7527:8:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1386,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "7527:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1389,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1388,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7538:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "7527:12:9"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 1393,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1387,
                        "src": "7557:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "3332",
                        "id": 1394,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7564:2:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "7557:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1396,
                    "nodeType": "ExpressionStatement",
                    "src": "7557:9:9"
                  },
                  "nodeType": "ForStatement",
                  "src": "7522:667:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 1477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1470,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1353,
                            "src": "8209:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 1471,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "8209:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1469,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8205:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": "int"
                      },
                      "id": 1472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8205:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1474,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1355,
                            "src": "8226:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 1475,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "8226:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8222:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": "int"
                      },
                      "id": 1476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8222:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "8205:32:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 1359,
                  "id": 1478,
                  "nodeType": "Return",
                  "src": "8198:39:9"
                }
              ]
            },
            "documentation": null,
            "id": 1480,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1356,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1353,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1480,
                  "src": "7268:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1352,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "7268:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1355,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1480,
                  "src": "7287:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1354,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "7287:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7267:39:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1359,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1358,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1480,
                  "src": "7330:3:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 1357,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "7330:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7329:5:9"
            },
            "scope": 2700,
            "src": "7251:993:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1496,
              "nodeType": "Block",
              "src": "8572:49:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 1494,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1490,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1482,
                          "src": "8597:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1491,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1484,
                          "src": "8603:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        ],
                        "id": 1489,
                        "name": "compare",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1480,
                        "src": "8589:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1012_memory_ptr_$_t_struct$_slice_$1012_memory_ptr_$returns$_t_int256_$",
                          "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (int256)"
                        }
                      },
                      "id": 1492,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8589:20:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1493,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8613:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8589:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1488,
                  "id": 1495,
                  "nodeType": "Return",
                  "src": "8582:32:9"
                }
              ]
            },
            "documentation": null,
            "id": 1497,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "equals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1482,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1497,
                  "src": "8504:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1481,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "8504:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1484,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1497,
                  "src": "8523:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1483,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "8523:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8503:39:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1488,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1487,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1497,
                  "src": "8566:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1486,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8566:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8565:6:9"
            },
            "scope": 2700,
            "src": "8488:133:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1614,
              "nodeType": "Block",
              "src": "9007:785:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1506,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1501,
                        "src": "9017:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1508,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "9017:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1509,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "9029:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1510,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "9029:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9017:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1512,
                  "nodeType": "ExpressionStatement",
                  "src": "9017:21:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1513,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "9053:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1514,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "9053:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1515,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9066:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9053:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1526,
                  "nodeType": "IfStatement",
                  "src": "9049:83:9",
                  "trueBody": {
                    "id": 1525,
                    "nodeType": "Block",
                    "src": "9069:63:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1517,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1501,
                              "src": "9083:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1519,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "9083:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1520,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9095:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9083:13:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1522,
                        "nodeType": "ExpressionStatement",
                        "src": "9083:13:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1523,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1501,
                          "src": "9117:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1505,
                        "id": 1524,
                        "nodeType": "Return",
                        "src": "9110:11:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1528,
                      "name": "l",
                      "nodeType": "VariableDeclaration",
                      "scope": 1615,
                      "src": "9142:6:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1527,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9142:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1529,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9142:6:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1531,
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 1615,
                      "src": "9158:6:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1530,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9158:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1532,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9158:6:9"
                },
                {
                  "externalReferences": [
                    {
                      "b": {
                        "declaration": 1531,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9247:1:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 1499,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9276:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1533,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF)\n}",
                  "src": "9236:76:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1534,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1531,
                      "src": "9314:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30783830",
                      "id": 1535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9318:4:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "9314:8:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1544,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1542,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1531,
                        "src": "9363:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30784530",
                        "id": 1543,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9367:4:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "9363:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1550,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1531,
                          "src": "9412:1:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30784630",
                          "id": 1551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9416:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "9412:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 1562,
                        "nodeType": "Block",
                        "src": "9458:30:9",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1560,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1558,
                                "name": "l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1528,
                                "src": "9472:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "34",
                                "id": 1559,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9476:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "9472:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1561,
                            "nodeType": "ExpressionStatement",
                            "src": "9472:5:9"
                          }
                        ]
                      },
                      "id": 1563,
                      "nodeType": "IfStatement",
                      "src": "9409:79:9",
                      "trueBody": {
                        "id": 1557,
                        "nodeType": "Block",
                        "src": "9422:30:9",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1555,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1553,
                                "name": "l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1528,
                                "src": "9436:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 1554,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9440:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "9436:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1556,
                            "nodeType": "ExpressionStatement",
                            "src": "9436:5:9"
                          }
                        ]
                      }
                    },
                    "id": 1564,
                    "nodeType": "IfStatement",
                    "src": "9360:128:9",
                    "trueBody": {
                      "id": 1549,
                      "nodeType": "Block",
                      "src": "9373:30:9",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 1547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 1545,
                              "name": "l",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1528,
                              "src": "9387:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 1546,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9391:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "9387:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1548,
                          "nodeType": "ExpressionStatement",
                          "src": "9387:5:9"
                        }
                      ]
                    }
                  },
                  "id": 1565,
                  "nodeType": "IfStatement",
                  "src": "9310:178:9",
                  "trueBody": {
                    "id": 1541,
                    "nodeType": "Block",
                    "src": "9324:30:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1537,
                            "name": "l",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1528,
                            "src": "9338:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 1538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9342:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "9338:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1540,
                        "nodeType": "ExpressionStatement",
                        "src": "9338:5:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1566,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1528,
                      "src": "9544:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1567,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "9548:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1568,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "9548:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9544:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1593,
                  "nodeType": "IfStatement",
                  "src": "9540:153:9",
                  "trueBody": {
                    "id": 1592,
                    "nodeType": "Block",
                    "src": "9559:134:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1570,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1501,
                              "src": "9573:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1572,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "9573:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1573,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1499,
                              "src": "9585:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1574,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "9585:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9573:21:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1576,
                        "nodeType": "ExpressionStatement",
                        "src": "9573:21:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1577,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1499,
                              "src": "9608:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1579,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1011,
                            "src": "9608:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1580,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1499,
                              "src": "9621:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1581,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "9621:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9608:22:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1583,
                        "nodeType": "ExpressionStatement",
                        "src": "9608:22:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1584,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1499,
                              "src": "9644:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1586,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "9644:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1587,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9656:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9644:13:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1589,
                        "nodeType": "ExpressionStatement",
                        "src": "9644:13:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1590,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1501,
                          "src": "9678:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1505,
                        "id": 1591,
                        "nodeType": "Return",
                        "src": "9671:11:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1594,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "9703:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1596,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "9703:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1597,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1528,
                      "src": "9716:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9703:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1599,
                  "nodeType": "ExpressionStatement",
                  "src": "9703:14:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1600,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1499,
                        "src": "9727:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1602,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "9727:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1603,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1528,
                      "src": "9740:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9727:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1605,
                  "nodeType": "ExpressionStatement",
                  "src": "9727:14:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1610,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1606,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1501,
                        "src": "9751:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1608,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "9751:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1609,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1528,
                      "src": "9763:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9751:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1611,
                  "nodeType": "ExpressionStatement",
                  "src": "9751:13:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1612,
                    "name": "rune",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1501,
                    "src": "9781:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1505,
                  "id": 1613,
                  "nodeType": "Return",
                  "src": "9774:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 1615,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "nextRune",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1502,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1499,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1615,
                  "src": "8932:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1498,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "8932:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1501,
                  "name": "rune",
                  "nodeType": "VariableDeclaration",
                  "scope": 1615,
                  "src": "8951:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1500,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "8951:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8931:38:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1505,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1504,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1615,
                  "src": "8993:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1503,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "8993:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8992:14:9"
            },
            "scope": 2700,
            "src": "8914:878:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1627,
              "nodeType": "Block",
              "src": "10110:36:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1623,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1617,
                        "src": "10129:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1624,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1620,
                        "src": "10135:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "id": 1622,
                      "name": "nextRune",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1615,
                        1628
                      ],
                      "referencedDeclaration": 1615,
                      "src": "10120:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1012_memory_ptr_$_t_struct$_slice_$1012_memory_ptr_$returns$_t_struct$_slice_$1012_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (struct strings.slice memory)"
                      }
                    },
                    "id": 1625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10120:19:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 1626,
                  "nodeType": "ExpressionStatement",
                  "src": "10120:19:9"
                }
              ]
            },
            "documentation": null,
            "id": 1628,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "nextRune",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1618,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1617,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1628,
                  "src": "10050:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1616,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "10050:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10049:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1621,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1620,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1628,
                  "src": "10092:16:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1619,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "10092:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10091:18:9"
            },
            "scope": 2700,
            "src": "10032:114:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1774,
              "nodeType": "Block",
              "src": "10407:1013:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1635,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1630,
                        "src": "10421:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1636,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "10421:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1637,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10434:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10421:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1642,
                  "nodeType": "IfStatement",
                  "src": "10417:53:9",
                  "trueBody": {
                    "id": 1641,
                    "nodeType": "Block",
                    "src": "10437:33:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10458:1:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1634,
                        "id": 1640,
                        "nodeType": "Return",
                        "src": "10451:8:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1644,
                      "name": "word",
                      "nodeType": "VariableDeclaration",
                      "scope": 1775,
                      "src": "10480:9:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1643,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10480:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1645,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10480:9:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1647,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 1775,
                      "src": "10499:11:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1646,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10499:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1648,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10499:11:9"
                },
                {
                  "assignments": [
                    1650
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1650,
                      "name": "divisor",
                      "nodeType": "VariableDeclaration",
                      "scope": 1775,
                      "src": "10520:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1649,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10520:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1654,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    },
                    "id": 1653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 1651,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10535:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "323438",
                      "id": 1652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10540:3:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_248_by_1",
                        "typeString": "int_const 248"
                      },
                      "value": "248"
                    },
                    "src": "10535:8:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10520:23:9"
                },
                {
                  "externalReferences": [
                    {
                      "word": {
                        "declaration": 1644,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10609:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 1630,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10632:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1655,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    word := mload(mload(add(self, 32)))\n}",
                  "src": "10598:60:9"
                },
                {
                  "assignments": [
                    1657
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1657,
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 1775,
                      "src": "10654:6:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1656,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10654:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1661,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1658,
                      "name": "word",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1644,
                      "src": "10663:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1659,
                      "name": "divisor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1650,
                      "src": "10670:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10663:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10654:23:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1664,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1662,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1657,
                      "src": "10691:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30783830",
                      "id": 1663,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10695:4:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "10691:8:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1676,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1674,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1657,
                        "src": "10766:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30784530",
                        "id": 1675,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10770:4:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "10766:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1688,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1657,
                          "src": "10848:1:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30784630",
                          "id": 1689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10852:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "10848:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 1712,
                        "nodeType": "Block",
                        "src": "10927:63:9",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1706,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1702,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1633,
                                "src": "10941:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1705,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1703,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1657,
                                  "src": "10947:1:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783037",
                                  "id": 1704,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10951:4:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_7_by_1",
                                    "typeString": "int_const 7"
                                  },
                                  "value": "0x07"
                                },
                                "src": "10947:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10941:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1707,
                            "nodeType": "ExpressionStatement",
                            "src": "10941:14:9"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1710,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1708,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1647,
                                "src": "10969:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "34",
                                "id": 1709,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10978:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "10969:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1711,
                            "nodeType": "ExpressionStatement",
                            "src": "10969:10:9"
                          }
                        ]
                      },
                      "id": 1713,
                      "nodeType": "IfStatement",
                      "src": "10845:145:9",
                      "trueBody": {
                        "id": 1701,
                        "nodeType": "Block",
                        "src": "10858:63:9",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1695,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1691,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1633,
                                "src": "10872:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1694,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1692,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1657,
                                  "src": "10878:1:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30783046",
                                  "id": 1693,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10882:4:9",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_15_by_1",
                                    "typeString": "int_const 15"
                                  },
                                  "value": "0x0F"
                                },
                                "src": "10878:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10872:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1696,
                            "nodeType": "ExpressionStatement",
                            "src": "10872:14:9"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 1699,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 1697,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1647,
                                "src": "10900:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 1698,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10909:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "10900:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1700,
                            "nodeType": "ExpressionStatement",
                            "src": "10900:10:9"
                          }
                        ]
                      }
                    },
                    "id": 1714,
                    "nodeType": "IfStatement",
                    "src": "10763:227:9",
                    "trueBody": {
                      "id": 1687,
                      "nodeType": "Block",
                      "src": "10776:63:9",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 1681,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 1677,
                              "name": "ret",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1633,
                              "src": "10790:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1680,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1678,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1657,
                                "src": "10796:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30783146",
                                "id": 1679,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10800:4:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x1F"
                              },
                              "src": "10796:8:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10790:14:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1682,
                          "nodeType": "ExpressionStatement",
                          "src": "10790:14:9"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 1685,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 1683,
                              "name": "length",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1647,
                              "src": "10818:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 1684,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10827:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "10818:10:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1686,
                          "nodeType": "ExpressionStatement",
                          "src": "10818:10:9"
                        }
                      ]
                    }
                  },
                  "id": 1715,
                  "nodeType": "IfStatement",
                  "src": "10687:303:9",
                  "trueBody": {
                    "id": 1673,
                    "nodeType": "Block",
                    "src": "10701:56:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1665,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1633,
                            "src": "10715:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1666,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1657,
                            "src": "10721:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10715:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1668,
                        "nodeType": "ExpressionStatement",
                        "src": "10715:7:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1669,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1647,
                            "src": "10736:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 1670,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10745:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "10736:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1672,
                        "nodeType": "ExpressionStatement",
                        "src": "10736:10:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1716,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1647,
                      "src": "11046:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1717,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1630,
                        "src": "11055:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1718,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "11055:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11046:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1723,
                  "nodeType": "IfStatement",
                  "src": "11042:57:9",
                  "trueBody": {
                    "id": 1722,
                    "nodeType": "Block",
                    "src": "11066:33:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11087:1:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1634,
                        "id": 1721,
                        "nodeType": "Return",
                        "src": "11080:8:9"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 1770,
                    "nodeType": "Block",
                    "src": "11143:250:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1734,
                            "name": "divisor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1650,
                            "src": "11157:7:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1737,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1735,
                              "name": "divisor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1650,
                              "src": "11167:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "323536",
                              "id": 1736,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11177:3:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_256_by_1",
                                "typeString": "int_const 256"
                              },
                              "value": "256"
                            },
                            "src": "11167:13:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11157:23:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1739,
                        "nodeType": "ExpressionStatement",
                        "src": "11157:23:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1747,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1740,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1657,
                            "src": "11194:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1746,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1743,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1741,
                                    "name": "word",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1644,
                                    "src": "11199:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 1742,
                                    "name": "divisor",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1650,
                                    "src": "11206:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "11199:14:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 1744,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11198:16:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30784646",
                              "id": 1745,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11217:4:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_255_by_1",
                                "typeString": "int_const 255"
                              },
                              "value": "0xFF"
                            },
                            "src": "11198:23:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11194:27:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1748,
                        "nodeType": "ExpressionStatement",
                        "src": "11194:27:9"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1751,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 1749,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1657,
                              "src": "11239:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30784330",
                              "id": 1750,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11243:4:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_192_by_1",
                                "typeString": "int_const 192"
                              },
                              "value": "0xC0"
                            },
                            "src": "11239:8:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30783830",
                            "id": 1752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11251:4:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "11239:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1757,
                        "nodeType": "IfStatement",
                        "src": "11235:105:9",
                        "trueBody": {
                          "id": 1756,
                          "nodeType": "Block",
                          "src": "11257:83:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1754,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11324:1:9",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 1634,
                              "id": 1755,
                              "nodeType": "Return",
                              "src": "11317:8:9"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1758,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1633,
                            "src": "11353:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1767,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1761,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1759,
                                    "name": "ret",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1633,
                                    "src": "11360:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "3634",
                                    "id": 1760,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11366:2:9",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  "src": "11360:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 1762,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11359:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "|",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1765,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 1763,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1657,
                                    "src": "11373:1:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30783346",
                                    "id": 1764,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11377:4:9",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_63_by_1",
                                      "typeString": "int_const 63"
                                    },
                                    "value": "0x3F"
                                  },
                                  "src": "11373:8:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 1766,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11372:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "11359:23:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11353:29:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1769,
                        "nodeType": "ExpressionStatement",
                        "src": "11353:29:9"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1728,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1725,
                      "src": "11126:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1729,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1647,
                      "src": "11130:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11126:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1771,
                  "initializationExpression": {
                    "assignments": [
                      1725
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1725,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1775,
                        "src": "11114:6:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1724,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "11114:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1727,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 1726,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11123:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "11114:10:9"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1732,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "11138:3:9",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1731,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1725,
                        "src": "11138:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1733,
                    "nodeType": "ExpressionStatement",
                    "src": "11138:3:9"
                  },
                  "nodeType": "ForStatement",
                  "src": "11109:284:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1772,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1633,
                    "src": "11410:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1634,
                  "id": 1773,
                  "nodeType": "Return",
                  "src": "11403:10:9"
                }
              ]
            },
            "documentation": null,
            "id": 1775,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "ord",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1630,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1775,
                  "src": "10355:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1629,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "10355:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10354:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1634,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1633,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1775,
                  "src": "10397:8:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1632,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10397:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10396:10:9"
            },
            "scope": 2700,
            "src": "10342:1078:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1783,
              "nodeType": "Block",
              "src": "11642:100:9",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "self": {
                        "declaration": 1777,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11720:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 1780,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11675:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 1777,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11702:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1782,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    ret := keccak256(mload(add(self, 32)), mload(self))\n}",
                  "src": "11652:90:9"
                }
              ]
            },
            "documentation": null,
            "id": 1784,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "keccak",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1778,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1777,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1784,
                  "src": "11587:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1776,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "11587:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11586:19:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1781,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1780,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1784,
                  "src": "11629:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1779,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11629:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11628:13:9"
            },
            "scope": 2700,
            "src": "11571:171:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1817,
              "nodeType": "Block",
              "src": "12080:456:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1797,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1793,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1786,
                        "src": "12094:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1794,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "12094:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1795,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1788,
                        "src": "12106:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1796,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "12106:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12094:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1801,
                  "nodeType": "IfStatement",
                  "src": "12090:66:9",
                  "trueBody": {
                    "id": 1800,
                    "nodeType": "Block",
                    "src": "12119:37:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 1798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12140:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 1792,
                        "id": 1799,
                        "nodeType": "Return",
                        "src": "12133:12:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1802,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1786,
                        "src": "12170:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1803,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "12170:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1804,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1788,
                        "src": "12183:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1805,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "12183:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12170:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1810,
                  "nodeType": "IfStatement",
                  "src": "12166:66:9",
                  "trueBody": {
                    "id": 1809,
                    "nodeType": "Block",
                    "src": "12196:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12217:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1792,
                        "id": 1808,
                        "nodeType": "Return",
                        "src": "12210:11:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1812,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 1818,
                      "src": "12242:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1811,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "12242:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1813,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12242:10:9"
                },
                {
                  "externalReferences": [
                    {
                      "needle": {
                        "declaration": 1788,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12305:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "self": {
                        "declaration": 1786,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12350:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "equal": {
                        "declaration": 1812,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12429:5:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "needle": {
                        "declaration": 1788,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12402:6:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1814,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let length := mload(needle)\n    let selfptr := mload(add(self, 0x20))\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                  "src": "12262:261:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1815,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1812,
                    "src": "12524:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1792,
                  "id": 1816,
                  "nodeType": "Return",
                  "src": "12517:12:9"
                }
              ]
            },
            "documentation": null,
            "id": 1818,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "startsWith",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1786,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1818,
                  "src": "12011:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1785,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "12011:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1788,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 1818,
                  "src": "12030:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1787,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "12030:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12010:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1791,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1818,
                  "src": "12074:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1790,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12074:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12073:6:9"
            },
            "scope": 2700,
            "src": "11991:545:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1867,
              "nodeType": "Block",
              "src": "12901:568:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1827,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1820,
                        "src": "12915:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1828,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "12915:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1829,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1822,
                        "src": "12927:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1830,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "12927:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12915:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1835,
                  "nodeType": "IfStatement",
                  "src": "12911:65:9",
                  "trueBody": {
                    "id": 1834,
                    "nodeType": "Block",
                    "src": "12940:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1832,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1820,
                          "src": "12961:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1826,
                        "id": 1833,
                        "nodeType": "Return",
                        "src": "12954:11:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1837
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1837,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 1868,
                      "src": "12986:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1836,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "12986:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1839,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1838,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12999:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12986:17:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1840,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1820,
                        "src": "13017:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1841,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "13017:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1842,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1822,
                        "src": "13030:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1843,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "13030:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13017:24:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1847,
                  "nodeType": "IfStatement",
                  "src": "13013:320:9",
                  "trueBody": {
                    "id": 1846,
                    "nodeType": "Block",
                    "src": "13043:290:9",
                    "statements": [
                      {
                        "externalReferences": [
                          {
                            "needle": {
                              "declaration": 1822,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13104:6:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "self": {
                              "declaration": 1820,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13153:4:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "equal": {
                              "declaration": 1837,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13240:5:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 1822,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "13209:6:9",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 1845,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    let length := mload(needle)\n    let selfptr := mload(add(self, 0x20))\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                        "src": "13057:276:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1848,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1837,
                    "src": "13347:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1864,
                  "nodeType": "IfStatement",
                  "src": "13343:98:9",
                  "trueBody": {
                    "id": 1863,
                    "nodeType": "Block",
                    "src": "13354:87:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1854,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1849,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1820,
                              "src": "13368:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1851,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "13368:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1852,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1822,
                              "src": "13381:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1853,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "13381:11:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13368:24:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1855,
                        "nodeType": "ExpressionStatement",
                        "src": "13368:24:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1856,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1820,
                              "src": "13406:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1858,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1011,
                            "src": "13406:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1859,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1822,
                              "src": "13419:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1860,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "13419:11:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13406:24:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1862,
                        "nodeType": "ExpressionStatement",
                        "src": "13406:24:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1865,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1820,
                    "src": "13458:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1826,
                  "id": 1866,
                  "nodeType": "Return",
                  "src": "13451:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 1868,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "beyond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1823,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1820,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1868,
                  "src": "12824:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1819,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "12824:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1822,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 1868,
                  "src": "12843:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1821,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "12843:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12823:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1826,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1825,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1868,
                  "src": "12887:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1824,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "12887:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12886:14:9"
            },
            "scope": 2700,
            "src": "12808:661:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1911,
              "nodeType": "Block",
              "src": "13806:466:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1877,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1870,
                        "src": "13820:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1878,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "13820:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1879,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1872,
                        "src": "13832:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1880,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "13832:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13820:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1885,
                  "nodeType": "IfStatement",
                  "src": "13816:66:9",
                  "trueBody": {
                    "id": 1884,
                    "nodeType": "Block",
                    "src": "13845:37:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 1882,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13866:5:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 1876,
                        "id": 1883,
                        "nodeType": "Return",
                        "src": "13859:12:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1887
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1887,
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1912,
                      "src": "13892:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1886,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13892:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1896,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1892,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1888,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1870,
                          "src": "13907:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1889,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "13907:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1890,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1870,
                          "src": "13919:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1891,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "13919:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "13907:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1893,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1872,
                        "src": "13931:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1894,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "13931:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13907:35:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13892:50:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1897,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1887,
                      "src": "13957:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1898,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1872,
                        "src": "13968:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1899,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "13968:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13957:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1904,
                  "nodeType": "IfStatement",
                  "src": "13953:64:9",
                  "trueBody": {
                    "id": 1903,
                    "nodeType": "Block",
                    "src": "13981:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1901,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14002:4:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1876,
                        "id": 1902,
                        "nodeType": "Return",
                        "src": "13995:11:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1906,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 1912,
                      "src": "14027:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1905,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "14027:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1907,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14027:10:9"
                },
                {
                  "externalReferences": [
                    {
                      "needle": {
                        "declaration": 1872,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14090:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "needle": {
                        "declaration": 1872,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14137:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "equal": {
                        "declaration": 1906,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14164:5:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "selfptr": {
                        "declaration": 1887,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14186:7:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1908,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let length := mload(needle)\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                  "src": "14047:212:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1909,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1906,
                    "src": "14260:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1876,
                  "id": 1910,
                  "nodeType": "Return",
                  "src": "14253:12:9"
                }
              ]
            },
            "documentation": null,
            "id": 1912,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "endsWith",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1873,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1870,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1912,
                  "src": "13737:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1869,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "13737:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1872,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 1912,
                  "src": "13756:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1871,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "13756:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13736:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1875,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1912,
                  "src": "13800:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1874,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13800:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13799:6:9"
            },
            "scope": 2700,
            "src": "13719:553:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1964,
              "nodeType": "Block",
              "src": "14628:534:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1921,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1914,
                        "src": "14642:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1922,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "14642:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1923,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1916,
                        "src": "14654:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1924,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "14654:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14642:23:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1929,
                  "nodeType": "IfStatement",
                  "src": "14638:65:9",
                  "trueBody": {
                    "id": 1928,
                    "nodeType": "Block",
                    "src": "14667:36:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1926,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1914,
                          "src": "14688:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1920,
                        "id": 1927,
                        "nodeType": "Return",
                        "src": "14681:11:9"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1931
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1931,
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1965,
                      "src": "14713:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1930,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "14713:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1940,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1936,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1932,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1914,
                          "src": "14728:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1933,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "14728:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1934,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1914,
                          "src": "14740:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1935,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "14740:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "14728:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1937,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1916,
                        "src": "14752:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1938,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "14752:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14728:35:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14713:50:9"
                },
                {
                  "assignments": [
                    1942
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1942,
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 1965,
                      "src": "14773:10:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1941,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "14773:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1944,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14786:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14773:17:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1945,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1931,
                      "src": "14804:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1946,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1916,
                        "src": "14815:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1947,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "14815:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14804:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1951,
                  "nodeType": "IfStatement",
                  "src": "14800:264:9",
                  "trueBody": {
                    "id": 1950,
                    "nodeType": "Block",
                    "src": "14828:236:9",
                    "statements": [
                      {
                        "externalReferences": [
                          {
                            "needle": {
                              "declaration": 1916,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "14889:6:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "needle": {
                              "declaration": 1916,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "14940:6:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "equal": {
                              "declaration": 1942,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "14971:5:9",
                              "valueSize": 1
                            }
                          },
                          {
                            "selfptr": {
                              "declaration": 1931,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "14993:7:9",
                              "valueSize": 1
                            }
                          }
                        ],
                        "id": 1949,
                        "nodeType": "InlineAssembly",
                        "operations": "{\n    let length := mload(needle)\n    let needleptr := mload(add(needle, 0x20))\n    equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n}",
                        "src": "14842:222:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1952,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1942,
                    "src": "15078:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1961,
                  "nodeType": "IfStatement",
                  "src": "15074:60:9",
                  "trueBody": {
                    "id": 1960,
                    "nodeType": "Block",
                    "src": "15085:49:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1953,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1914,
                              "src": "15099:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1955,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "15099:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1956,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1916,
                              "src": "15112:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1957,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "15112:11:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15099:24:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1959,
                        "nodeType": "ExpressionStatement",
                        "src": "15099:24:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1962,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1914,
                    "src": "15151:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1920,
                  "id": 1963,
                  "nodeType": "Return",
                  "src": "15144:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 1965,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "until",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1917,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1914,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1965,
                  "src": "14551:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1913,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "14551:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1916,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 1965,
                  "src": "14570:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1915,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "14570:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14550:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1920,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1919,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1965,
                  "src": "14614:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1918,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "14614:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14613:14:9"
            },
            "scope": 2700,
            "src": "14536:626:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2085,
              "nodeType": "Block",
              "src": "15424:1267:9",
              "statements": [
                {
                  "assignments": [
                    1979
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1979,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2086,
                      "src": "15434:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1978,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15434:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1981,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 1980,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1969,
                    "src": "15445:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15434:18:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1983,
                      "name": "idx",
                      "nodeType": "VariableDeclaration",
                      "scope": 2086,
                      "src": "15462:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1982,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15462:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1984,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15462:8:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1987,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1985,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1971,
                      "src": "15485:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1986,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1967,
                      "src": "15498:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15485:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2080,
                  "nodeType": "IfStatement",
                  "src": "15481:1170:9",
                  "trueBody": {
                    "id": 2079,
                    "nodeType": "Block",
                    "src": "15507:1144:9",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1990,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1988,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1971,
                            "src": "15525:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 1989,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15538:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "15525:15:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2077,
                          "nodeType": "Block",
                          "src": "16175:466:9",
                          "statements": [
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2046,
                                  "name": "hash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2086,
                                  "src": "16242:12:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2045,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16242:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2047,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "16242:12:9"
                            },
                            {
                              "externalReferences": [
                                {
                                  "hash": {
                                    "declaration": 2046,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16283:4:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needleptr": {
                                    "declaration": 1973,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16301:9:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needlelen": {
                                    "declaration": 1971,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "16312:9:9",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 2048,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    hash := keccak256(needleptr, needlelen)\n}",
                              "src": "16272:73:9"
                            },
                            {
                              "body": {
                                "id": 2075,
                                "nodeType": "Block",
                                "src": "16391:236:9",
                                "statements": [
                                  {
                                    "assignments": [],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 2062,
                                        "name": "testHash",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 2086,
                                        "src": "16413:16:9",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 2061,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "16413:7:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "value": null,
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 2063,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "16413:16:9"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "testHash": {
                                          "declaration": 2062,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16462:8:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptr": {
                                          "declaration": 1979,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16484:3:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "needlelen": {
                                          "declaration": 1971,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16489:9:9",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 2064,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    testHash := keccak256(ptr, needlelen)\n}",
                                    "src": "16451:73:9"
                                  },
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 2067,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 2065,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2046,
                                        "src": "16526:4:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 2066,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2062,
                                        "src": "16534:8:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "16526:16:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 2070,
                                    "nodeType": "IfStatement",
                                    "src": "16522:56:9",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 2068,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1979,
                                        "src": "16575:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 1977,
                                      "id": 2069,
                                      "nodeType": "Return",
                                      "src": "16568:10:9"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2073,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 2071,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1979,
                                        "src": "16600:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 2072,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "16607:1:9",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "16600:8:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2074,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16600:8:9"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2057,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 2053,
                                  "name": "idx",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1983,
                                  "src": "16356:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2056,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2054,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1967,
                                    "src": "16363:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 2055,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1971,
                                    "src": "16373:9:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "16363:19:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16356:26:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2076,
                              "initializationExpression": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2051,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 2049,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1983,
                                    "src": "16347:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2050,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16353:1:9",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "16347:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2052,
                                "nodeType": "ExpressionStatement",
                                "src": "16347:7:9"
                              },
                              "loopExpression": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2059,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "++",
                                  "prefix": false,
                                  "src": "16384:5:9",
                                  "subExpression": {
                                    "argumentTypes": null,
                                    "id": 2058,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1983,
                                    "src": "16384:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2060,
                                "nodeType": "ExpressionStatement",
                                "src": "16384:5:9"
                              },
                              "nodeType": "ForStatement",
                              "src": "16342:285:9"
                            }
                          ]
                        },
                        "id": 2078,
                        "nodeType": "IfStatement",
                        "src": "15521:1120:9",
                        "trueBody": {
                          "id": 2044,
                          "nodeType": "Block",
                          "src": "15542:627:9",
                          "statements": [
                            {
                              "assignments": [
                                1992
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1992,
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2086,
                                  "src": "15560:12:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 1991,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15560:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2008,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2006,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "~",
                                    "prefix": true,
                                    "src": "15583:34:9",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 2004,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 2002,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "32",
                                              "id": 1994,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "15585:1:9",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                              },
                                              "value": "2"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "components": [
                                                {
                                                  "argumentTypes": null,
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 2000,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "38",
                                                    "id": 1995,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "15591:1:9",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_8_by_1",
                                                      "typeString": "int_const 8"
                                                    },
                                                    "value": "8"
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "*",
                                                  "rightExpression": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                      {
                                                        "argumentTypes": null,
                                                        "commonType": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        "id": 1998,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                          "argumentTypes": null,
                                                          "hexValue": "3332",
                                                          "id": 1996,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "15596:2:9",
                                                          "subdenomination": null,
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                          },
                                                          "value": "32"
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                          "argumentTypes": null,
                                                          "id": 1997,
                                                          "name": "needlelen",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 1971,
                                                          "src": "15601:9:9",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "src": "15596:14:9",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "id": 1999,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "15595:16:9",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "15591:20:9",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 2001,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "15590:22:9",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "15585:27:9",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 2003,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "15615:1:9",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "15585:31:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 2005,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "15584:33:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1993,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15575:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 2007,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15575:43:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15560:58:9"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2010,
                                  "name": "needledata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2086,
                                  "src": "15637:18:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2009,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15637:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2011,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15637:18:9"
                            },
                            {
                              "externalReferences": [
                                {
                                  "needleptr": {
                                    "declaration": 1973,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15708:9:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needledata": {
                                    "declaration": 2010,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15684:10:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 1992,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15720:4:9",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 2012,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    needledata := and(mload(needleptr), mask)\n}",
                              "src": "15673:76:9"
                            },
                            {
                              "assignments": [
                                2014
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2014,
                                  "name": "end",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2086,
                                  "src": "15745:8:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 2013,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15745:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2020,
                              "initialValue": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2019,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2017,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2015,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1969,
                                    "src": "15756:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 2016,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1967,
                                    "src": "15766:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "15756:17:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 2018,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1971,
                                  "src": "15776:9:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15756:29:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15745:40:9"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2022,
                                  "name": "ptrdata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2086,
                                  "src": "15803:15:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2021,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15803:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2023,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15803:15:9"
                            },
                            {
                              "externalReferences": [
                                {
                                  "ptr": {
                                    "declaration": 1979,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15868:3:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "ptrdata": {
                                    "declaration": 2022,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15847:7:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 1992,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "15874:4:9",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 2024,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                              "src": "15836:68:9"
                            },
                            {
                              "body": {
                                "id": 2040,
                                "nodeType": "Block",
                                "src": "15929:198:9",
                                "statements": [
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2030,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 2028,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1979,
                                        "src": "15955:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 2029,
                                        "name": "end",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2014,
                                        "src": "15962:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "15955:10:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 2035,
                                    "nodeType": "IfStatement",
                                    "src": "15951:64:9",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2033,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 2031,
                                          "name": "selfptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1969,
                                          "src": "15998:7:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 2032,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1967,
                                          "src": "16008:7:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "15998:17:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 1977,
                                      "id": 2034,
                                      "nodeType": "Return",
                                      "src": "15991:24:9"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2037,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "16037:5:9",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "id": 2036,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1979,
                                        "src": "16037:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2038,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16037:5:9"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "ptr": {
                                          "declaration": 1979,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16096:3:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptrdata": {
                                          "declaration": 2022,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16075:7:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "mask": {
                                          "declaration": 1992,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "16102:4:9",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 2039,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                                    "src": "16064:63:9"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 2027,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 2025,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2022,
                                  "src": "15906:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 2026,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2010,
                                  "src": "15917:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "15906:21:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2041,
                              "nodeType": "WhileStatement",
                              "src": "15899:228:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2042,
                                "name": "ptr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1979,
                                "src": "16151:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 1977,
                              "id": 2043,
                              "nodeType": "Return",
                              "src": "16144:10:9"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2081,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1969,
                      "src": "16667:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2082,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1967,
                      "src": "16677:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16667:17:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1977,
                  "id": 2084,
                  "nodeType": "Return",
                  "src": "16660:24:9"
                }
              ]
            },
            "documentation": null,
            "id": 2086,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "findPtr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1974,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1967,
                  "name": "selflen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "15336:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1966,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15336:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1969,
                  "name": "selfptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "15350:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1968,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15350:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1971,
                  "name": "needlelen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "15364:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1970,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15364:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1973,
                  "name": "needleptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "15380:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1972,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15380:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15335:60:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 1977,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1976,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "15418:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1975,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15418:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15417:6:9"
            },
            "scope": 2700,
            "src": "15319:1372:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2202,
              "nodeType": "Block",
              "src": "16950:1270:9",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2100,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2203,
                      "src": "16960:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2099,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "16960:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2101,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16960:8:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2102,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2092,
                      "src": "16983:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2103,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2088,
                      "src": "16996:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16983:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2199,
                  "nodeType": "IfStatement",
                  "src": "16979:1211:9",
                  "trueBody": {
                    "id": 2198,
                    "nodeType": "Block",
                    "src": "17005:1185:9",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2105,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2092,
                            "src": "17023:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 2106,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17036:2:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "17023:15:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2196,
                          "nodeType": "Block",
                          "src": "17674:506:9",
                          "statements": [
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2163,
                                  "name": "hash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2203,
                                  "src": "17741:12:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2162,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17741:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2164,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17741:12:9"
                            },
                            {
                              "externalReferences": [
                                {
                                  "hash": {
                                    "declaration": 2163,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17782:4:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needleptr": {
                                    "declaration": 2094,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17800:9:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needlelen": {
                                    "declaration": 2092,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17811:9:9",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 2165,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    hash := keccak256(needleptr, needlelen)\n}",
                              "src": "17771:72:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2173,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2166,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2100,
                                  "src": "17840:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2172,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2167,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2090,
                                    "src": "17846:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2170,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 2168,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2088,
                                          "src": "17857:7:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 2169,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2092,
                                          "src": "17867:9:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "17857:19:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 2171,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "17856:21:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "17846:31:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17840:37:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2174,
                              "nodeType": "ExpressionStatement",
                              "src": "17840:37:9"
                            },
                            {
                              "body": {
                                "id": 2194,
                                "nodeType": "Block",
                                "src": "17918:248:9",
                                "statements": [
                                  {
                                    "assignments": [],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 2179,
                                        "name": "testHash",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 2203,
                                        "src": "17940:16:9",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 2178,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "17940:7:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "value": null,
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 2180,
                                    "initialValue": null,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "17940:16:9"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "testHash": {
                                          "declaration": 2179,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "17989:8:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptr": {
                                          "declaration": 2100,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "18011:3:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "needlelen": {
                                          "declaration": 2092,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "18016:9:9",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 2181,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    testHash := keccak256(ptr, needlelen)\n}",
                                    "src": "17978:73:9"
                                  },
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 2184,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 2182,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2163,
                                        "src": "18053:4:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 2183,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2179,
                                        "src": "18061:8:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "18053:16:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 2189,
                                    "nodeType": "IfStatement",
                                    "src": "18049:68:9",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2187,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 2185,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2100,
                                          "src": "18102:3:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 2186,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2092,
                                          "src": "18108:9:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "18102:15:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 2098,
                                      "id": 2188,
                                      "nodeType": "Return",
                                      "src": "18095:22:9"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2192,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 2190,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2100,
                                        "src": "18139:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "-=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "31",
                                        "id": 2191,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "18146:1:9",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "18139:8:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2193,
                                    "nodeType": "ExpressionStatement",
                                    "src": "18139:8:9"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2177,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 2175,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2100,
                                  "src": "17902:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 2176,
                                  "name": "selfptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2090,
                                  "src": "17909:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17902:14:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2195,
                              "nodeType": "WhileStatement",
                              "src": "17895:271:9"
                            }
                          ]
                        },
                        "id": 2197,
                        "nodeType": "IfStatement",
                        "src": "17019:1161:9",
                        "trueBody": {
                          "id": 2161,
                          "nodeType": "Block",
                          "src": "17040:628:9",
                          "statements": [
                            {
                              "assignments": [
                                2109
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2109,
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2203,
                                  "src": "17058:12:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2108,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17058:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2125,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2123,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "~",
                                    "prefix": true,
                                    "src": "17081:34:9",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 2121,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 2119,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "32",
                                              "id": 2111,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "17083:1:9",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                              },
                                              "value": "2"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "argumentTypes": null,
                                              "components": [
                                                {
                                                  "argumentTypes": null,
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 2117,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "argumentTypes": null,
                                                    "hexValue": "38",
                                                    "id": 2112,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "17089:1:9",
                                                    "subdenomination": null,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_8_by_1",
                                                      "typeString": "int_const 8"
                                                    },
                                                    "value": "8"
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "*",
                                                  "rightExpression": {
                                                    "argumentTypes": null,
                                                    "components": [
                                                      {
                                                        "argumentTypes": null,
                                                        "commonType": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        "id": 2115,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                          "argumentTypes": null,
                                                          "hexValue": "3332",
                                                          "id": 2113,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "17094:2:9",
                                                          "subdenomination": null,
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                          },
                                                          "value": "32"
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                          "argumentTypes": null,
                                                          "id": 2114,
                                                          "name": "needlelen",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 2092,
                                                          "src": "17099:9:9",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "src": "17094:14:9",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "id": 2116,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "17093:16:9",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "17089:20:9",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 2118,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "17088:22:9",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "17083:27:9",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "31",
                                            "id": 2120,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "17113:1:9",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "17083:31:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 2122,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "17082:33:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2110,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "17073:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 2124,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17073:43:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17058:58:9"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2127,
                                  "name": "needledata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2203,
                                  "src": "17135:18:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2126,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17135:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2128,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17135:18:9"
                            },
                            {
                              "externalReferences": [
                                {
                                  "needleptr": {
                                    "declaration": 2094,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17206:9:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "needledata": {
                                    "declaration": 2127,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17182:10:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 2109,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17218:4:9",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 2129,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    needledata := and(mload(needleptr), mask)\n}",
                              "src": "17171:75:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2136,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2130,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2100,
                                  "src": "17243:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2135,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2133,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 2131,
                                      "name": "selfptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2090,
                                      "src": "17249:7:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 2132,
                                      "name": "selflen",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2088,
                                      "src": "17259:7:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "17249:17:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 2134,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2092,
                                    "src": "17269:9:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "17249:29:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17243:35:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2137,
                              "nodeType": "ExpressionStatement",
                              "src": "17243:35:9"
                            },
                            {
                              "assignments": [],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2139,
                                  "name": "ptrdata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2203,
                                  "src": "17296:15:9",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2138,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17296:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2140,
                              "initialValue": null,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17296:15:9"
                            },
                            {
                              "externalReferences": [
                                {
                                  "ptr": {
                                    "declaration": 2100,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17361:3:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "ptrdata": {
                                    "declaration": 2139,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17340:7:9",
                                    "valueSize": 1
                                  }
                                },
                                {
                                  "mask": {
                                    "declaration": 2109,
                                    "isOffset": false,
                                    "isSlot": false,
                                    "src": "17367:4:9",
                                    "valueSize": 1
                                  }
                                }
                              ],
                              "id": 2141,
                              "nodeType": "InlineAssembly",
                              "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                              "src": "17329:68:9"
                            },
                            {
                              "body": {
                                "id": 2155,
                                "nodeType": "Block",
                                "src": "17422:192:9",
                                "statements": [
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2147,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 2145,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2100,
                                        "src": "17448:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 2146,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2090,
                                        "src": "17455:7:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "17448:14:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 2150,
                                    "nodeType": "IfStatement",
                                    "src": "17444:58:9",
                                    "trueBody": {
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 2148,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2090,
                                        "src": "17495:7:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 2098,
                                      "id": 2149,
                                      "nodeType": "Return",
                                      "src": "17488:14:9"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2152,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "--",
                                      "prefix": false,
                                      "src": "17524:5:9",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "id": 2151,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2100,
                                        "src": "17524:3:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2153,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17524:5:9"
                                  },
                                  {
                                    "externalReferences": [
                                      {
                                        "ptr": {
                                          "declaration": 2100,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "17583:3:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "ptrdata": {
                                          "declaration": 2139,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "17562:7:9",
                                          "valueSize": 1
                                        }
                                      },
                                      {
                                        "mask": {
                                          "declaration": 2109,
                                          "isOffset": false,
                                          "isSlot": false,
                                          "src": "17589:4:9",
                                          "valueSize": 1
                                        }
                                      }
                                    ],
                                    "id": 2154,
                                    "nodeType": "InlineAssembly",
                                    "operations": "{\n    ptrdata := and(mload(ptr), mask)\n}",
                                    "src": "17551:63:9"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 2144,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 2142,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2139,
                                  "src": "17399:7:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 2143,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2127,
                                  "src": "17410:10:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "17399:21:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2156,
                              "nodeType": "WhileStatement",
                              "src": "17392:222:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2159,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 2157,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2100,
                                  "src": "17638:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 2158,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2092,
                                  "src": "17644:9:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17638:15:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 2098,
                              "id": 2160,
                              "nodeType": "Return",
                              "src": "17631:22:9"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2200,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2090,
                    "src": "18206:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2098,
                  "id": 2201,
                  "nodeType": "Return",
                  "src": "18199:14:9"
                }
              ]
            },
            "documentation": null,
            "id": 2203,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rfindPtr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2095,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2088,
                  "name": "selflen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "16862:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2087,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16862:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2090,
                  "name": "selfptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "16876:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2089,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16876:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2092,
                  "name": "needlelen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "16890:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2091,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16890:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2094,
                  "name": "needleptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "16906:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2093,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16906:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16861:60:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2098,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2097,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2203,
                  "src": "16944:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2096,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16944:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16943:6:9"
            },
            "scope": 2700,
            "src": "16844:1376:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2242,
              "nodeType": "Block",
              "src": "18647:167:9",
              "statements": [
                {
                  "assignments": [
                    2213
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2213,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2243,
                      "src": "18657:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2212,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "18657:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2224,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2215,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2205,
                          "src": "18676:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2216,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "18676:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2217,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2205,
                          "src": "18687:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2218,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "18687:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2219,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2207,
                          "src": "18698:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2220,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "18698:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2221,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2207,
                          "src": "18711:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2222,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "18711:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2214,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2086,
                      "src": "18668:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18668:55:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18657:66:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2225,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "18733:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2227,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "18733:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2231,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2228,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2213,
                        "src": "18746:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2229,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2205,
                          "src": "18752:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2230,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "18752:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "18746:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18733:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2233,
                  "nodeType": "ExpressionStatement",
                  "src": "18733:28:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2234,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2205,
                        "src": "18771:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2236,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "18771:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2237,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2213,
                      "src": "18783:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18771:15:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2239,
                  "nodeType": "ExpressionStatement",
                  "src": "18771:15:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2240,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2205,
                    "src": "18803:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2211,
                  "id": 2241,
                  "nodeType": "Return",
                  "src": "18796:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 2243,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "find",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2205,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2243,
                  "src": "18570:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2204,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "18570:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2207,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2243,
                  "src": "18589:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2206,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "18589:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18569:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2211,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2210,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2243,
                  "src": "18633:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2209,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "18633:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18632:14:9"
            },
            "scope": 2700,
            "src": "18556:258:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2276,
              "nodeType": "Block",
              "src": "19265:142:9",
              "statements": [
                {
                  "assignments": [
                    2253
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2253,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2277,
                      "src": "19275:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2252,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "19275:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2264,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2255,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2245,
                          "src": "19295:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2256,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "19295:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2257,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2245,
                          "src": "19306:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2258,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "19306:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2259,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2247,
                          "src": "19317:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2260,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "19317:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2261,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2247,
                          "src": "19330:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2262,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "19330:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2254,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2203,
                      "src": "19286:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19286:56:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19275:67:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2265,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2245,
                        "src": "19352:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2267,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "19352:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2271,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2268,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2253,
                        "src": "19364:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2269,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2245,
                          "src": "19370:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2270,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "19370:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "19364:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19352:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2273,
                  "nodeType": "ExpressionStatement",
                  "src": "19352:27:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2274,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2245,
                    "src": "19396:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2251,
                  "id": 2275,
                  "nodeType": "Return",
                  "src": "19389:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 2277,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rfind",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2245,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "19188:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2244,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "19188:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2247,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "19207:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2246,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "19207:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19187:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2251,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2250,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "19251:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2249,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "19251:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19250:14:9"
            },
            "scope": 2700,
            "src": "19173:234:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2354,
              "nodeType": "Block",
              "src": "20025:392:9",
              "statements": [
                {
                  "assignments": [
                    2289
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2289,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2355,
                      "src": "20035:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2288,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "20035:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2300,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2291,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2279,
                          "src": "20054:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2292,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "20054:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2293,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2279,
                          "src": "20065:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2294,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "20065:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2295,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2281,
                          "src": "20076:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2296,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "20076:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2297,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2281,
                          "src": "20089:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2298,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "20089:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2290,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2086,
                      "src": "20046:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20046:55:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20035:66:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2301,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2283,
                        "src": "20111:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2303,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "20111:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2304,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2279,
                        "src": "20124:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2305,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "20124:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20111:22:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2307,
                  "nodeType": "ExpressionStatement",
                  "src": "20111:22:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2308,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2283,
                        "src": "20143:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2310,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "20143:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2314,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2311,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2289,
                        "src": "20156:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2312,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2279,
                          "src": "20162:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2313,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "20162:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20156:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20143:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2316,
                  "nodeType": "ExpressionStatement",
                  "src": "20143:28:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2323,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2317,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2289,
                      "src": "20185:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2318,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2279,
                          "src": "20192:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2319,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "20192:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2320,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2279,
                          "src": "20204:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2321,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "20204:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20192:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20185:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2350,
                    "nodeType": "Block",
                    "src": "20284:105:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2331,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2279,
                              "src": "20298:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2333,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "20298:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2338,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2334,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2283,
                                "src": "20311:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2335,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "20311:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2336,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2281,
                                "src": "20324:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2337,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "20324:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20311:24:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20298:37:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2340,
                        "nodeType": "ExpressionStatement",
                        "src": "20298:37:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2348,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2341,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2279,
                              "src": "20349:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2343,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1011,
                            "src": "20349:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2347,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2344,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2289,
                              "src": "20361:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2345,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2281,
                                "src": "20367:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2346,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "20367:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20361:17:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20349:29:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2349,
                        "nodeType": "ExpressionStatement",
                        "src": "20349:29:9"
                      }
                    ]
                  },
                  "id": 2351,
                  "nodeType": "IfStatement",
                  "src": "20181:208:9",
                  "trueBody": {
                    "id": 2330,
                    "nodeType": "Block",
                    "src": "20215:63:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2328,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2324,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2279,
                              "src": "20254:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2326,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "20254:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2327,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20266:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "20254:13:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2329,
                        "nodeType": "ExpressionStatement",
                        "src": "20254:13:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2352,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2283,
                    "src": "20405:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2287,
                  "id": 2353,
                  "nodeType": "Return",
                  "src": "20398:12:9"
                }
              ]
            },
            "documentation": null,
            "id": 2355,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "split",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2284,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2279,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2355,
                  "src": "19928:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2278,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "19928:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2281,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2355,
                  "src": "19947:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2280,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "19947:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2283,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2355,
                  "src": "19968:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2282,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "19968:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19927:60:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2287,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2286,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2355,
                  "src": "20011:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2285,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "20011:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20010:14:9"
            },
            "scope": 2700,
            "src": "19913:504:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2370,
              "nodeType": "Block",
              "src": "20986:43:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2365,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2357,
                        "src": "21002:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2366,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2359,
                        "src": "21008:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2367,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2362,
                        "src": "21016:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "id": 2364,
                      "name": "split",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2355,
                        2371
                      ],
                      "referencedDeclaration": 2355,
                      "src": "20996:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1012_memory_ptr_$_t_struct$_slice_$1012_memory_ptr_$_t_struct$_slice_$1012_memory_ptr_$returns$_t_struct$_slice_$1012_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory,struct strings.slice memory) pure returns (struct strings.slice memory)"
                      }
                    },
                    "id": 2368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20996:26:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 2369,
                  "nodeType": "ExpressionStatement",
                  "src": "20996:26:9"
                }
              ]
            },
            "documentation": null,
            "id": 2371,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "split",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2357,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2371,
                  "src": "20903:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2356,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "20903:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2359,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2371,
                  "src": "20922:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2358,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "20922:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20902:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2362,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2371,
                  "src": "20966:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2361,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "20966:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20965:20:9"
            },
            "scope": 2700,
            "src": "20888:141:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2439,
              "nodeType": "Block",
              "src": "21647:346:9",
              "statements": [
                {
                  "assignments": [
                    2383
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2383,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2440,
                      "src": "21657:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2382,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "21657:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2394,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2385,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2373,
                          "src": "21677:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2386,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "21677:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2387,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2373,
                          "src": "21688:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2388,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "21688:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2389,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2375,
                          "src": "21699:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2390,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "21699:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2391,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2375,
                          "src": "21712:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2392,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "21712:11:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2384,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2203,
                      "src": "21668:8:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21668:56:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21657:67:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2395,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2377,
                        "src": "21734:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2397,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "21734:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2398,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2383,
                      "src": "21747:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21734:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2400,
                  "nodeType": "ExpressionStatement",
                  "src": "21734:16:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2401,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2377,
                        "src": "21760:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2403,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "21760:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2404,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2373,
                          "src": "21773:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2405,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "21773:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2409,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 2406,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2383,
                              "src": "21786:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2407,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2373,
                                "src": "21792:4:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2408,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1011,
                              "src": "21792:9:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "21786:15:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 2410,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "21785:17:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "21773:29:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21760:42:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2413,
                  "nodeType": "ExpressionStatement",
                  "src": "21760:42:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2414,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2383,
                      "src": "21816:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2415,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2373,
                        "src": "21823:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2416,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "21823:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21816:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2435,
                    "nodeType": "Block",
                    "src": "21903:62:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2433,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2425,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2373,
                              "src": "21917:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2427,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "21917:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2432,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2428,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2377,
                                "src": "21930:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2429,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "21930:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2430,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2375,
                                "src": "21943:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2431,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "21943:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "21930:24:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "21917:37:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2434,
                        "nodeType": "ExpressionStatement",
                        "src": "21917:37:9"
                      }
                    ]
                  },
                  "id": 2436,
                  "nodeType": "IfStatement",
                  "src": "21812:153:9",
                  "trueBody": {
                    "id": 2424,
                    "nodeType": "Block",
                    "src": "21834:63:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2422,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2418,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2373,
                              "src": "21873:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2420,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "21873:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2421,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21885:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "21873:13:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2423,
                        "nodeType": "ExpressionStatement",
                        "src": "21873:13:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2437,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2377,
                    "src": "21981:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2381,
                  "id": 2438,
                  "nodeType": "Return",
                  "src": "21974:12:9"
                }
              ]
            },
            "documentation": null,
            "id": 2440,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rsplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2378,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2373,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2440,
                  "src": "21550:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2372,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "21550:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2375,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2440,
                  "src": "21569:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2374,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "21569:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2377,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2440,
                  "src": "21590:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2376,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "21590:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21549:60:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2381,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2380,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2440,
                  "src": "21633:5:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2379,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "21633:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21632:14:9"
            },
            "scope": 2700,
            "src": "21534:459:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2455,
              "nodeType": "Block",
              "src": "22561:44:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2450,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2442,
                        "src": "22578:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2451,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2444,
                        "src": "22584:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2452,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2447,
                        "src": "22592:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "id": 2449,
                      "name": "rsplit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2440,
                        2456
                      ],
                      "referencedDeclaration": 2440,
                      "src": "22571:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1012_memory_ptr_$_t_struct$_slice_$1012_memory_ptr_$_t_struct$_slice_$1012_memory_ptr_$returns$_t_struct$_slice_$1012_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory,struct strings.slice memory) pure returns (struct strings.slice memory)"
                      }
                    },
                    "id": 2453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22571:27:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 2454,
                  "nodeType": "ExpressionStatement",
                  "src": "22571:27:9"
                }
              ]
            },
            "documentation": null,
            "id": 2456,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "rsplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2442,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2456,
                  "src": "22478:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2441,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "22478:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2444,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2456,
                  "src": "22497:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2443,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "22497:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22477:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2448,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2447,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2456,
                  "src": "22541:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2446,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "22541:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22540:20:9"
            },
            "scope": 2700,
            "src": "22462:143:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2514,
              "nodeType": "Block",
              "src": "22962:276:9",
              "statements": [
                {
                  "assignments": [
                    2466
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2466,
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2515,
                      "src": "22972:8:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2465,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "22972:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2480,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2468,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2458,
                            "src": "22991:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2469,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "22991:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2470,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2458,
                            "src": "23002:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2471,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1011,
                          "src": "23002:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2472,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2460,
                            "src": "23013:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2473,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "23013:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2474,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2460,
                            "src": "23026:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2475,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1011,
                          "src": "23026:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2467,
                        "name": "findPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2086,
                        "src": "22983:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 2476,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22983:55:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2477,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2460,
                        "src": "23041:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2478,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "23041:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22983:69:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22972:80:9"
                },
                {
                  "body": {
                    "id": 2512,
                    "nodeType": "Block",
                    "src": "23099:133:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "23113:5:9",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 2488,
                            "name": "cnt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2463,
                            "src": "23113:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2490,
                        "nodeType": "ExpressionStatement",
                        "src": "23113:5:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2491,
                            "name": "ptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2466,
                            "src": "23132:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2509,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2500,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2493,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2458,
                                      "src": "23146:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 2494,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1009,
                                    "src": "23146:9:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2498,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "id": 2495,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2466,
                                          "src": "23159:3:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 2496,
                                            "name": "self",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2458,
                                            "src": "23165:4:9",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                              "typeString": "struct strings.slice memory"
                                            }
                                          },
                                          "id": 2497,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "_ptr",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 1011,
                                          "src": "23165:9:9",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "23159:15:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 2499,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "23158:17:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "23146:29:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 2501,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2466,
                                  "src": "23177:3:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2502,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2460,
                                    "src": "23182:6:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                      "typeString": "struct strings.slice memory"
                                    }
                                  },
                                  "id": 2503,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1009,
                                  "src": "23182:11:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2504,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2460,
                                    "src": "23195:6:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                      "typeString": "struct strings.slice memory"
                                    }
                                  },
                                  "id": 2505,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_ptr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1011,
                                  "src": "23195:11:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2492,
                                "name": "findPtr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2086,
                                "src": "23138:7:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 2506,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23138:69:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2507,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2460,
                                "src": "23210:6:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2508,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "23210:11:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "23138:83:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23132:89:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2511,
                        "nodeType": "ExpressionStatement",
                        "src": "23132:89:9"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2481,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2466,
                      "src": "23069:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2482,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2458,
                          "src": "23076:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2483,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "23076:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2484,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2458,
                          "src": "23088:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2485,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "23088:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "23076:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23069:28:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2513,
                  "nodeType": "WhileStatement",
                  "src": "23062:170:9"
                }
              ]
            },
            "documentation": null,
            "id": 2515,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "count",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2458,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2515,
                  "src": "22889:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2457,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "22889:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2460,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2515,
                  "src": "22908:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2459,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "22908:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22888:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2463,
                  "name": "cnt",
                  "nodeType": "VariableDeclaration",
                  "scope": 2515,
                  "src": "22952:8:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2462,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "22952:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22951:10:9"
            },
            "scope": 2700,
            "src": "22874:364:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2538,
              "nodeType": "Block",
              "src": "23564:93:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2525,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2517,
                            "src": "23590:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2526,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "23590:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2527,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2517,
                            "src": "23601:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2528,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1011,
                          "src": "23601:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2529,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2519,
                            "src": "23612:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2530,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "23612:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2531,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2519,
                            "src": "23625:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2532,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1011,
                          "src": "23625:11:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2524,
                        "name": "rfindPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2203,
                        "src": "23581:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 2533,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23581:56:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2534,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2517,
                        "src": "23641:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2535,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1011,
                      "src": "23641:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23581:69:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2523,
                  "id": 2537,
                  "nodeType": "Return",
                  "src": "23574:76:9"
                }
              ]
            },
            "documentation": null,
            "id": 2539,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "contains",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2517,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2539,
                  "src": "23495:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2516,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "23495:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2519,
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2539,
                  "src": "23514:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2518,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "23514:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23494:40:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2522,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2539,
                  "src": "23558:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2521,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23558:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23557:6:9"
            },
            "scope": 2700,
            "src": "23477:180:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2584,
              "nodeType": "Block",
              "src": "24037:262:9",
              "statements": [
                {
                  "assignments": [
                    2549
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2549,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 2585,
                      "src": "24047:17:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2548,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "24047:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2558,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2556,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2552,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2541,
                            "src": "24078:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2553,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "24078:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2554,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "24090:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2555,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "24090:10:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "24078:22:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "24067:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 2550,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "24071:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 2557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24067:34:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24047:54:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2560,
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2585,
                      "src": "24111:11:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2559,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "24111:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2561,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24111:11:9"
                },
                {
                  "externalReferences": [
                    {
                      "retptr": {
                        "declaration": 2560,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "24143:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 2549,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "24157:3:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2562,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    retptr := add(ret, 32)\n}",
                  "src": "24132:50:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2564,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2560,
                        "src": "24183:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2565,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2541,
                          "src": "24191:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2566,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "24191:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2567,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2541,
                          "src": "24202:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2568,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "24202:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2563,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1052,
                      "src": "24176:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 2569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24176:36:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2570,
                  "nodeType": "ExpressionStatement",
                  "src": "24176:36:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2575,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2572,
                          "name": "retptr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2560,
                          "src": "24229:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2573,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2541,
                            "src": "24238:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2574,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1009,
                          "src": "24238:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "24229:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2576,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "24249:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2577,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1011,
                        "src": "24249:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2578,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "24261:5:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2579,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "24261:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2571,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1052,
                      "src": "24222:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 2580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24222:50:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2581,
                  "nodeType": "ExpressionStatement",
                  "src": "24222:50:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2582,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2549,
                    "src": "24289:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 2547,
                  "id": 2583,
                  "nodeType": "Return",
                  "src": "24282:10:9"
                }
              ]
            },
            "documentation": null,
            "id": 2585,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "concat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2541,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "23960:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2540,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "23960:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2543,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "23979:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2542,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "23979:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23959:39:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2547,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2546,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "24022:6:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2545,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "24022:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24021:15:9"
            },
            "scope": 2700,
            "src": "23944:355:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2698,
              "nodeType": "Block",
              "src": "24728:630:9",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2595,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2590,
                        "src": "24742:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 2596,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24742:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24758:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "24742:17:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2601,
                  "nodeType": "IfStatement",
                  "src": "24738:44:9",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "",
                      "id": 2599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24780:2:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                        "typeString": "literal_string \"\""
                      },
                      "value": ""
                    },
                    "functionReturnParameters": 2594,
                    "id": 2600,
                    "nodeType": "Return",
                    "src": "24773:9:9"
                  }
                },
                {
                  "assignments": [
                    2603
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2603,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2699,
                      "src": "24793:11:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2602,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "24793:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2612,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2604,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2587,
                        "src": "24807:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2605,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1009,
                      "src": "24807:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2606,
                              "name": "parts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2590,
                              "src": "24820:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                                "typeString": "struct strings.slice memory[] memory"
                              }
                            },
                            "id": 2607,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "24820:12:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2608,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24835:1:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "24820:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2610,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "24819:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24807:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24793:44:9"
                },
                {
                  "body": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2629,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 2624,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2603,
                        "src": "24898:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2625,
                            "name": "parts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2590,
                            "src": "24908:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                              "typeString": "struct strings.slice memory[] memory"
                            }
                          },
                          "id": 2627,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2626,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2614,
                            "src": "24914:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "24908:8:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1012_memory",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2628,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1009,
                        "src": "24908:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "24898:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2630,
                    "nodeType": "ExpressionStatement",
                    "src": "24898:23:9"
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2617,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2614,
                      "src": "24863:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2618,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2590,
                        "src": "24867:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 2619,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24867:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24863:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2631,
                  "initializationExpression": {
                    "assignments": [
                      2614
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2614,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 2699,
                        "src": "24851:6:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2613,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "24851:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 2616,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2615,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24860:1:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "24851:10:9"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2622,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "24881:3:9",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2621,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2614,
                        "src": "24881:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2623,
                    "nodeType": "ExpressionStatement",
                    "src": "24881:3:9"
                  },
                  "nodeType": "ForStatement",
                  "src": "24847:74:9"
                },
                {
                  "assignments": [
                    2633
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2633,
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 2699,
                      "src": "24932:17:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2632,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "24932:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2638,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2636,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2603,
                        "src": "24963:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "24952:10:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 2634,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "24956:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 2637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24952:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24932:38:9"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2640,
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2699,
                      "src": "24980:11:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2639,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "24980:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2641,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24980:11:9"
                },
                {
                  "externalReferences": [
                    {
                      "retptr": {
                        "declaration": 2640,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "25012:6:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 2633,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "25026:3:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2642,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    retptr := add(ret, 32)\n}",
                  "src": "25001:48:9"
                },
                {
                  "body": {
                    "id": 2694,
                    "nodeType": "Block",
                    "src": "25080:251:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2655,
                              "name": "retptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2640,
                              "src": "25101:6:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 2656,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2590,
                                  "src": "25109:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                                    "typeString": "struct strings.slice memory[] memory"
                                  }
                                },
                                "id": 2658,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 2657,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2614,
                                  "src": "25115:1:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "25109:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2659,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1011,
                              "src": "25109:13:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 2660,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2590,
                                  "src": "25124:5:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                                    "typeString": "struct strings.slice memory[] memory"
                                  }
                                },
                                "id": 2662,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 2661,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2614,
                                  "src": "25130:1:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "25124:8:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1012_memory",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2663,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1009,
                              "src": "25124:13:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2654,
                            "name": "memcpy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1052,
                            "src": "25094:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256,uint256) pure"
                            }
                          },
                          "id": 2664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25094:44:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2665,
                        "nodeType": "ExpressionStatement",
                        "src": "25094:44:9"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2666,
                            "name": "retptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2640,
                            "src": "25152:6:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2667,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2590,
                                "src": "25162:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                                  "typeString": "struct strings.slice memory[] memory"
                                }
                              },
                              "id": 2669,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2668,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2614,
                                "src": "25168:1:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "25162:8:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1012_memory",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2670,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1009,
                            "src": "25162:13:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25152:23:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2672,
                        "nodeType": "ExpressionStatement",
                        "src": "25152:23:9"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2678,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2673,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2614,
                            "src": "25193:1:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2677,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2674,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2590,
                                "src": "25197:5:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                                  "typeString": "struct strings.slice memory[] memory"
                                }
                              },
                              "id": 2675,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "25197:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 2676,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25212:1:9",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "25197:16:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25193:20:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2693,
                        "nodeType": "IfStatement",
                        "src": "25189:132:9",
                        "trueBody": {
                          "id": 2692,
                          "nodeType": "Block",
                          "src": "25215:106:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2680,
                                    "name": "retptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2640,
                                    "src": "25240:6:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2681,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2587,
                                      "src": "25248:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 2682,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_ptr",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1011,
                                    "src": "25248:9:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2683,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2587,
                                      "src": "25259:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 2684,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1009,
                                    "src": "25259:9:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2679,
                                  "name": "memcpy",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1052,
                                  "src": "25233:6:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256,uint256,uint256) pure"
                                  }
                                },
                                "id": 2685,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25233:36:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2686,
                              "nodeType": "ExpressionStatement",
                              "src": "25233:36:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2690,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2687,
                                  "name": "retptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2640,
                                  "src": "25287:6:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2688,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2587,
                                    "src": "25297:4:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                                      "typeString": "struct strings.slice memory"
                                    }
                                  },
                                  "id": 2689,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1009,
                                  "src": "25297:9:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25287:19:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2691,
                              "nodeType": "ExpressionStatement",
                              "src": "25287:19:9"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2647,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2614,
                      "src": "25057:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2648,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2590,
                        "src": "25061:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 2649,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "25061:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25057:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2695,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 2643,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2614,
                        "src": "25050:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25054:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "25050:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2646,
                    "nodeType": "ExpressionStatement",
                    "src": "25050:5:9"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "25075:3:9",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2651,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2614,
                        "src": "25075:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2653,
                    "nodeType": "ExpressionStatement",
                    "src": "25075:3:9"
                  },
                  "nodeType": "ForStatement",
                  "src": "25046:285:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2696,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2633,
                    "src": "25348:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 2594,
                  "id": 2697,
                  "nodeType": "Return",
                  "src": "25341:10:9"
                }
              ]
            },
            "documentation": null,
            "id": 2699,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "join",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2591,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2587,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2699,
                  "src": "24649:17:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1012_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2586,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1012,
                    "src": "24649:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2590,
                  "name": "parts",
                  "nodeType": "VariableDeclaration",
                  "scope": 2699,
                  "src": "24668:20:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_slice_$1012_memory_$dyn_memory_ptr",
                    "typeString": "struct strings.slice[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 2588,
                      "name": "slice",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1012,
                      "src": "24668:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1012_storage_ptr",
                        "typeString": "struct strings.slice"
                      }
                    },
                    "id": 2589,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "24668:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_slice_$1012_storage_$dyn_storage_ptr",
                      "typeString": "struct strings.slice[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24648:41:9"
            },
            "payable": false,
            "returnParameters": {
              "id": 2594,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2593,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2699,
                  "src": "24713:6:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2592,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "24713:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24712:15:9"
            },
            "scope": 2700,
            "src": "24635:723:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 2701,
        "src": "2003:23357:9"
      }
    ],
    "src": "1977:23383:9"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-10-16T05:56:33.207Z"
}