{
  "abi": [
    {
      "inputs": [],
      "name": "COIN",
      "outputs": [
        {
          "internalType": "contract MockERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "USD",
      "outputs": [
        {
          "internalType": "contract MockERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fee",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "init",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "inverted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nfpm",
      "outputs": [
        {
          "internalType": "contract INonfungiblePositionManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pool",
      "outputs": [
        {
          "internalType": "contract IUniswapV3Pool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "price",
      "outputs": [
        {
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "int24",
          "name": "lower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "upper",
          "type": "int24"
        }
      ],
      "name": "stake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "coinAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "usdAmount",
          "type": "uint256"
        },
        {
          "internalType": "int24",
          "name": "lower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "upper",
          "type": "int24"
        }
      ],
      "name": "stake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "int24",
          "name": "width",
          "type": "int24"
        }
      ],
      "name": "stake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract MockERC20",
          "name": "inToken",
          "type": "address"
        },
        {
          "internalType": "contract MockERC20",
          "name": "outToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint160",
          "name": "sqrtPriceLimitX96",
          "type": "uint160"
        }
      ],
      "name": "swap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract MockERC20",
          "name": "inToken",
          "type": "address"
        },
        {
          "internalType": "contract MockERC20",
          "name": "outToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "name": "swap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint160",
          "name": "sqrtPriceLimitX96",
          "type": "uint160"
        }
      ],
      "name": "swapToPrice",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "swapper",
      "outputs": [
        {
          "internalType": "contract ISwapRouter",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token0",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token1",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "[encoded data, 10786 characters]$74cfa661df799b6cc5f12f5b8f602e3b0f$__906397fd6da790620014d3908a9085906004016200226b565b602060405180830381865af4158015620014f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200151791906200223d565b6040517f97fd6da700000000000000000000000000000000000000000000000000000000815290975073__$74cfa661df799b6cc5f12f5b8f602e3b0f$[encoded data, 16994 characters]",
    "sourceMap": "588:6124:63:-:0;;;612:87;;;-1:-1:-1;;;;;;612:87:63;;;644:42:50;612:87:63;;;;;705:58;;;;;765:42:50;705:58:63;;;588:6124;;;;;;;;;;;;;;;;",
    "linkReferences": {
      "src/Util.sol": {
        "Util": [
          {
            "start": 5391,
            "length": 20
          },
          {
            "start": 5546,
            "length": 20
          }
        ]
      }
    }
  },
  "deployedBytecode": {
    "object": "[encoded data, 10578 characters]$74cfa661df799b6cc5f12f5b8f602e3b0f$__906397fd6da790620014d3908a9085906004016200226b565b602060405180830381865af4158015620014f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200151791906200223d565b6040517f97fd6da700000000000000000000000000000000000000000000000000000000815290975073__$74cfa661df799b6cc5f12f5b8f602e3b0f$[encoded data, 16994 characters]",
    "sourceMap": "588:6124:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;877:21;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;769:26;;;;;;;;;;;;;;;;:::i;851:20::-;;;;;;;;;705:58;;;;;;;;;5079:824;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2667:221::-;;;;;;:::i;:::-;;:::i;:::-;;988:20;;;;;;;;;;;;;;;;;;;:::i;612:87::-;;;;;;;;;5909:112;;;:::i;:::-;;;;;;;:::i;824:21::-;;;;;;;;;6027:683;;;;;;:::i;:::-;;:::i;961:21::-;;;;;;;;;2895:279;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;801:17::-;;;;;;;;;;;;;;;;;;;:::i;4784:289::-;;;;;;:::i;:::-;;:::i;1349:1125::-;;;:::i;2481:179::-;;;;;;:::i;:::-;;:::i;5079:824::-;5246:7;;5222:43;;;;;5193:17;;5222:15;;;;;;;:43;;5246:7;;5256:8;;5222:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5688:159:63;;;;;;;;;;;;;;;;;;;;;5773:3;;;;;;;5688:159;;;;5778:10;5688:159;;;;5790:15;5688:159;;;;;;;;;;-1:-1:-1;5688:159:63;;;;;;;;;;;5864:7;;:32;;;;;5688:159;;5864:7;;:24;;:32;;5688:159;;5864:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5857:39;5079:824;-1:-1:-1;;;;;;5079:824:63:o;2667:221::-;2741:18;2780:1;2762:15;:6;2771;2762:15;:::i;:::-;:19;;;;:::i;:::-;2741:40;-1:-1:-1;2791:17:63;2828:1;2811:14;:6;2820:5;2811:14;:::i;:::-;:18;;;;:::i;:::-;2791:38;;2839:42;2845:10;2857:9;2868:5;2875;2839;:42::i;:::-;;;;;2731:157;;2667:221;;;:::o;5909:112::-;6002:4;;:12;;;;;;;;5947:20;;6002:4;;;:10;;:12;;;;;;;;;;;;;;:4;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5979:35:63;;5909:112;-1:-1:-1;;;;;;5909:112:63:o;6027:683::-;6092:27;;;;;;;;;;;;;;;;;;:12;:27::i;:::-;6129:31;6142:17;6129:31;;:12;:31::i;:::-;6170:16;6189:7;:5;:7::i;:::-;6170:26;;6206:22;6219:8;6206:22;;:12;:22::i;:::-;6254:17;6242:29;;:8;:29;;;6238:55;;6286:7;6027:683;:::o;6238:55::-;6302:17;6333;6322:28;;:8;:28;;;:68;;6383:6;;;;6322:68;;;6363:6;;;;6322:68;6302:88;;6400:18;6432:17;6421:28;;:8;:28;;;:68;;6482:6;;;;6421:68;;;6462:6;;;;6421:68;6612:33;;;;;6400:89;;-1:-1:-1;6596:6:63;;6612:12;;;;;;:33;;6633:4;;6596:6;;6612:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6655:48;6660:7;6669:8;6679:4;6685:17;6655:4;:48::i;:::-;;6082:628;;;;6027:683;:::o;2895:279::-;3004:15;3029:17;3056:15;3081;3124:43;3131:10;3143:9;3154:5;3161;3124:6;:43::i;:::-;3117:50;;;;-1:-1:-1;3117:50:63;-1:-1:-1;3117:50:63;;-1:-1:-1;2895:279:63;-1:-1:-1;;;;;2895:279:63:o;4784:289::-;4871:17;4900:13;4936:4;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4916:33;;4924:7;4916:33;;;:93;;4982:27;5008:1;997:49:38;4982:27:63;:::i;:::-;4916:93;;;4952:27;817:10:38;4978:1:63;4952:27;:::i;:::-;4900:109;;5026:40;5031:7;5040:8;5050;5060:5;5026:4;:40::i;:::-;5019:47;;;4784:289;;;;;;:::o;1349:1125::-;1436:2;1389:50;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1382:4:63;:57;;;;;;;;;;;;;;;1449:19;;;;;;;;;;;;;;;;;;;:12;:19::i;:::-;1499:4;;1478:27;;1499:4;;1478:12;:27::i;:::-;1563:1;1521:44;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1515:3:63;:50;;;;;;;;;;;;;;;1575:20;;;;;;;;;;;;;;;;;;;:12;:20::i;:::-;1626:3;;1605:26;;1626:3;;1605:12;:26::i;:::-;1641:3;:9;;;;;;;;1695:3;;1679:4;;1660:8;:39;;;;1641:9;1695:3;;;;1679:4;;;;1671:28;;;;1660:39;;;;;;;;;;;1718:8;;;:39;;1752:4;;;;1718:39;;;1737:3;;;;1718:39;1709:6;:48;;;;;;;;;;;;;;;1776:8;;;;;;;:39;;1811:3;;;;1776:39;;;1795:4;;;;1776:39;1767:6;:48;;;;;;;;;;;;;;;;;-1:-1:-1;;1848:8:63;;;;;:90;;1914:23;1848:90;;;1867:35;1848:90;1825:113;;1957:99;;;;;;;;;;;;;;;;;;:12;:99::i;:::-;2188:4;;2228:6;;2236;;2244:3;;2188:74;;;;;:4;;;;;:39;;:74;;2228:6;;;;2236;;;2244:3;;;;;;;2249:12;;2188:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2166:4;:97;;;;;;;;;;;;;;;2273:23;;;;;;;;;;;;;;;;;;;:12;:23::i;:::-;2327:4;;2306:27;;2327:4;;2306:12;:27::i;:::-;2412:55;2418:10;477:7:38;637:9;477:7;637:9;:::i;2412:55:63:-;1372:1102;1349:1125::o;2481:179::-;2556:1;2550:5;:7;;;2542:16;;;;;;2594:4;;:12;;;;;;;;2571:10;;2594:4;;;:10;;:12;;;;;;;;;;;;;;:4;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2568:38;;;;;;;;2616:37;2622:6;2635:5;2630:4;:10;;;;:::i;:::-;2642;2647:5;2642:4;:10;:::i;2616:37::-;2532:128;2481:179;;:::o;6598:121:16:-;6653:59;6708:2;6669:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6653:15;:59::i;6356:116::-;6405:60;6461:2;6421:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6405:15;:60::i;3180:1597:63:-;3516:4;;:36;;;;;3291:15;;;;;;;;3516:4;;;;;:9;;:36;;3534:4;;3541:10;;3516:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3562:4:63;;;3583;3562:39;;;;;:4;;;;;-1:-1:-1;3562:12:63;;-1:-1:-1;3562:39:63;;3583:4;;;;3590:10;;3562:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3650:3:63;;;:34;;;;;:3;;;;;:8;;:34;;3667:4;;3674:9;;3650:34;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3694:3:63;;;;3714:4;3694:37;;;;;:3;;;;;-1:-1:-1;3694:11:63;;-1:-1:-1;3694:37:63;;3714:4;;;;;3721:9;;3694:37;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4240:4:63;;:18;;;;;;;;4229:8;;4240:4;;;:16;;:18;;;;;;;;;;;;;;:4;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4276:25;;;;;4229:29;;-1:-1:-1;4276:4:63;;:14;;:25;;4291:5;;4229:29;;4276:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4319;;;;;4268:33;;-1:-1:-1;4319:4:63;;:14;;:25;;4334:5;;4341:2;;4319:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4409:166;;;;;;;;4469:4;;;;;;4409:166;;4484:3;;;;;4409:166;;;;4490:3;;;;;;;;4409:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4409:166:63;;;;;;4469:4;4409:166;;;;;4538:10;4409:166;;;;4550:15;4409:166;;;;4626:4;:17;;;;;4409:166;;-1:-1:-1;4409:166:63;;4626:4;;;:9;;:17;;4409:166;;4626:17;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4653:22;;;;;;;;;;;;;;;;;4585:58;;-1:-1:-1;4585:58:63;;-1:-1:-1;4585:58:63;-1:-1:-1;4585:58:63;-1:-1:-1;4653:22:63;;:12;:22::i;:::-;4685:23;4698:9;4685:23;;:12;:23::i;:::-;4718:21;4731:7;4718:12;:21::i;:::-;4749;4762:7;4749:12;:21::i;:::-;3394:1383;;3180:1597;;;;;;;;;:::o;6841:116:16:-;6890:60;6946:2;6906:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;868:133;939:55;986:7;1105:14;;591:42;1278:2;1265:16;;1081:21;;1105:14;1265:16;591:42;1314:5;1303:68;1294:77;;1231:150;;1007:380;:::o;-1:-1:-1:-;;;;;;;;:::o;147:96:69:-;182:7;93:42;82:54;;215:22;204:33;147:96;-1:-1:-1;;147:96:69:o;248:95::-;314:22;330:5;314:22;:::i;:::-;309:3;302:35;;;248:95::o;348:189::-;482:2;467:18;;494:37;471:9;513:6;494:37;:::i;599:138::-;645:9;93:42;82:54;;682:49;14:128;742:122;788:9;825:33;852:5;825:33;:::i;869:138::-;931:9;968:33;995:5;968:33;:::i;1012:138::-;1094:49;1137:5;1094:49;:::i;1155:229::-;1313:2;1298:18;;1325:53;1302:9;1360:6;1325:53;:::i;2503:107::-;2549:7;2582:22;2598:5;2582:22;:::i;2615:144::-;2701:33;2728:5;2701:33;:::i;:::-;2694:5;2691:44;2681:72;;2749:1;2746;2739:12;2764:194;2854:20;;;2908:44;2854:20;2908:44;:::i;:::-;;2764:194;;;;:::o;3035:122::-;3126:5;3110:22;542:52;3162:172;3241:20;;;3295:33;3241:20;3295:33;:::i;3339:122::-;93:42;82:54;;3414:22;14:128;3466:172;3545:20;;;3599:33;3545:20;3599:33;:::i;3643:600::-;3767:6;3775;3783;3791;3844:3;3832:9;3823:7;3819:23;3815:33;3812:148;;;3871:79;588:6124:63;;;3871:79:69;3979:49;4020:7;4009:9;3979:49;:::i;:::-;3969:59;;4047:58;4097:7;4092:2;4081:9;4077:18;4047:58;:::i;:::-;4037:68;;4124:47;4163:7;4158:2;4147:9;4143:18;4124:47;:::i;:::-;4114:57;;4190:47;4229:7;4224:2;4213:9;4209:18;4190:47;:::i;:::-;4180:57;;3643:600;;;;;;;:::o;4248:106::-;4341:5;4325:22;542:52;4359:200;4493:2;4478:18;;4505:48;4482:9;4535:6;4505:48;:::i;4661:118::-;4734:20;4748:5;4641:1;4630:20;;4564:92;4784:168;4861:20;;;4915:31;4861:20;4915:31;:::i;4957:448::-;5030:6;5038;5046;5099:2;5087:9;5078:7;5074:23;5070:32;5067:147;;;5125:79;588:6124:63;;;5125:79:69;5233:38;5263:7;5252:9;5233:38;:::i;:::-;5223:48;;5290:45;5327:7;5322:2;5311:9;5307:18;5290:45;:::i;:::-;5280:55;;5354:45;5391:7;5386:2;5375:9;5371:18;5354:45;:::i;:::-;5344:55;;4957:448;;;;;:::o;5507:89::-;5482:13;;5475:21;5570:19;5410:92;5601:180;5729:2;5714:18;;5741:34;5718:9;5757:6;5741:34;:::i;6371:106::-;93:42;82:54;;6448:22;14:128;6482:200;6616:2;6601:18;;6628:48;6605:9;6658:6;6628:48;:::i;6687:290::-;6746:6;6799:2;6787:9;6778:7;6774:23;6770:32;6767:147;;;6825:79;588:6124:63;;;6825:79:69;6933:38;6963:7;6952:9;6933:38;:::i;6982:532::-;7064:6;7072;7080;7088;7141:3;7129:9;7120:7;7116:23;7112:33;7109:148;;;7168:79;588:6124:63;;;7168:79:69;7276:38;7306:7;7295:9;7276:38;:::i;:::-;7266:48;;7333:47;7372:7;7367:2;7356:9;7352:18;7333:47;:::i;:::-;7323:57;;7399:45;7436:7;7431:2;7420:9;7416:18;7399:45;:::i;:::-;7389:55;;7463:45;7500:7;7495:2;7484:9;7480:18;7463:45;:::i;7644:95::-;7598:34;7587:46;;7710:22;7519:120;7744:472;7962:3;7947:19;;7975:48;7951:9;8005:6;7975:48;:::i;:::-;8032:46;8074:2;8063:9;8059:18;8051:6;8032:46;:::i;:::-;8087:57;8140:2;8129:9;8125:18;8117:6;8087:57;:::i;:::-;8153;8206:2;8195:9;8191:18;8183:6;8153:57;:::i;:::-;7744:472;;;;;;;:::o;8319:93::-;8299:8;8288:20;;8384:21;8221:93;8417:186;8549:2;8534:18;;8561:36;8538:9;8579:6;8561:36;:::i;8608:516::-;8723:6;8731;8739;8792:2;8780:9;8771:7;8767:23;8763:32;8760:147;;;8818:79;588:6124:63;;;8818:79:69;8926:49;8967:7;8956:9;8926:49;:::i;:::-;8916:59;;8994:58;9044:7;9039:2;9028:9;9024:18;8994:58;:::i;:::-;8984:68;;9071:47;9110:7;9105:2;9094:9;9090:18;9071:47;:::i;9129:369::-;9195:6;9203;9256:2;9244:9;9235:7;9231:23;9227:32;9224:147;;;9282:79;588:6124:63;;;9282:79:69;9390:38;9420:7;9409:9;9390:38;:::i;:::-;9380:48;;9447:45;9484:7;9479:2;9468:9;9464:18;9447:45;:::i;:::-;9437:55;;9129:369;;;;;:::o;9503:283::-;9665:2;9650:18;;9677:37;9654:9;9696:6;9677:37;:::i;:::-;9723:57;9776:2;9765:9;9761:18;9753:6;9723:57;:::i;9791:116::-;5482:13;;5475:21;9863:19;5410:92;9912:170;9999:13;;;10046:30;9999:13;10046:30;:::i;10087:306::-;10154:6;10207:2;10195:9;10186:7;10182:23;10178:32;10175:147;;;10233:79;588:6124:63;;;10233:79:69;10341:46;10379:7;10368:9;10341:46;:::i;10817:948::-;10893:48;10937:3;10929:5;10923:12;10893:48;:::i;:::-;10987:4;10980:5;10976:16;10970:23;11002:59;11055:4;11050:3;11046:14;11032:12;11002:59;:::i;:::-;;11109:4;11102:5;11098:16;11092:23;11124:59;11177:4;11172:3;11168:14;11152;11124:59;:::i;:::-;;11231:4;11224:5;11220:16;11214:23;11246:61;11301:4;11296:3;11292:14;11276;11246:61;:::i;:::-;;11355:4;11348:5;11344:16;11338:23;11370:50;11414:4;11409:3;11405:14;11389;11370:50;:::i;:::-;;11468:4;11461:5;11457:16;11451:23;11483:50;11527:4;11522:3;11518:14;11502;11483:50;:::i;:::-;;11581:4;11574:5;11570:16;11564:23;11596:50;11640:4;11635:3;11631:14;11615;11596:50;:::i;:::-;;11694:4;11687:5;11683:16;11677:23;11709:50;11753:4;11748:3;11744:14;11728;11709:50;:::i;11770:294::-;11986:3;11971:19;;11999:59;11975:9;12040:6;11999:59;:::i;12069:176::-;12159:13;;;12206:33;12159:13;12206:33;:::i;12250:312::-;12320:6;12373:2;12361:9;12352:7;12348:23;12344:32;12341:147;;;12399:79;588:6124:63;;;12399:79:69;12507:49;12548:7;12537:9;12507:49;:::i;12567:184::-;12619:77;12616:1;12609:88;12716:4;12713:1;12706:15;12740:4;12737:1;12730:15;12756:308;12927:13;;;12845:1;12883;12927:13;12992:11;;13013:19;;;13005:28;;12989:45;12979:79;;13038:18;;:::i;:::-;12979:79;;;12756:308;;;;:::o;13069:184::-;13121:77;13118:1;13111:88;13218:4;13215:1;13208:15;13242:4;13239:1;13232:15;13258:202;13298:1;13341;13379;13400:3;13390:37;;13407:18;;:::i;:::-;13441:13;;;13258:202;-1:-1:-1;;;13258:202:69:o;13465:176::-;13555:13;;;13602:33;13555:13;13602:33;:::i;13646:172::-;13734:13;;;13781:31;13734:13;13781:31;:::i;13907:120::-;13893:6;13882:18;;13981:21;13823:79;14032:174;14121:13;;;14168:32;14121:13;14168:32;:::i;14292:118::-;14280:4;14269:16;;14365:20;14211:76;14415:172;14503:13;;;14550:31;14503:13;14550:31;:::i;14592:860::-;14706:6;14714;14722;14730;14738;14746;14754;14807:3;14795:9;14786:7;14782:23;14778:33;14775:148;;;14834:79;588:6124:63;;;14834:79:69;14942:49;14983:7;14972:9;14942:49;:::i;:::-;14932:59;;15010:56;15058:7;15053:2;15042:9;15038:18;15010:56;:::i;:::-;15000:66;;15085:57;15134:7;15129:2;15118:9;15114:18;15085:57;:::i;:::-;15075:67;;15161:57;15210:7;15205:2;15194:9;15190:18;15161:57;:::i;:::-;15151:67;;15237:58;15287:7;15281:3;15270:9;15266:19;15237:58;:::i;:::-;15227:68;;15314:57;15363:7;15357:3;15346:9;15342:19;15314:57;:::i;:::-;15304:67;;15390:56;15438:7;15432:3;15421:9;15417:19;15390:56;:::i;:::-;15380:66;;14592:860;;;;;;;;;;:::o;15457:122::-;15532:22;15548:5;15532:22;:::i;15584:176::-;15674:13;;;15721:33;15674:13;15721:33;:::i;15765:312::-;15835:6;15888:2;15876:9;15867:7;15863:23;15859:32;15856:147;;;15914:79;588:6124:63;;;15914:79:69;16022:49;16063:7;16052:9;16022:49;:::i;16082:257::-;93:42;82:54;;;;;;16193:28;;;;16256:54;;16253:80;;;16313:18;;:::i;16344:252::-;93:42;82:54;;;;;;16453:28;;;;16514:53;;16511:79;;;16570:18;;:::i;16927:262::-;17046:2;16688:19;;16974:3;16740:4;16731:14;;16891:24;16876:40;;17058:95;17180:2;17169:14;;16927:262;-1:-1:-1;;16927:262:69:o;17334:261::-;17453:1;16688:19;;17381:3;16740:4;16731:14;;17321:5;17306:21;;17464:95;17194:135;17676:146;17728:9;14280:4;14269:16;;17765:51;14211:76;17827:125;17906:39;17939:5;17906:39;:::i;17957:600::-;18295:2;18284:9;18277:21;18258:4;18321:49;18366:2;18355:9;18351:18;18321:49;:::i;:::-;18418:9;18410:6;18406:22;18401:2;18390:9;18386:18;18379:50;18446:37;18476:6;18446:37;:::i;:::-;18438:45;;;18492:59;18547:2;18536:9;18532:18;18524:6;18492:59;:::i;18727:262::-;18846:2;16688:19;;18774:3;16740:4;16731:14;;18697:18;18682:34;;18858:95;18562:160;19135:261;19254:1;16688:19;;19182:3;16740:4;16731:14;;19121:6;19106:22;;19265:95;18994:136;19745:590;20082:2;20071:9;20064:21;20045:4;20108:49;20153:2;20142:9;20138:18;20108:49;:::i;:::-;20205:9;20197:6;20193:22;20188:2;20177:9;20173:18;20166:50;20233:37;20263:6;20233:37;:::i;20340:447::-;20556:3;20541:19;;20569:37;20545:9;20588:6;20569:37;:::i;:::-;20615:46;20657:2;20646:9;20642:18;20634:6;20615:46;:::i;:::-;20670:45;20711:2;20700:9;20696:18;20688:6;20670:45;:::i;:::-;20724:57;20777:2;20766:9;20762:18;20754:6;20724:57;:::i;20792:238::-;20826:3;20859:20;20873:5;4641:1;4630:20;;4564:92;20859:20;20903:66;20894:7;20891:79;20888:105;;20973:18;;:::i;:::-;21013:1;21009:15;;20792:238;-1:-1:-1;;20792:238:69:o;21035:303::-;21073:4;21103:16;21117:1;4641;4630:20;;4564:92;21103:16;21151;21165:1;4641;4630:20;;4564:92;21151:16;21142:26;;;-1:-1:-1;21142:26:69;21218:66;21206:79;;21299:8;21287:21;;21203:106;21200:132;;;21312:18;;:::i;21343:297::-;21381:3;21410:16;21424:1;4641;4630:20;;4564:92;21410:16;21457;21471:1;4641;4630:20;;4564:92;21457:16;21448:26;;-1:-1:-1;21448:26:69;21521:8;21510:20;;21543:66;21532:78;;21507:104;21504:130;;;21614:18;;:::i;21726:250::-;21811:1;21821:113;21835:6;21832:1;21829:13;21821:113;;;21911:11;;;21905:18;21892:11;;;21885:39;21857:2;21850:10;21821:113;;;-1:-1:-1;;21968:1:69;21950:16;;21943:27;21726:250::o;22148:306::-;22190:3;22222:26;22242:5;21707:12;;21645:76;22222:26;16688:19;;;16740:4;16731:14;;22327:67;22387:6;22380:5;22373:4;22366:5;22362:16;22327:67;:::i;:::-;22070:66;22065:2;22054:14;;22050:87;22410:38;;22148:306;-1:-1:-1;;;;22148:306:69:o;22459:220::-;22608:2;22597:9;22590:21;22571:4;22628:45;22669:2;22658:9;22654:18;22646:6;22628:45;:::i;22684:308::-;22752:6;22805:2;22793:9;22784:7;22780:23;22776:32;22773:147;;;22831:79;588:6124:63;;;22831:79:69;22939:47;22978:7;22967:9;22939:47;:::i;22997:91::-;23061:20;23075:5;4641:1;4630:20;;4564:92;23093:268;23255:2;23240:18;;23267:35;23244:9;23284:6;23267:35;:::i;:::-;23311:44;23351:2;23340:9;23336:18;23328:6;23311:44;:::i;23471:1301::-;23535:48;23579:3;23571:5;23565:12;23535:48;:::i;:::-;23629:4;23622:5;23618:16;23612:23;23644:59;23697:4;23692:3;23688:14;23674:12;23644:59;:::i;:::-;;23751:4;23744:5;23740:16;23734:23;23766:59;23819:4;23814:3;23810:14;23794;23766:59;:::i;:::-;;23873:4;23866:5;23862:16;23856:23;23888:57;23939:4;23934:3;23930:14;23914;23888:57;:::i;:::-;;23993:4;23986:5;23982:16;23976:23;24008:57;24059:4;24054:3;24050:14;24034;24008:57;:::i;:::-;;24113:4;24106:5;24102:16;24096:23;24128:50;24172:4;24167:3;24163:14;24147;24128:50;:::i;:::-;;24226:4;24219:5;24215:16;24209:23;24241:50;24285:4;24280:3;24276:14;24260;24241:50;:::i;:::-;;24339:4;24332:5;24328:16;24322:23;24354:50;24398:4;24393:3;24389:14;24373;24354:50;:::i;:::-;;24452:6;24445:5;24441:18;24435:25;24469:52;24513:6;24508:3;24504:16;24488:14;24469:52;:::i;:::-;;24569:6;24562:5;24558:18;24552:25;24586:63;24641:6;24636:3;24632:16;24616:14;24586:63;:::i;:::-;;24697:6;24690:5;24686:18;24680:25;24714:52;24758:6;24753:3;24749:16;24733:14;24714:52;:::i;24777:258::-;24969:3;24954:19;;24982:47;24958:9;25011:6;24982:47;:::i;25040:122::-;7598:34;7587:46;;25115:22;7519:120;25167:176;25257:13;;;25304:33;25257:13;25304:33;:::i;25348:595::-;25445:6;25453;25461;25469;25522:3;25510:9;25501:7;25497:23;25493:33;25490:148;;;25549:79;588:6124:63;;;25549:79:69;25657:49;25698:7;25687:9;25657:49;:::i;:::-;25647:59;;25725:58;25775:7;25770:2;25759:9;25755:18;25725:58;:::i;:::-;25715:68;;25802:58;25852:7;25847:2;25836:9;25832:18;25802:58;:::i;:::-;25792:68;;25879:58;25929:7;25924:2;25913:9;25909:18;25879:58;:::i",
    "linkReferences": {
      "src/Util.sol": {
        "Util": [
          {
            "start": 5287,
            "length": 20
          },
          {
            "start": 5442,
            "length": 20
          }
        ]
      }
    }
  },
  "methodIdentifiers": {
    "COIN()": "a54a72b7",
    "USD()": "1bf6c21b",
    "fee()": "ddca3f43",
    "init()": "e1c7392a",
    "inverted()": "67e368fc",
    "nfpm()": "7303e913",
    "pool()": "16f0115b",
    "price()": "a035b1fe",
    "stake(uint256,int24)": "e3baf41a",
    "stake(uint256,int24,int24)": "53486e2f",
    "stake(uint256,uint256,int24,int24)": "d6f13002",
    "swap(address,address,uint256)": "df791e50",
    "swap(address,address,uint256,uint160)": "4a09d3dd",
    "swapToPrice(uint160)": "c578d91d",
    "swapper()": "2b3297f9",
    "token0()": "0dfe1681",
    "token1()": "d21220a7"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"COIN\",\"outputs\":[{\"internalType\":\"contract MockERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USD\",\"outputs\":[{\"internalType\":\"contract MockERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inverted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nfpm\",\"outputs\":[{\"internalType\":\"contract INonfungiblePositionManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pool\",\"outputs\":[{\"internalType\":\"contract IUniswapV3Pool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"price\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"int24\",\"name\":\"lower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"upper\",\"type\":\"int24\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"coinAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"usdAmount\",\"type\":\"uint256\"},{\"internalType\":\"int24\",\"name\":\"lower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"upper\",\"type\":\"int24\"}],\"name\":\"stake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"int24\",\"name\":\"width\",\"type\":\"int24\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract MockERC20\",\"name\":\"inToken\",\"type\":\"address\"},{\"internalType\":\"contract MockERC20\",\"name\":\"outToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract MockERC20\",\"name\":\"inToken\",\"type\":\"address\"},{\"internalType\":\"contract MockERC20\",\"name\":\"outToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"name\":\"swapToPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"swapper\",\"outputs\":[{\"internalType\":\"contract ISwapRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/MockEnv.sol\":\"MockEnv\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoD[xarrscLMcCTU]uljmul:fDnTOcmu\",\"stackAllocation\":true}},\"runs\":999999999},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@uniswap/v3-core/=lib_uniswap/v3-core/\",\":@uniswap/v3-periphery/=lib_uniswap/v3-periphery/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":v3-core/=lib_uniswap/v3-core/\",\":v3-periphery/libraries/=lib_uniswap/v3-periphery/contracts/libraries/\"]},\"sources\":{\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x4ffc0547c02ad22925310c585c0f166f8759e2648a09e9b489100c42f15dd98d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15f52f51413a9de1ff191e2f6367c62178e1df7806d7880fe857a98b0b66253d\",\"dweb:/ipfs/QmaQG1fwfgUt5E9nu2cccFiV47B2V78MM1tCy1qB7n4MsH\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26fef835622b46a5ba08b3ef6b46a22e94b5f285d0f0fb66b703bd30217d2c34\",\"dweb:/ipfs/QmZ548qdwfL1qF7aXz3xh1GCdTiST81kGGuKRqVUfYmPZR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"lib_uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol\":{\"keccak256\":\"0xcc3d0c93fc9ac0febbe09f941b465b57f750bcf3b48432da0b97dc289cfdc489\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b9379ad954680c44a0bc523b314ae4c4da735f9fe1d02aa56ea5bdba6f1136f2\",\"dweb:/ipfs/QmZXdgQNXKAckrXWz9R3mc47F1fvDvr28a2ewJrwNAw71B\"]},\"lib_uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"keccak256\":\"0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1c42b9e6f5902ac38dd43e25750939baa7e0c1425dc75afd717c4412731065d5\",\"dweb:/ipfs/QmWaoacnzsucTvBME2o7YgZBZMhaHv7fkj83htHMVWJKWh\"]},\"lib_uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol\":{\"keccak256\":\"0x3f485fb1a44e8fbeadefb5da07d66edab3cfe809f0ac4074b1e54e3eb3c4cf69\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://095ce0626b41318c772b3ebf19d548282607f6a8f3d6c41c13edfbd5370c8652\",\"dweb:/ipfs/QmVDZfJJ89UUCE1hMyzqpkZAtQ8jUsBgZNE5AMRG7RzRFS\"]},\"lib_uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5\",\"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ\"]},\"lib_uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7\",\"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c\"]},\"lib_uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03\",\"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39\"]},\"lib_uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047\",\"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3\"]},\"lib_uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735\",\"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u\"]},\"lib_uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://ed63907c38ff36b0e22bc9ffc53e791ea74f0d4f0e7c257fdfb5aaf8825b1f0f\",\"dweb:/ipfs/QmSQrckghEjs6HVsA5GVgpNpZWvTXMY5eQLF7cN6deFeEg\"]},\"lib_uniswap/v3-core/contracts/libraries/FixedPoint96.sol\":{\"keccak256\":\"0x0ba8a9b95a956a4050749c0158e928398c447c91469682ca8a7cc7e77a7fe032\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://186d3b528866065a5856f96d2aeec698efa99f8da913e9adf34f8cc296cc993d\",\"dweb:/ipfs/QmUAiMvtAQp8c9dy57bqJYzG7hkb1uChiPaQmt264skoqP\"]},\"lib_uniswap/v3-core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0x77608bce1ddeb28ed9963b554b55e8a083277eda7be31e2c7255ef532cc408be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fcb307cf783b612ab9abd339296391d202974e7aa158deff23d9fb3aaac832d\",\"dweb:/ipfs/QmXhcwQajcGZADQtVoQpSWYNY4tB3Y42GPPyiaW62M5JH2\"]},\"lib_uniswap/v3-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0x350d6743e4d8ff3b7f3bcc569919b22dd13e46918a7994d29d7cb5c60080ee4d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://513f138148bd8b28edb0625d27c593b09155a1f71cc3c081659d448d079ca8d3\",\"dweb:/ipfs/QmRhWsD9JhoKLVT9ShUkDC2kYcNneDKXbt3NTHEpDkRZ2G\"]},\"lib_uniswap/v3-periphery/contracts/interfaces/IERC721Permit.sol\":{\"keccak256\":\"0x9e3c2a4ee65ddf95b2dfcb0815784eea3a295707e6f8b83e4c4f0f8fe2e3a1d4\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://bfd939085b3618101b955f87c7fabf38338ba1aad480295acb8102ebc5d72471\",\"dweb:/ipfs/QmauQD8bGDHTztmTDfaKXjzM7Wacrq2XU7VcTbwn1WrDBL\"]},\"lib_uniswap/v3-periphery/contracts/interfaces/INonfungiblePositionManager.sol\":{\"keccak256\":\"0x3357b065654abb7f4a9ebd184a260bc39efde2afa4e99dca2e72ffc28e9c2984\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f7682dab014724be8e0a5a401b047788ff9c70b77fa5bd567ea6adc333cb3b56\",\"dweb:/ipfs/QmatH1Gc6z3AkP4dHjAEBKfCBbgBfD4vCceF4TuZU2bCyW\"]},\"lib_uniswap/v3-periphery/contracts/interfaces/IPeripheryImmutableState.sol\":{\"keccak256\":\"0x7affcfeb5127c0925a71d6a65345e117c33537523aeca7bc98085ead8452519d\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e16b291294210e71cb0f20cd0afe62ae2dc6878d627f5ccc19c4dc9cd80aec3f\",\"dweb:/ipfs/QmQGitSyBr26nour81BZmpmDMyJpvZRqHQZvnCD1Acb127\"]},\"lib_uniswap/v3-periphery/contracts/interfaces/IPeripheryPayments.sol\":{\"keccak256\":\"0xb547e10f1e69bed03621a62b73a503e260643066c6b4054867a4d1fef47eb274\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://f9a90f58f5fd5fb42f7811f4094113b532f307b14a73764c91f977590747f407\",\"dweb:/ipfs/QmSeNH2mfiDMKf3Q6V2sqtNxx1s72JNuA1VVxRM9HoMqYp\"]},\"lib_uniswap/v3-periphery/contracts/interfaces/IPoolInitializer.sol\":{\"keccak256\":\"0x9d7695e8d94c22cc5fcced602017aabb988de89981ea7bee29ea629d5328a862\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://61b50933026ee1017db2a6273af8cedc3238c95dca58880db0918dbdbb2f064f\",\"dweb:/ipfs/QmUebR26pqG25d18aBELKz8aFFKkmHa8PxntzXTA7o9Ldu\"]},\"lib_uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol\":{\"keccak256\":\"0x9bfaf1feb32814623e627ab70f2409760b15d95f1f9b058e2b3399a8bb732975\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://a8a2c3e55965b61bcd91993d8e1d5d34b8b8a63e0fdfce87a85f6af92526fd53\",\"dweb:/ipfs/QmQj2CSCSwqDSU4KMNWxGsN2336Cy64WgpV1X1EHXNZWxM\"]},\"lib_uniswap/v3-periphery/contracts/libraries/LiquidityAmounts.sol\":{\"keccak256\":\"0xf149581d28e1c81736dfe72be73ee1301d4945340cc6282fcdd63fe3c85abf24\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0b67f375180bb62fe6753601cd09740496dcdcec4c0a4f9eaa6e94c5e1bb6844\",\"dweb:/ipfs/QmWYwkmqynRq7g81Nijg4eEkPgSRGnegDrbbEKkkTC1k2w\"]},\"lib_uniswap/v3-periphery/contracts/libraries/PoolAddress.sol\":{\"keccak256\":\"0x0a107d09991fd2dc9a3ca13bf0745f0b6f6f6ffea3e55ad3677ecdbadef089b4\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e179110a9ec825b7f15384a9c61f90261fe6227b289dac9996b0ed9cf1655b48\",\"dweb:/ipfs/Qma2amC8zJSW2PzPCk1nBYiFd4mjZiAW9z4kxjoYZPCtRr\"]},\"src/Constants.sol\":{\"keccak256\":\"0x41bf66b69d0d8c9c32c43fd3af5396d1288ac512fd5c6c14e06dbb06a06adf3f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://283443c74eef1b4ff300c1465a46877957188c3f65ed71aea60bd11362938418\",\"dweb:/ipfs/QmQPn2nrbKVei7HUooGXy7msfoXNT8E2yVkT1kZAC9T3ds\"]},\"src/MockERC20.sol\":{\"keccak256\":\"0x0b7b50cebfa9265beaa40b0df4c94f25b6834fc6854addf5bba878eb65164089\",\"urls\":[\"bzz-raw://d67d08b0e0fd1ab66bd98341eb93a4850a9f2200bc5ab53d996508fb7c330db4\",\"dweb:/ipfs/QmbNCZyArZvRYTQeXcXJAFytnjuZse8dthoExDZSTwYpAK\"]},\"src/Util.sol\":{\"keccak256\":\"0xbf0a5fb064064aa53474e43777176662a9f09fdb61b823b87705bd0c6d1909ad\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6dbdd417018821ed9cc564f5d64e92b5efaf067cdc559e7f1dd7bff2afa07a80\",\"dweb:/ipfs/QmPQTGJbnrV4PSCCXNbBQKZ3enF5r7Wv115ivoHFCjVCJr\"]},\"test/MockEnv.sol\":{\"keccak256\":\"0x0f80e0ca443ca0421f29720c89ddfc2545a890d9b65b250ac388ae560780692b\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://2eb22831d8fe14a3b10e5eff82f9066ce931240e103460ef18297cdc37578368\",\"dweb:/ipfs/QmSiRsGE26WwtG8cJ3a3FodEPp68trUW3n4cNWbgZGFv3V\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.22+commit.4fc1097e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "COIN",
          "outputs": [
            {
              "internalType": "contract MockERC20",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "USD",
          "outputs": [
            {
              "internalType": "contract MockERC20",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "fee",
          "outputs": [
            {
              "internalType": "uint24",
              "name": "",
              "type": "uint24"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "init"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "inverted",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "nfpm",
          "outputs": [
            {
              "internalType": "contract INonfungiblePositionManager",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "pool",
          "outputs": [
            {
              "internalType": "contract IUniswapV3Pool",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "price",
          "outputs": [
            {
              "internalType": "uint160",
              "name": "sqrtPriceX96",
              "type": "uint160"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "int24",
              "name": "lower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "upper",
              "type": "int24"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "stake"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "coinAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "usdAmount",
              "type": "uint256"
            },
            {
              "internalType": "int24",
              "name": "lower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "upper",
              "type": "int24"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "stake",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint128",
              "name": "liquidity",
              "type": "uint128"
            },
            {
              "internalType": "uint256",
              "name": "amount0",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "int24",
              "name": "width",
              "type": "int24"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "stake"
        },
        {
          "inputs": [
            {
              "internalType": "contract MockERC20",
              "name": "inToken",
              "type": "address"
            },
            {
              "internalType": "contract MockERC20",
              "name": "outToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "swap",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract MockERC20",
              "name": "inToken",
              "type": "address"
            },
            {
              "internalType": "contract MockERC20",
              "name": "outToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "swap",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "swapToPrice"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "swapper",
          "outputs": [
            {
              "internalType": "contract ISwapRouter",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "token0",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "token1",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {},
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        "@uniswap/v3-core/=lib_uniswap/v3-core/",
        "@uniswap/v3-periphery/=lib_uniswap/v3-periphery/",
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/",
        "v3-core/=lib_uniswap/v3-core/",
        "v3-periphery/libraries/=lib_uniswap/v3-periphery/contracts/libraries/"
      ],
      "optimizer": {
        "runs": 999999999,
        "details": {
          "peephole": true,
          "inliner": true,
          "jumpdestRemover": true,
          "orderLiterals": true,
          "deduplicate": true,
          "cse": true,
          "constantOptimizer": true,
          "yul": true,
          "yulDetails": {
            "stackAllocation": true,
            "optimizerSteps": "dhfoD[xarrscLMcCTU]uljmul:fDnTOcmu"
          }
        }
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "test/MockEnv.sol": "MockEnv"
      },
      "libraries": {}
    },
    "sources": {
      "lib/forge-std/src/console2.sol": {
        "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea",
        "urls": [
          "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973",
          "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol": {
        "keccak256": "0x4ffc0547c02ad22925310c585c0f166f8759e2648a09e9b489100c42f15dd98d",
        "urls": [
          "bzz-raw://15f52f51413a9de1ff191e2f6367c62178e1df7806d7880fe857a98b0b66253d",
          "dweb:/ipfs/QmaQG1fwfgUt5E9nu2cccFiV47B2V78MM1tCy1qB7n4MsH"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b",
        "urls": [
          "bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34",
          "dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
        "keccak256": "0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca",
        "urls": [
          "bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd",
          "dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol": {
        "keccak256": "0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68",
        "urls": [
          "bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56",
          "dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol": {
        "keccak256": "0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf",
        "urls": [
          "bzz-raw://26fef835622b46a5ba08b3ef6b46a22e94b5f285d0f0fb66b703bd30217d2c34",
          "dweb:/ipfs/QmZ548qdwfL1qF7aXz3xh1GCdTiST81kGGuKRqVUfYmPZR"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "keccak256": "0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9",
        "urls": [
          "bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146",
          "dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Context.sol": {
        "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7",
        "urls": [
          "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92",
          "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
        "keccak256": "0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1",
        "urls": [
          "bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f",
          "dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"
        ],
        "license": "MIT"
      },
      "lib_uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol": {
        "keccak256": "0xcc3d0c93fc9ac0febbe09f941b465b57f750bcf3b48432da0b97dc289cfdc489",
        "urls": [
          "bzz-raw://b9379ad954680c44a0bc523b314ae4c4da735f9fe1d02aa56ea5bdba6f1136f2",
          "dweb:/ipfs/QmZXdgQNXKAckrXWz9R3mc47F1fvDvr28a2ewJrwNAw71B"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol": {
        "keccak256": "0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1",
        "urls": [
          "bzz-raw://1c42b9e6f5902ac38dd43e25750939baa7e0c1425dc75afd717c4412731065d5",
          "dweb:/ipfs/QmWaoacnzsucTvBME2o7YgZBZMhaHv7fkj83htHMVWJKWh"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol": {
        "keccak256": "0x3f485fb1a44e8fbeadefb5da07d66edab3cfe809f0ac4074b1e54e3eb3c4cf69",
        "urls": [
          "bzz-raw://095ce0626b41318c772b3ebf19d548282607f6a8f3d6c41c13edfbd5370c8652",
          "dweb:/ipfs/QmVDZfJJ89UUCE1hMyzqpkZAtQ8jUsBgZNE5AMRG7RzRFS"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol": {
        "keccak256": "0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634",
        "urls": [
          "bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5",
          "dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol": {
        "keccak256": "0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5",
        "urls": [
          "bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7",
          "dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol": {
        "keccak256": "0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd",
        "urls": [
          "bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03",
          "dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol": {
        "keccak256": "0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7",
        "urls": [
          "bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047",
          "dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol": {
        "keccak256": "0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235",
        "urls": [
          "bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735",
          "dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol": {
        "keccak256": "0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f",
        "urls": [
          "bzz-raw://ed63907c38ff36b0e22bc9ffc53e791ea74f0d4f0e7c257fdfb5aaf8825b1f0f",
          "dweb:/ipfs/QmSQrckghEjs6HVsA5GVgpNpZWvTXMY5eQLF7cN6deFeEg"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-core/contracts/libraries/FixedPoint96.sol": {
        "keccak256": "0x0ba8a9b95a956a4050749c0158e928398c447c91469682ca8a7cc7e77a7fe032",
        "urls": [
          "bzz-raw://186d3b528866065a5856f96d2aeec698efa99f8da913e9adf34f8cc296cc993d",
          "dweb:/ipfs/QmUAiMvtAQp8c9dy57bqJYzG7hkb1uChiPaQmt264skoqP"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-core/contracts/libraries/FullMath.sol": {
        "keccak256": "0x77608bce1ddeb28ed9963b554b55e8a083277eda7be31e2c7255ef532cc408be",
        "urls": [
          "bzz-raw://8fcb307cf783b612ab9abd339296391d202974e7aa158deff23d9fb3aaac832d",
          "dweb:/ipfs/QmXhcwQajcGZADQtVoQpSWYNY4tB3Y42GPPyiaW62M5JH2"
        ],
        "license": "MIT"
      },
      "lib_uniswap/v3-core/contracts/libraries/TickMath.sol": {
        "keccak256": "0x350d6743e4d8ff3b7f3bcc569919b22dd13e46918a7994d29d7cb5c60080ee4d",
        "urls": [
          "bzz-raw://513f138148bd8b28edb0625d27c593b09155a1f71cc3c081659d448d079ca8d3",
          "dweb:/ipfs/QmRhWsD9JhoKLVT9ShUkDC2kYcNneDKXbt3NTHEpDkRZ2G"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-periphery/contracts/interfaces/IERC721Permit.sol": {
        "keccak256": "0x9e3c2a4ee65ddf95b2dfcb0815784eea3a295707e6f8b83e4c4f0f8fe2e3a1d4",
        "urls": [
          "bzz-raw://bfd939085b3618101b955f87c7fabf38338ba1aad480295acb8102ebc5d72471",
          "dweb:/ipfs/QmauQD8bGDHTztmTDfaKXjzM7Wacrq2XU7VcTbwn1WrDBL"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-periphery/contracts/interfaces/INonfungiblePositionManager.sol": {
        "keccak256": "0x3357b065654abb7f4a9ebd184a260bc39efde2afa4e99dca2e72ffc28e9c2984",
        "urls": [
          "bzz-raw://f7682dab014724be8e0a5a401b047788ff9c70b77fa5bd567ea6adc333cb3b56",
          "dweb:/ipfs/QmatH1Gc6z3AkP4dHjAEBKfCBbgBfD4vCceF4TuZU2bCyW"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-periphery/contracts/interfaces/IPeripheryImmutableState.sol": {
        "keccak256": "0x7affcfeb5127c0925a71d6a65345e117c33537523aeca7bc98085ead8452519d",
        "urls": [
          "bzz-raw://e16b291294210e71cb0f20cd0afe62ae2dc6878d627f5ccc19c4dc9cd80aec3f",
          "dweb:/ipfs/QmQGitSyBr26nour81BZmpmDMyJpvZRqHQZvnCD1Acb127"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-periphery/contracts/interfaces/IPeripheryPayments.sol": {
        "keccak256": "0xb547e10f1e69bed03621a62b73a503e260643066c6b4054867a4d1fef47eb274",
        "urls": [
          "bzz-raw://f9a90f58f5fd5fb42f7811f4094113b532f307b14a73764c91f977590747f407",
          "dweb:/ipfs/QmSeNH2mfiDMKf3Q6V2sqtNxx1s72JNuA1VVxRM9HoMqYp"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-periphery/contracts/interfaces/IPoolInitializer.sol": {
        "keccak256": "0x9d7695e8d94c22cc5fcced602017aabb988de89981ea7bee29ea629d5328a862",
        "urls": [
          "bzz-raw://61b50933026ee1017db2a6273af8cedc3238c95dca58880db0918dbdbb2f064f",
          "dweb:/ipfs/QmUebR26pqG25d18aBELKz8aFFKkmHa8PxntzXTA7o9Ldu"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol": {
        "keccak256": "0x9bfaf1feb32814623e627ab70f2409760b15d95f1f9b058e2b3399a8bb732975",
        "urls": [
          "bzz-raw://a8a2c3e55965b61bcd91993d8e1d5d34b8b8a63e0fdfce87a85f6af92526fd53",
          "dweb:/ipfs/QmQj2CSCSwqDSU4KMNWxGsN2336Cy64WgpV1X1EHXNZWxM"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-periphery/contracts/libraries/LiquidityAmounts.sol": {
        "keccak256": "0xf149581d28e1c81736dfe72be73ee1301d4945340cc6282fcdd63fe3c85abf24",
        "urls": [
          "bzz-raw://0b67f375180bb62fe6753601cd09740496dcdcec4c0a4f9eaa6e94c5e1bb6844",
          "dweb:/ipfs/QmWYwkmqynRq7g81Nijg4eEkPgSRGnegDrbbEKkkTC1k2w"
        ],
        "license": "GPL-2.0-or-later"
      },
      "lib_uniswap/v3-periphery/contracts/libraries/PoolAddress.sol": {
        "keccak256": "0x0a107d09991fd2dc9a3ca13bf0745f0b6f6f6ffea3e55ad3677ecdbadef089b4",
        "urls": [
          "bzz-raw://e179110a9ec825b7f15384a9c61f90261fe6227b289dac9996b0ed9cf1655b48",
          "dweb:/ipfs/Qma2amC8zJSW2PzPCk1nBYiFd4mjZiAW9z4kxjoYZPCtRr"
        ],
        "license": "GPL-2.0-or-later"
      },
      "src/Constants.sol": {
        "keccak256": "0x41bf66b69d0d8c9c32c43fd3af5396d1288ac512fd5c6c14e06dbb06a06adf3f",
        "urls": [
          "bzz-raw://283443c74eef1b4ff300c1465a46877957188c3f65ed71aea60bd11362938418",
          "dweb:/ipfs/QmQPn2nrbKVei7HUooGXy7msfoXNT8E2yVkT1kZAC9T3ds"
        ],
        "license": "UNLICENSED"
      },
      "src/MockERC20.sol": {
        "keccak256": "0x0b7b50cebfa9265beaa40b0df4c94f25b6834fc6854addf5bba878eb65164089",
        "urls": [
          "bzz-raw://d67d08b0e0fd1ab66bd98341eb93a4850a9f2200bc5ab53d996508fb7c330db4",
          "dweb:/ipfs/QmbNCZyArZvRYTQeXcXJAFytnjuZse8dthoExDZSTwYpAK"
        ],
        "license": null
      },
      "src/Util.sol": {
        "keccak256": "0xbf0a5fb064064aa53474e43777176662a9f09fdb61b823b87705bd0c6d1909ad",
        "urls": [
          "bzz-raw://6dbdd417018821ed9cc564f5d64e92b5efaf067cdc559e7f1dd7bff2afa07a80",
          "dweb:/ipfs/QmPQTGJbnrV4PSCCXNbBQKZ3enF5r7Wv115ivoHFCjVCJr"
        ],
        "license": "UNLICENSED"
      },
      "test/MockEnv.sol": {
        "keccak256": "0x0f80e0ca443ca0421f29720c89ddfc2545a890d9b65b250ac388ae560780692b",
        "urls": [
          "bzz-raw://2eb22831d8fe14a3b10e5eff82f9066ce931240e103460ef18297cdc37578368",
          "dweb:/ipfs/QmSiRsGE26WwtG8cJ3a3FodEPp68trUW3n4cNWbgZGFv3V"
        ],
        "license": "UNLICENSED"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "test/MockEnv.sol",
    "id": 50070,
    "exportedSymbols": {
      "Constants": [
        46264
      ],
      "Context": [
        43777
      ],
      "ERC20": [
        43478
      ],
      "FixedPoint96": [
        44338
      ],
      "FullMath": [
        44519
      ],
      "IERC165": [
        43789
      ],
      "IERC20": [
        43556
      ],
      "IERC20Metadata": [
        43581
      ],
      "IERC721": [
        43697
      ],
      "IERC721Enumerable": [
        43728
      ],
      "IERC721Metadata": [
        43755
      ],
      "IERC721Permit": [
        45094
      ],
      "INonfungiblePositionManager": [
        45293
      ],
      "IPeripheryImmutableState": [
        45309
      ],
      "IPeripheryPayments": [
        45335
      ],
      "IPoolInitializer": [
        45354
      ],
      "ISwapRouter": [
        45454
      ],
      "IUniswapV3Factory": [
        43872
      ],
      "IUniswapV3Pool": [
        43894
      ],
      "IUniswapV3PoolActions": [
        44004
      ],
      "IUniswapV3PoolDerivedState": [
        44035
      ],
      "IUniswapV3PoolEvents": [
        44154
      ],
      "IUniswapV3PoolImmutables": [
        44194
      ],
      "IUniswapV3PoolOwnerActions": [
        44220
      ],
      "IUniswapV3PoolState": [
        44328
      ],
      "IUniswapV3SwapCallback": [
        43908
      ],
      "LiquidityAmounts": [
        45794
      ],
      "MockERC20": [
        46478
      ],
      "MockEnv": [
        50069
      ],
      "PoolAddress": [
        45892
      ],
      "TickMath": [
        45059
      ],
      "Util": [
        48904
      ],
      "console2": [
        29653
      ]
    },
    "nodeType": "SourceUnit",
    "src": "65:6648:63",
    "nodes": [
      {
        "id": 49447,
        "nodeType": "PragmaDirective",
        "src": "65:24:63",
        "nodes": [],
        "literals": [
          "solidity",
          ">=",
          "0.8",
          ".0"
        ]
      },
      {
        "id": 49448,
        "nodeType": "PragmaDirective",
        "src": "90:19:63",
        "nodes": [],
        "literals": [
          "abicoder",
          "v2"
        ]
      },
      {
        "id": 49449,
        "nodeType": "ImportDirective",
        "src": "111:32:63",
        "nodes": [],
        "absolutePath": "lib/forge-std/src/console2.sol",
        "file": "forge-std/console2.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 50070,
        "sourceUnit": 29654,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 49450,
        "nodeType": "ImportDirective",
        "src": "144:30:63",
        "nodes": [],
        "absolutePath": "src/MockERC20.sol",
        "file": "../src/MockERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 50070,
        "sourceUnit": 46479,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 49451,
        "nodeType": "ImportDirective",
        "src": "175:25:63",
        "nodes": [],
        "absolutePath": "src/Util.sol",
        "file": "../src/Util.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 50070,
        "sourceUnit": 48905,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 49452,
        "nodeType": "ImportDirective",
        "src": "201:30:63",
        "nodes": [],
        "absolutePath": "src/Constants.sol",
        "file": "../src/Constants.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 50070,
        "sourceUnit": 46265,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 49453,
        "nodeType": "ImportDirective",
        "src": "232:66:63",
        "nodes": [],
        "absolutePath": "lib_uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
        "file": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 50070,
        "sourceUnit": 43895,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 49454,
        "nodeType": "ImportDirective",
        "src": "299:59:63",
        "nodes": [],
        "absolutePath": "lib_uniswap/v3-core/contracts/libraries/TickMath.sol",
        "file": "@uniswap/v3-core/contracts/libraries/TickMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 50070,
        "sourceUnit": 45060,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 49455,
        "nodeType": "ImportDirective",
        "src": "359:84:63",
        "nodes": [],
        "absolutePath": "lib_uniswap/v3-periphery/contracts/interfaces/INonfungiblePositionManager.sol",
        "file": "@uniswap/v3-periphery/contracts/interfaces/INonfungiblePositionManager.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 50070,
        "sourceUnit": 45294,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 49456,
        "nodeType": "ImportDirective",
        "src": "444:68:63",
        "nodes": [],
        "absolutePath": "lib_uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol",
        "file": "@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 50070,
        "sourceUnit": 45455,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 49457,
        "nodeType": "ImportDirective",
        "src": "513:72:63",
        "nodes": [],
        "absolutePath": "lib_uniswap/v3-periphery/contracts/libraries/LiquidityAmounts.sol",
        "file": "@uniswap/v3-periphery/contracts/libraries/LiquidityAmounts.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 50070,
        "sourceUnit": 45795,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 50069,
        "nodeType": "ContractDefinition",
        "src": "588:6124:63",
        "nodes": [
          {
            "id": 49462,
            "nodeType": "VariableDeclaration",
            "src": "612:87:63",
            "nodes": [],
            "constant": false,
            "functionSelector": "7303e913",
            "mutability": "mutable",
            "name": "nfpm",
            "nameLocation": "647:4:63",
            "scope": 50069,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_INonfungiblePositionManager_$45293",
              "typeString": "contract INonfungiblePositionManager"
            },
            "typeName": {
              "id": 49459,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 49458,
                "name": "INonfungiblePositionManager",
                "nameLocations": [
                  "612:27:63"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 45293,
                "src": "612:27:63"
              },
              "referencedDeclaration": 45293,
              "src": "612:27:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_INonfungiblePositionManager_$45293",
                "typeString": "contract INonfungiblePositionManager"
              }
            },
            "value": {
              "expression": {
                "id": 49460,
                "name": "Constants",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 46264,
                "src": "654:9:63",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_contract$_Constants_$46264_$",
                  "typeString": "type(library Constants)"
                }
              },
              "id": 49461,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "memberLocation": "664:35:63",
              "memberName": "uniswapV3NonfungiblePositionManager",
              "nodeType": "MemberAccess",
              "referencedDeclaration": 46254,
              "src": "654:45:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_INonfungiblePositionManager_$45293",
                "typeString": "contract INonfungiblePositionManager"
              }
            },
            "visibility": "public"
          },
          {
            "id": 49467,
            "nodeType": "VariableDeclaration",
            "src": "705:58:63",
            "nodes": [],
            "constant": false,
            "functionSelector": "2b3297f9",
            "mutability": "mutable",
            "name": "swapper",
            "nameLocation": "724:7:63",
            "scope": 50069,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ISwapRouter_$45454",
              "typeString": "contract ISwapRouter"
            },
            "typeName": {
              "id": 49464,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 49463,
                "name": "ISwapRouter",
                "nameLocations": [
                  "705:11:63"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 45454,
                "src": "705:11:63"
              },
              "referencedDeclaration": 45454,
              "src": "705:11:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ISwapRouter_$45454",
                "typeString": "contract ISwapRouter"
              }
            },
            "value": {
              "expression": {
                "id": 49465,
                "name": "Constants",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 46264,
                "src": "734:9:63",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_contract$_Constants_$46264_$",
                  "typeString": "type(library Constants)"
                }
              },
              "id": 49466,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "memberLocation": "744:19:63",
              "memberName": "uniswapV3SwapRouter",
              "nodeType": "MemberAccess",
              "referencedDeclaration": 46260,
              "src": "734:29:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ISwapRouter_$45454",
                "typeString": "contract ISwapRouter"
              }
            },
            "visibility": "public"
          },
          {
            "id": 49470,
            "nodeType": "VariableDeclaration",
            "src": "769:26:63",
            "nodes": [],
            "constant": false,
            "functionSelector": "16f0115b",
            "mutability": "mutable",
            "name": "pool",
            "nameLocation": "791:4:63",
            "scope": 50069,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IUniswapV3Pool_$43894",
              "typeString": "contract IUniswapV3Pool"
            },
            "typeName": {
              "id": 49469,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 49468,
                "name": "IUniswapV3Pool",
                "nameLocations": [
                  "769:14:63"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 43894,
                "src": "769:14:63"
              },
              "referencedDeclaration": 43894,
              "src": "769:14:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IUniswapV3Pool_$43894",
                "typeString": "contract IUniswapV3Pool"
              }
            },
            "visibility": "public"
          },
          {
            "id": 49472,
            "nodeType": "VariableDeclaration",
            "src": "801:17:63",
            "nodes": [],
            "constant": false,
            "functionSelector": "ddca3f43",
            "mutability": "mutable",
            "name": "fee",
            "nameLocation": "815:3:63",
            "scope": 50069,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint24",
              "typeString": "uint24"
            },
            "typeName": {
              "id": 49471,
              "name": "uint24",
              "nodeType": "ElementaryTypeName",
              "src": "801:6:63",
              "typeDescriptions": {
                "typeIdentifier": "t_uint24",
                "typeString": "uint24"
              }
            },
            "visibility": "public"
          },
          {
            "id": 49475,
            "nodeType": "VariableDeclaration",
            "src": "824:21:63",
            "nodes": [],
            "constant": false,
            "functionSelector": "a54a72b7",
            "mutability": "mutable",
            "name": "COIN",
            "nameLocation": "841:4:63",
            "scope": 50069,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_MockERC20_$46478",
              "typeString": "contract MockERC20"
            },
            "typeName": {
              "id": 49474,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 49473,
                "name": "MockERC20",
                "nameLocations": [
                  "824:9:63"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 46478,
                "src": "824:9:63"
              },
              "referencedDeclaration": 46478,
              "src": "824:9:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MockERC20_$46478",
                "typeString": "contract MockERC20"
              }
            },
            "visibility": "public"
          },
          {
            "id": 49478,
            "nodeType": "VariableDeclaration",
            "src": "851:20:63",
            "nodes": [],
            "constant": false,
            "functionSelector": "1bf6c21b",
            "mutability": "mutable",
            "name": "USD",
            "nameLocation": "868:3:63",
            "scope": 50069,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_MockERC20_$46478",
              "typeString": "contract MockERC20"
            },
            "typeName": {
              "id": 49477,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 49476,
                "name": "MockERC20",
                "nameLocations": [
                  "851:9:63"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 46478,
                "src": "851:9:63"
              },
              "referencedDeclaration": 46478,
              "src": "851:9:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MockERC20_$46478",
                "typeString": "contract MockERC20"
              }
            },
            "visibility": "public"
          },
          {
            "id": 49480,
            "nodeType": "VariableDeclaration",
            "src": "877:21:63",
            "nodes": [],
            "constant": false,
            "functionSelector": "0dfe1681",
            "mutability": "mutable",
            "name": "token0",
            "nameLocation": "892:6:63",
            "scope": 50069,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 49479,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "877:7:63",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "id": 49482,
            "nodeType": "VariableDeclaration",
            "src": "961:21:63",
            "nodes": [],
            "constant": false,
            "functionSelector": "d21220a7",
            "mutability": "mutable",
            "name": "token1",
            "nameLocation": "976:6:63",
            "scope": 50069,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 49481,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "961:7:63",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "id": 49484,
            "nodeType": "VariableDeclaration",
            "src": "988:20:63",
            "nodes": [],
            "constant": false,
            "functionSelector": "67e368fc",
            "mutability": "mutable",
            "name": "inverted",
            "nameLocation": "1000:8:63",
            "scope": 50069,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 49483,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "988:4:63",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "visibility": "public"
          },
          {
            "id": 49634,
            "nodeType": "FunctionDefinition",
            "src": "1349:1125:63",
            "nodes": [],
            "body": {
              "id": 49633,
              "nodeType": "Block",
              "src": "1372:1102:63",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 49495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 49487,
                      "name": "COIN",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49475,
                      "src": "1382:4:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockERC20_$46478",
                        "typeString": "contract MockERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "4d6f636b20457468657265756d2048617264666f726b",
                          "id": 49491,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1403:24:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_61bca07db2491f9e6530a587e4a3b3d24366afe94d6b7a43f109208d06ad1623",
                            "typeString": "literal_string \"Mock Ethereum Hardfork\""
                          },
                          "value": "Mock Ethereum Hardfork"
                        },
                        {
                          "hexValue": "4d4548",
                          "id": 49492,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1429:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_f6cdb29c65e7a85181f8b7be06d65a4f4c2350d0c1bddc8cde3fbff5a30301b0",
                            "typeString": "literal_string \"MEH\""
                          },
                          "value": "MEH"
                        },
                        {
                          "hexValue": "3138",
                          "id": 49493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1436:2:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_18_by_1",
                            "typeString": "int_const 18"
                          },
                          "value": "18"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_stringliteral_61bca07db2491f9e6530a587e4a3b3d24366afe94d6b7a43f109208d06ad1623",
                            "typeString": "literal_string \"Mock Ethereum Hardfork\""
                          },
                          {
                            "typeIdentifier": "t_stringliteral_f6cdb29c65e7a85181f8b7be06d65a4f4c2350d0c1bddc8cde3fbff5a30301b0",
                            "typeString": "literal_string \"MEH\""
                          },
                          {
                            "typeIdentifier": "t_rational_18_by_1",
                            "typeString": "int_const 18"
                          }
                        ],
                        "id": 49490,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "1389:13:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$returns$_t_contract$_MockERC20_$46478_$",
                          "typeString": "function (string memory,string memory,uint8) returns (contract MockERC20)"
                        },
                        "typeName": {
                          "id": 49489,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 49488,
                            "name": "MockERC20",
                            "nameLocations": [
                              "1393:9:63"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 46478,
                            "src": "1393:9:63"
                          },
                          "referencedDeclaration": 46478,
                          "src": "1393:9:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_MockERC20_$46478",
                            "typeString": "contract MockERC20"
                          }
                        }
                      },
                      "id": 49494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1389:50:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockERC20_$46478",
                        "typeString": "contract MockERC20"
                      }
                    },
                    "src": "1382:57:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MockERC20_$46478",
                      "typeString": "contract MockERC20"
                    }
                  },
                  "id": 49496,
                  "nodeType": "ExpressionStatement",
                  "src": "1382:57:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "4d4548",
                        "id": 49500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1462:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f6cdb29c65e7a85181f8b7be06d65a4f4c2350d0c1bddc8cde3fbff5a30301b0",
                          "typeString": "literal_string \"MEH\""
                        },
                        "value": "MEH"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_f6cdb29c65e7a85181f8b7be06d65a4f4c2350d0c1bddc8cde3fbff5a30301b0",
                          "typeString": "literal_string \"MEH\""
                        }
                      ],
                      "expression": {
                        "id": 49497,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "1449:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 49499,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1458:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22167,
                      "src": "1449:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 49501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1449:19:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49502,
                  "nodeType": "ExpressionStatement",
                  "src": "1449:19:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 49508,
                            "name": "COIN",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49475,
                            "src": "1499:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          ],
                          "id": 49507,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1491:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49506,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1491:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49509,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1491:13:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 49503,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "1478:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 49505,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1487:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22195,
                      "src": "1478:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$__$",
                        "typeString": "function (address) pure"
                      }
                    },
                    "id": 49510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1478:27:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49511,
                  "nodeType": "ExpressionStatement",
                  "src": "1478:27:63"
                },
                {
                  "expression": {
                    "id": 49520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 49512,
                      "name": "USD",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49478,
                      "src": "1515:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockERC20_$46478",
                        "typeString": "contract MockERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "4a6f6b652043757272656e6379205844",
                          "id": 49516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1535:18:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_a9de8145b56d0950b3b524db38ddd94ed49e940bef354525a4fce23b44e03c08",
                            "typeString": "literal_string \"Joke Currency XD\""
                          },
                          "value": "Joke Currency XD"
                        },
                        {
                          "hexValue": "55535844",
                          "id": 49517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1555:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_6eb017ee881f4249a2beb44d6865a54ed1b2d9382b523427c1bb679fc16e4336",
                            "typeString": "literal_string \"USXD\""
                          },
                          "value": "USXD"
                        },
                        {
                          "hexValue": "36",
                          "id": 49518,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1563:1:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_6_by_1",
                            "typeString": "int_const 6"
                          },
                          "value": "6"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_stringliteral_a9de8145b56d0950b3b524db38ddd94ed49e940bef354525a4fce23b44e03c08",
                            "typeString": "literal_string \"Joke Currency XD\""
                          },
                          {
                            "typeIdentifier": "t_stringliteral_6eb017ee881f4249a2beb44d6865a54ed1b2d9382b523427c1bb679fc16e4336",
                            "typeString": "literal_string \"USXD\""
                          },
                          {
                            "typeIdentifier": "t_rational_6_by_1",
                            "typeString": "int_const 6"
                          }
                        ],
                        "id": 49515,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "1521:13:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$returns$_t_contract$_MockERC20_$46478_$",
                          "typeString": "function (string memory,string memory,uint8) returns (contract MockERC20)"
                        },
                        "typeName": {
                          "id": 49514,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 49513,
                            "name": "MockERC20",
                            "nameLocations": [
                              "1525:9:63"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 46478,
                            "src": "1525:9:63"
                          },
                          "referencedDeclaration": 46478,
                          "src": "1525:9:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_MockERC20_$46478",
                            "typeString": "contract MockERC20"
                          }
                        }
                      },
                      "id": 49519,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1521:44:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockERC20_$46478",
                        "typeString": "contract MockERC20"
                      }
                    },
                    "src": "1515:50:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MockERC20_$46478",
                      "typeString": "contract MockERC20"
                    }
                  },
                  "id": 49521,
                  "nodeType": "ExpressionStatement",
                  "src": "1515:50:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "55535844",
                        "id": 49525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1588:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6eb017ee881f4249a2beb44d6865a54ed1b2d9382b523427c1bb679fc16e4336",
                          "typeString": "literal_string \"USXD\""
                        },
                        "value": "USXD"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_6eb017ee881f4249a2beb44d6865a54ed1b2d9382b523427c1bb679fc16e4336",
                          "typeString": "literal_string \"USXD\""
                        }
                      ],
                      "expression": {
                        "id": 49522,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "1575:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 49524,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1584:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22167,
                      "src": "1575:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 49526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1575:20:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49527,
                  "nodeType": "ExpressionStatement",
                  "src": "1575:20:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 49533,
                            "name": "USD",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49478,
                            "src": "1626:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          ],
                          "id": 49532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1618:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49531,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1618:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49534,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1618:12:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 49528,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "1605:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 49530,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1614:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22195,
                      "src": "1605:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$__$",
                        "typeString": "function (address) pure"
                      }
                    },
                    "id": 49535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1605:26:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49536,
                  "nodeType": "ExpressionStatement",
                  "src": "1605:26:63"
                },
                {
                  "expression": {
                    "id": 49539,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 49537,
                      "name": "fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49472,
                      "src": "1641:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint24",
                        "typeString": "uint24"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "353030",
                      "id": 49538,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1647:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_500_by_1",
                        "typeString": "int_const 500"
                      },
                      "value": "500"
                    },
                    "src": "1641:9:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "id": 49540,
                  "nodeType": "ExpressionStatement",
                  "src": "1641:9:63"
                },
                {
                  "expression": {
                    "id": 49551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 49541,
                      "name": "inverted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49484,
                      "src": "1660:8:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 49550,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 49544,
                            "name": "COIN",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49475,
                            "src": "1679:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          ],
                          "id": 49543,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1671:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49542,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1671:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49545,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1671:13:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "arguments": [
                          {
                            "id": 49548,
                            "name": "USD",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49478,
                            "src": "1695:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          ],
                          "id": 49547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1687:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49546,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1687:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1687:12:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "1671:28:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1660:39:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 49552,
                  "nodeType": "ExpressionStatement",
                  "src": "1660:39:63"
                },
                {
                  "expression": {
                    "id": 49564,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 49553,
                      "name": "token0",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49480,
                      "src": "1709:6:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "condition": {
                        "id": 49554,
                        "name": "inverted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49484,
                        "src": "1718:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "arguments": [
                          {
                            "id": 49561,
                            "name": "COIN",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49475,
                            "src": "1752:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          ],
                          "id": 49560,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1744:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49559,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1744:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49562,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1744:13:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 49563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "1718:39:63",
                      "trueExpression": {
                        "arguments": [
                          {
                            "id": 49557,
                            "name": "USD",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49478,
                            "src": "1737:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          ],
                          "id": 49556,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1729:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49555,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1729:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49558,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1729:12:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1709:48:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 49565,
                  "nodeType": "ExpressionStatement",
                  "src": "1709:48:63"
                },
                {
                  "expression": {
                    "id": 49577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 49566,
                      "name": "token1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49482,
                      "src": "1767:6:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "condition": {
                        "id": 49567,
                        "name": "inverted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49484,
                        "src": "1776:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "arguments": [
                          {
                            "id": 49574,
                            "name": "USD",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49478,
                            "src": "1811:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          ],
                          "id": 49573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1803:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49572,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1803:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49575,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1803:12:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 49576,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "1776:39:63",
                      "trueExpression": {
                        "arguments": [
                          {
                            "id": 49570,
                            "name": "COIN",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49475,
                            "src": "1795:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          ],
                          "id": 49569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1787:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49568,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1787:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1787:13:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1767:48:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 49578,
                  "nodeType": "ExpressionStatement",
                  "src": "1767:48:63"
                },
                {
                  "assignments": [
                    49580
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 49580,
                      "mutability": "mutable",
                      "name": "initialPrice",
                      "nameLocation": "1833:12:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 49633,
                      "src": "1825:20:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "typeName": {
                        "id": 49579,
                        "name": "uint160",
                        "nodeType": "ElementaryTypeName",
                        "src": "1825:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 49591,
                  "initialValue": {
                    "condition": {
                      "id": 49581,
                      "name": "inverted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49484,
                      "src": "1848:8:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "arguments": [
                        {
                          "hexValue": "3739323238313632353134323634333337353933353433",
                          "id": 49588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1914:23:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_79228162514264337593543_by_1",
                            "typeString": "int_const 79228162514264337593543"
                          },
                          "value": "79228162514264337593543"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_79228162514264337593543_by_1",
                            "typeString": "int_const 79228162514264337593543"
                          }
                        ],
                        "id": 49587,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1906:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint160_$",
                          "typeString": "type(uint160)"
                        },
                        "typeName": {
                          "id": 49586,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1906:7:63",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 49589,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1906:32:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "id": 49590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "1848:90:63",
                    "trueExpression": {
                      "arguments": [
                        {
                          "hexValue": "3739323238313632353134323634333337353933353433393530333336303030303030",
                          "id": 49584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1867:35:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_79228162514264337593543950336000000_by_1",
                            "typeString": "int_const 7922...(27 digits omitted)...0000"
                          },
                          "value": "79228162514264337593543950336000000"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_79228162514264337593543950336000000_by_1",
                            "typeString": "int_const 7922...(27 digits omitted)...0000"
                          }
                        ],
                        "id": 49583,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1859:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint160_$",
                          "typeString": "type(uint160)"
                        },
                        "typeName": {
                          "id": 49582,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1859:7:63",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 49585,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1859:44:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1825:113:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "6966207468697320697320746865206c617374206c696e65206265666f7265206120726576657274207468656e206d616b65207375726520746f2072756e20666f7267652077697468202d2d7270632d75726c",
                        "id": 49595,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1970:85:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0cc9589f025949272eee97584d99d697e1f21c72bb04afb39d18d0c40805bc23",
                          "typeString": "literal_string \"if this is the last line before a revert then make sure to run forge with --rpc-url\""
                        },
                        "value": "if this is the last line before a revert then make sure to run forge with --rpc-url"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_0cc9589f025949272eee97584d99d697e1f21c72bb04afb39d18d0c40805bc23",
                          "typeString": "literal_string \"if this is the last line before a revert then make sure to run forge with --rpc-url\""
                        }
                      ],
                      "expression": {
                        "id": 49592,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "1957:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 49594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1966:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22167,
                      "src": "1957:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 49596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1957:99:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49597,
                  "nodeType": "ExpressionStatement",
                  "src": "1957:99:63"
                },
                {
                  "expression": {
                    "id": 49608,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 49598,
                      "name": "pool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49470,
                      "src": "2166:4:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IUniswapV3Pool_$43894",
                        "typeString": "contract IUniswapV3Pool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 49602,
                              "name": "token0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 49480,
                              "src": "2228:6:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 49603,
                              "name": "token1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 49482,
                              "src": "2236:6:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 49604,
                              "name": "fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 49472,
                              "src": "2244:3:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            },
                            {
                              "id": 49605,
                              "name": "initialPrice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 49580,
                              "src": "2249:12:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            ],
                            "expression": {
                              "id": 49600,
                              "name": "nfpm",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 49462,
                              "src": "2188:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_INonfungiblePositionManager_$45293",
                                "typeString": "contract INonfungiblePositionManager"
                              }
                            },
                            "id": 49601,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2193:34:63",
                            "memberName": "createAndInitializePoolIfNecessary",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 45353,
                            "src": "2188:39:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$_t_address_$_t_address_$_t_uint24_$_t_uint160_$returns$_t_address_$",
                              "typeString": "function (address,address,uint24,uint160) payable external returns (address)"
                            }
                          },
                          "id": 49606,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2188:74:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 49599,
                        "name": "IUniswapV3Pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43894,
                        "src": "2173:14:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$43894_$",
                          "typeString": "type(contract IUniswapV3Pool)"
                        }
                      },
                      "id": 49607,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2173:90:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IUniswapV3Pool_$43894",
                        "typeString": "contract IUniswapV3Pool"
                      }
                    },
                    "src": "2166:97:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUniswapV3Pool_$43894",
                      "typeString": "contract IUniswapV3Pool"
                    }
                  },
                  "id": 49609,
                  "nodeType": "ExpressionStatement",
                  "src": "2166:97:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "763320706f6f6c",
                        "id": 49613,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2286:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b5f3ea675d56207132fbaf36b6d49a13e93d56308e585769e46d4a5e8b76e036",
                          "typeString": "literal_string \"v3 pool\""
                        },
                        "value": "v3 pool"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_b5f3ea675d56207132fbaf36b6d49a13e93d56308e585769e46d4a5e8b76e036",
                          "typeString": "literal_string \"v3 pool\""
                        }
                      ],
                      "expression": {
                        "id": 49610,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "2273:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 49612,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2282:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22167,
                      "src": "2273:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 49614,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2273:23:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49615,
                  "nodeType": "ExpressionStatement",
                  "src": "2273:23:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 49621,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49470,
                            "src": "2327:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUniswapV3Pool_$43894",
                              "typeString": "contract IUniswapV3Pool"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IUniswapV3Pool_$43894",
                              "typeString": "contract IUniswapV3Pool"
                            }
                          ],
                          "id": 49620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2319:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49619,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2319:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49622,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2319:13:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 49616,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "2306:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 49618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2315:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22195,
                      "src": "2306:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$__$",
                        "typeString": "function (address) pure"
                      }
                    },
                    "id": 49623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2306:27:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49624,
                  "nodeType": "ExpressionStatement",
                  "src": "2306:27:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "31305f3030305f303030",
                        "id": 49626,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2418:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_10000000_by_1",
                          "typeString": "int_const 10000000"
                        },
                        "value": "10_000_000"
                      },
                      {
                        "expression": {
                          "id": 49627,
                          "name": "TickMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45059,
                          "src": "2430:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TickMath_$45059_$",
                            "typeString": "type(library TickMath)"
                          }
                        },
                        "id": 49628,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "2439:8:63",
                        "memberName": "MIN_TICK",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 44527,
                        "src": "2430:17:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      {
                        "expression": {
                          "id": 49629,
                          "name": "TickMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45059,
                          "src": "2449:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TickMath_$45059_$",
                            "typeString": "type(library TickMath)"
                          }
                        },
                        "id": 49630,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "2458:8:63",
                        "memberName": "MAX_TICK",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 44532,
                        "src": "2449:17:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_10000000_by_1",
                          "typeString": "int_const 10000000"
                        },
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      ],
                      "id": 49625,
                      "name": "stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        49664,
                        49701,
                        49728
                      ],
                      "referencedDeclaration": 49701,
                      "src": "2412:5:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_int24_$_t_int24_$returns$__$",
                        "typeString": "function (uint256,int24,int24)"
                      }
                    },
                    "id": 49631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2412:55:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49632,
                  "nodeType": "ExpressionStatement",
                  "src": "2412:55:63"
                }
              ]
            },
            "functionSelector": "e1c7392a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "init",
            "nameLocation": "1358:4:63",
            "parameters": {
              "id": 49485,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1362:2:63"
            },
            "returnParameters": {
              "id": 49486,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1372:0:63"
            },
            "scope": 50069,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 49664,
            "nodeType": "FunctionDefinition",
            "src": "2481:179:63",
            "nodes": [],
            "body": {
              "id": 49663,
              "nodeType": "Block",
              "src": "2532:128:63",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "id": 49644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 49642,
                          "name": "width",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49638,
                          "src": "2550:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 49643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2556:1:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2550:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 49641,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2542:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 49645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2542:16:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49646,
                  "nodeType": "ExpressionStatement",
                  "src": "2542:16:63"
                },
                {
                  "assignments": [
                    null,
                    49648,
                    null,
                    null,
                    null,
                    null,
                    null
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 49648,
                      "mutability": "mutable",
                      "name": "tick",
                      "nameLocation": "2577:4:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 49663,
                      "src": "2571:10:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      },
                      "typeName": {
                        "id": 49647,
                        "name": "int24",
                        "nodeType": "ElementaryTypeName",
                        "src": "2571:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      "visibility": "internal"
                    },
                    null,
                    null,
                    null,
                    null,
                    null
                  ],
                  "id": 49652,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 49649,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49470,
                        "src": "2594:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUniswapV3Pool_$43894",
                          "typeString": "contract IUniswapV3Pool"
                        }
                      },
                      "id": 49650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2599:5:63",
                      "memberName": "slot0",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 44241,
                      "src": "2594:10:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                        "typeString": "function () view external returns (uint160,int24,uint16,uint16,uint16,uint8,bool)"
                      }
                    },
                    "id": 49651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2594:12:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                      "typeString": "tuple(uint160,int24,uint16,uint16,uint16,uint8,bool)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2568:38:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 49654,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49636,
                        "src": "2622:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "id": 49657,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 49655,
                          "name": "tick",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49648,
                          "src": "2630:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "id": 49656,
                          "name": "width",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49638,
                          "src": "2635:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "src": "2630:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "id": 49660,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 49658,
                          "name": "tick",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49648,
                          "src": "2642:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "id": 49659,
                          "name": "width",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49638,
                          "src": "2647:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "src": "2642:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      ],
                      "id": 49653,
                      "name": "stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        49664,
                        49701,
                        49728
                      ],
                      "referencedDeclaration": 49701,
                      "src": "2616:5:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_int24_$_t_int24_$returns$__$",
                        "typeString": "function (uint256,int24,int24)"
                      }
                    },
                    "id": 49661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2616:37:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49662,
                  "nodeType": "ExpressionStatement",
                  "src": "2616:37:63"
                }
              ]
            },
            "functionSelector": "e3baf41a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stake",
            "nameLocation": "2490:5:63",
            "parameters": {
              "id": 49639,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49636,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "2504:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49664,
                  "src": "2496:14:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49635,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2496:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49638,
                  "mutability": "mutable",
                  "name": "width",
                  "nameLocation": "2518:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49664,
                  "src": "2512:11:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 49637,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2512:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2495:29:63"
            },
            "returnParameters": {
              "id": 49640,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2532:0:63"
            },
            "scope": 50069,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 49701,
            "nodeType": "FunctionDefinition",
            "src": "2667:221:63",
            "nodes": [],
            "body": {
              "id": 49700,
              "nodeType": "Block",
              "src": "2731:157:63",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    49674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 49674,
                      "mutability": "mutable",
                      "name": "coinAmount",
                      "nameLocation": "2749:10:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 49700,
                      "src": "2741:18:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49673,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2741:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 49682,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 49681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 49679,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 49675,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49666,
                        "src": "2762:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                          "typeString": "int_const 1000000000000000000"
                        },
                        "id": 49678,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "hexValue": "3130",
                          "id": 49676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2771:2:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10_by_1",
                            "typeString": "int_const 10"
                          },
                          "value": "10"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "hexValue": "3138",
                          "id": 49677,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2775:2:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_18_by_1",
                            "typeString": "int_const 18"
                          },
                          "value": "18"
                        },
                        "src": "2771:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1000000000000000000_by_1",
                          "typeString": "int_const 1000000000000000000"
                        }
                      },
                      "src": "2762:15:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "32",
                      "id": 49680,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2780:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "2762:19:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2741:40:63"
                },
                {
                  "assignments": [
                    49684
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 49684,
                      "mutability": "mutable",
                      "name": "usdAmount",
                      "nameLocation": "2799:9:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 49700,
                      "src": "2791:17:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49683,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2791:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 49692,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 49691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 49689,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 49685,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49666,
                        "src": "2811:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_rational_1000000_by_1",
                          "typeString": "int_const 1000000"
                        },
                        "id": 49688,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "hexValue": "3130",
                          "id": 49686,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2820:2:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10_by_1",
                            "typeString": "int_const 10"
                          },
                          "value": "10"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "hexValue": "36",
                          "id": 49687,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2824:1:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_6_by_1",
                            "typeString": "int_const 6"
                          },
                          "value": "6"
                        },
                        "src": "2820:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1000000_by_1",
                          "typeString": "int_const 1000000"
                        }
                      },
                      "src": "2811:14:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "32",
                      "id": 49690,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2828:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "2811:18:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2791:38:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 49694,
                        "name": "coinAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49674,
                        "src": "2845:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49695,
                        "name": "usdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49684,
                        "src": "2857:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49696,
                        "name": "lower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49668,
                        "src": "2868:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      {
                        "id": 49697,
                        "name": "upper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49670,
                        "src": "2875:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      ],
                      "id": 49693,
                      "name": "stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        49664,
                        49701,
                        49728
                      ],
                      "referencedDeclaration": 49728,
                      "src": "2839:5:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_int24_$_t_int24_$returns$_t_uint256_$_t_uint128_$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256,uint256,int24,int24) returns (uint256,uint128,uint256,uint256)"
                      }
                    },
                    "id": 49698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2839:42:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint128_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint128,uint256,uint256)"
                    }
                  },
                  "id": 49699,
                  "nodeType": "ExpressionStatement",
                  "src": "2839:42:63"
                }
              ]
            },
            "functionSelector": "53486e2f",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stake",
            "nameLocation": "2676:5:63",
            "parameters": {
              "id": 49671,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49666,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "2690:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49701,
                  "src": "2682:14:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49665,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2682:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49668,
                  "mutability": "mutable",
                  "name": "lower",
                  "nameLocation": "2704:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49701,
                  "src": "2698:11:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 49667,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2698:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49670,
                  "mutability": "mutable",
                  "name": "upper",
                  "nameLocation": "2717:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49701,
                  "src": "2711:11:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 49669,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2711:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2681:42:63"
            },
            "returnParameters": {
              "id": 49672,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2731:0:63"
            },
            "scope": 50069,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 49728,
            "nodeType": "FunctionDefinition",
            "src": "2895:279:63",
            "nodes": [],
            "body": {
              "id": 49727,
              "nodeType": "Block",
              "src": "3107:67:63",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 49721,
                        "name": "coinAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49703,
                        "src": "3131:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49722,
                        "name": "usdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49705,
                        "src": "3143:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49723,
                        "name": "lower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49707,
                        "src": "3154:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      {
                        "id": 49724,
                        "name": "upper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49709,
                        "src": "3161:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      ],
                      "id": 49720,
                      "name": "_stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49873,
                      "src": "3124:6:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_int24_$_t_int24_$returns$_t_uint256_$_t_uint128_$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256,uint256,int24,int24) returns (uint256,uint128,uint256,uint256)"
                      }
                    },
                    "id": 49725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3124:43:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint128_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint128,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 49719,
                  "id": 49726,
                  "nodeType": "Return",
                  "src": "3117:50:63"
                }
              ]
            },
            "functionSelector": "d6f13002",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stake",
            "nameLocation": "2904:5:63",
            "parameters": {
              "id": 49710,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49703,
                  "mutability": "mutable",
                  "name": "coinAmount",
                  "nameLocation": "2918:10:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49728,
                  "src": "2910:18:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49702,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2910:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49705,
                  "mutability": "mutable",
                  "name": "usdAmount",
                  "nameLocation": "2938:9:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49728,
                  "src": "2930:17:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49704,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2930:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49707,
                  "mutability": "mutable",
                  "name": "lower",
                  "nameLocation": "2955:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49728,
                  "src": "2949:11:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 49706,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2949:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49709,
                  "mutability": "mutable",
                  "name": "upper",
                  "nameLocation": "2968:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49728,
                  "src": "2962:11:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 49708,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2962:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2909:65:63"
            },
            "returnParameters": {
              "id": 49719,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49712,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "3012:7:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49728,
                  "src": "3004:15:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49711,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3004:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49714,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nameLocation": "3037:9:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49728,
                  "src": "3029:17:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 49713,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "3029:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49716,
                  "mutability": "mutable",
                  "name": "amount0",
                  "nameLocation": "3064:7:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49728,
                  "src": "3056:15:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49715,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3056:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49718,
                  "mutability": "mutable",
                  "name": "amount1",
                  "nameLocation": "3089:7:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49728,
                  "src": "3081:15:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49717,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3081:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2994:108:63"
            },
            "scope": 50069,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 49873,
            "nodeType": "FunctionDefinition",
            "src": "3180:1597:63",
            "nodes": [],
            "body": {
              "id": 49872,
              "nodeType": "Block",
              "src": "3394:1383:63",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 49752,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "3534:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockEnv_$50069",
                              "typeString": "contract MockEnv"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockEnv_$50069",
                              "typeString": "contract MockEnv"
                            }
                          ],
                          "id": 49751,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3526:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49750,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3526:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49753,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3526:13:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 49754,
                        "name": "coinAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49730,
                        "src": "3541:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 49747,
                        "name": "COIN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49475,
                        "src": "3516:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        }
                      },
                      "id": 49749,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3521:4:63",
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46477,
                      "src": "3516:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 49755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3516:36:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49756,
                  "nodeType": "ExpressionStatement",
                  "src": "3516:36:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 49762,
                            "name": "nfpm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49462,
                            "src": "3583:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_INonfungiblePositionManager_$45293",
                              "typeString": "contract INonfungiblePositionManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_INonfungiblePositionManager_$45293",
                              "typeString": "contract INonfungiblePositionManager"
                            }
                          ],
                          "id": 49761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3575:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49760,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3575:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49763,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3575:13:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 49764,
                        "name": "coinAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49730,
                        "src": "3590:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 49757,
                        "name": "COIN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49475,
                        "src": "3562:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        }
                      },
                      "id": 49759,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3567:7:63",
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 43058,
                      "src": "3562:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 49765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3562:39:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 49766,
                  "nodeType": "ExpressionStatement",
                  "src": "3562:39:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 49772,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "3667:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockEnv_$50069",
                              "typeString": "contract MockEnv"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockEnv_$50069",
                              "typeString": "contract MockEnv"
                            }
                          ],
                          "id": 49771,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3659:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49770,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3659:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49773,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3659:13:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 49774,
                        "name": "usdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49732,
                        "src": "3674:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 49767,
                        "name": "USD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49478,
                        "src": "3650:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        }
                      },
                      "id": 49769,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3654:4:63",
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46477,
                      "src": "3650:8:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 49775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3650:34:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49776,
                  "nodeType": "ExpressionStatement",
                  "src": "3650:34:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 49782,
                            "name": "nfpm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49462,
                            "src": "3714:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_INonfungiblePositionManager_$45293",
                              "typeString": "contract INonfungiblePositionManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_INonfungiblePositionManager_$45293",
                              "typeString": "contract INonfungiblePositionManager"
                            }
                          ],
                          "id": 49781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3706:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49780,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3706:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49783,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3706:13:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 49784,
                        "name": "usdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49732,
                        "src": "3721:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 49777,
                        "name": "USD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49478,
                        "src": "3694:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        }
                      },
                      "id": 49779,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3698:7:63",
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 43058,
                      "src": "3694:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 49785,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3694:37:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 49786,
                  "nodeType": "ExpressionStatement",
                  "src": "3694:37:63"
                },
                {
                  "assignments": [
                    49788
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 49788,
                      "mutability": "mutable",
                      "name": "ts",
                      "nameLocation": "4235:2:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 49872,
                      "src": "4229:8:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      },
                      "typeName": {
                        "id": 49787,
                        "name": "int24",
                        "nodeType": "ElementaryTypeName",
                        "src": "4229:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 49792,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 49789,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49470,
                        "src": "4240:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUniswapV3Pool_$43894",
                          "typeString": "contract IUniswapV3Pool"
                        }
                      },
                      "id": 49790,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4245:11:63",
                      "memberName": "tickSpacing",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 44187,
                      "src": "4240:16:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_int24_$",
                        "typeString": "function () view external returns (int24)"
                      }
                    },
                    "id": 49791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4240:18:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4229:29:63"
                },
                {
                  "expression": {
                    "id": 49799,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 49793,
                      "name": "lower",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49734,
                      "src": "4268:5:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 49796,
                          "name": "lower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49734,
                          "src": "4291:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        {
                          "id": 49797,
                          "name": "ts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49788,
                          "src": "4298:2:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          },
                          {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        ],
                        "expression": {
                          "id": 49794,
                          "name": "Util",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 48904,
                          "src": "4276:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Util_$48904_$",
                            "typeString": "type(library Util)"
                          }
                        },
                        "id": 49795,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4281:9:63",
                        "memberName": "roundTick",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 48903,
                        "src": "4276:14:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_pure$_t_int24_$_t_int24_$returns$_t_int24_$",
                          "typeString": "function (int24,int24) pure returns (int24)"
                        }
                      },
                      "id": 49798,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4276:25:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      }
                    },
                    "src": "4268:33:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "id": 49800,
                  "nodeType": "ExpressionStatement",
                  "src": "4268:33:63"
                },
                {
                  "expression": {
                    "id": 49807,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 49801,
                      "name": "upper",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49736,
                      "src": "4311:5:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 49804,
                          "name": "upper",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49736,
                          "src": "4334:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        {
                          "id": 49805,
                          "name": "ts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49788,
                          "src": "4341:2:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          },
                          {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        ],
                        "expression": {
                          "id": 49802,
                          "name": "Util",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 48904,
                          "src": "4319:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Util_$48904_$",
                            "typeString": "type(library Util)"
                          }
                        },
                        "id": 49803,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4324:9:63",
                        "memberName": "roundTick",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 48903,
                        "src": "4319:14:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_pure$_t_int24_$_t_int24_$returns$_t_int24_$",
                          "typeString": "function (int24,int24) pure returns (int24)"
                        }
                      },
                      "id": 49806,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4319:25:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      }
                    },
                    "src": "4311:33:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "id": 49808,
                  "nodeType": "ExpressionStatement",
                  "src": "4311:33:63"
                },
                {
                  "assignments": [
                    49813
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 49813,
                      "mutability": "mutable",
                      "name": "params",
                      "nameLocation": "4400:6:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 49872,
                      "src": "4354:52:63",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MintParams_$45203_memory_ptr",
                        "typeString": "struct INonfungiblePositionManager.MintParams"
                      },
                      "typeName": {
                        "id": 49812,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 49811,
                          "name": "INonfungiblePositionManager.MintParams",
                          "nameLocations": [
                            "4354:27:63",
                            "4382:10:63"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 45203,
                          "src": "4354:38:63"
                        },
                        "referencedDeclaration": 45203,
                        "src": "4354:38:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintParams_$45203_storage_ptr",
                          "typeString": "struct INonfungiblePositionManager.MintParams"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 49836,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 49818,
                            "name": "COIN",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49475,
                            "src": "4469:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          ],
                          "id": 49817,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4461:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49816,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4461:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49819,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4461:13:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 49822,
                            "name": "USD",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49478,
                            "src": "4484:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          ],
                          "id": 49821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4476:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49820,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4476:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49823,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4476:12:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 49824,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49472,
                        "src": "4490:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      {
                        "id": 49825,
                        "name": "lower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49734,
                        "src": "4495:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      {
                        "id": 49826,
                        "name": "upper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49736,
                        "src": "4502:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      {
                        "id": 49827,
                        "name": "coinAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49730,
                        "src": "4509:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49828,
                        "name": "usdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49732,
                        "src": "4521:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 49829,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4532:1:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "hexValue": "30",
                        "id": 49830,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4535:1:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "expression": {
                          "id": 49831,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4538:3:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 49832,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4542:6:63",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4538:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 49833,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "4550:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 49834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4556:9:63",
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "4550:15:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 49814,
                        "name": "INonfungiblePositionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45293,
                        "src": "4409:27:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_INonfungiblePositionManager_$45293_$",
                          "typeString": "type(contract INonfungiblePositionManager)"
                        }
                      },
                      "id": 49815,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4437:10:63",
                      "memberName": "MintParams",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45203,
                      "src": "4409:38:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_MintParams_$45203_storage_ptr_$",
                        "typeString": "type(struct INonfungiblePositionManager.MintParams storage pointer)"
                      }
                    },
                    "id": 49835,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4409:166:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MintParams_$45203_memory_ptr",
                      "typeString": "struct INonfungiblePositionManager.MintParams memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4354:221:63"
                },
                {
                  "expression": {
                    "id": 49846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 49837,
                          "name": "tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49739,
                          "src": "4586:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 49838,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49741,
                          "src": "4595:9:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "id": 49839,
                          "name": "amount0",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49743,
                          "src": "4606:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 49840,
                          "name": "amount1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49745,
                          "src": "4615:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 49841,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "4585:38:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint128_$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint128,uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 49844,
                          "name": "params",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49813,
                          "src": "4636:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintParams_$45203_memory_ptr",
                            "typeString": "struct INonfungiblePositionManager.MintParams memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_MintParams_$45203_memory_ptr",
                            "typeString": "struct INonfungiblePositionManager.MintParams memory"
                          }
                        ],
                        "expression": {
                          "id": 49842,
                          "name": "nfpm",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49462,
                          "src": "4626:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_INonfungiblePositionManager_$45293",
                            "typeString": "contract INonfungiblePositionManager"
                          }
                        },
                        "id": 49843,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4631:4:63",
                        "memberName": "mint",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 45218,
                        "src": "4626:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$_t_struct$_MintParams_$45203_memory_ptr_$returns$_t_uint256_$_t_uint128_$_t_uint256_$_t_uint256_$",
                          "typeString": "function (struct INonfungiblePositionManager.MintParams memory) payable external returns (uint256,uint128,uint256,uint256)"
                        }
                      },
                      "id": 49845,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4626:17:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint128_$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint128,uint256,uint256)"
                      }
                    },
                    "src": "4585:58:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49847,
                  "nodeType": "ExpressionStatement",
                  "src": "4585:58:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "6d696e746564",
                        "id": 49851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4666:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e1d7849c0f6c42b67ef46bfe871686aeac2aa524ff4c77793f2afbd412acbd54",
                          "typeString": "literal_string \"minted\""
                        },
                        "value": "minted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_e1d7849c0f6c42b67ef46bfe871686aeac2aa524ff4c77793f2afbd412acbd54",
                          "typeString": "literal_string \"minted\""
                        }
                      ],
                      "expression": {
                        "id": 49848,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "4653:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 49850,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4662:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22167,
                      "src": "4653:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 49852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4653:22:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49853,
                  "nodeType": "ExpressionStatement",
                  "src": "4653:22:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 49857,
                        "name": "liquidity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49741,
                        "src": "4698:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "id": 49854,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "4685:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 49856,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4694:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22139,
                      "src": "4685:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) pure"
                      }
                    },
                    "id": 49858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4685:23:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49859,
                  "nodeType": "ExpressionStatement",
                  "src": "4685:23:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 49863,
                        "name": "amount0",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49743,
                        "src": "4731:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 49860,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "4718:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 49862,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4727:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22139,
                      "src": "4718:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) pure"
                      }
                    },
                    "id": 49864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4718:21:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49865,
                  "nodeType": "ExpressionStatement",
                  "src": "4718:21:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 49869,
                        "name": "amount1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49745,
                        "src": "4762:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 49866,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "4749:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 49868,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4758:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22139,
                      "src": "4749:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) pure"
                      }
                    },
                    "id": 49870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4749:21:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49871,
                  "nodeType": "ExpressionStatement",
                  "src": "4749:21:63"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_stake",
            "nameLocation": "3189:6:63",
            "parameters": {
              "id": 49737,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49730,
                  "mutability": "mutable",
                  "name": "coinAmount",
                  "nameLocation": "3204:10:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49873,
                  "src": "3196:18:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49729,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3196:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49732,
                  "mutability": "mutable",
                  "name": "usdAmount",
                  "nameLocation": "3224:9:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49873,
                  "src": "3216:17:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49731,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3216:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49734,
                  "mutability": "mutable",
                  "name": "lower",
                  "nameLocation": "3241:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49873,
                  "src": "3235:11:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 49733,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "3235:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49736,
                  "mutability": "mutable",
                  "name": "upper",
                  "nameLocation": "3254:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49873,
                  "src": "3248:11:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 49735,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "3248:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3195:65:63"
            },
            "returnParameters": {
              "id": 49746,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49739,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "3299:7:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49873,
                  "src": "3291:15:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49738,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3291:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49741,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nameLocation": "3324:9:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49873,
                  "src": "3316:17:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 49740,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "3316:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49743,
                  "mutability": "mutable",
                  "name": "amount0",
                  "nameLocation": "3351:7:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49873,
                  "src": "3343:15:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49742,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3343:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49745,
                  "mutability": "mutable",
                  "name": "amount1",
                  "nameLocation": "3376:7:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49873,
                  "src": "3368:15:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49744,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3368:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3281:108:63"
            },
            "scope": 50069,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 49914,
            "nodeType": "FunctionDefinition",
            "src": "4784:289:63",
            "nodes": [],
            "body": {
              "id": 49913,
              "nodeType": "Block",
              "src": "4890:183:63",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    49887
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 49887,
                      "mutability": "mutable",
                      "name": "limit",
                      "nameLocation": "4908:5:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 49913,
                      "src": "4900:13:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "typeName": {
                        "id": 49886,
                        "name": "uint160",
                        "nodeType": "ElementaryTypeName",
                        "src": "4900:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 49905,
                  "initialValue": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 49895,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 49890,
                            "name": "inToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49876,
                            "src": "4924:7:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          ],
                          "id": 49889,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4916:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49888,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4916:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49891,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4916:16:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 49892,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49470,
                            "src": "4936:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUniswapV3Pool_$43894",
                              "typeString": "contract IUniswapV3Pool"
                            }
                          },
                          "id": 49893,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "4941:6:63",
                          "memberName": "token0",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 44169,
                          "src": "4936:11:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 49894,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4936:13:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "4916:33:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "id": 49903,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 49900,
                          "name": "TickMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45059,
                          "src": "4982:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TickMath_$45059_$",
                            "typeString": "type(library TickMath)"
                          }
                        },
                        "id": 49901,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "4991:14:63",
                        "memberName": "MAX_SQRT_RATIO",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 44540,
                        "src": "4982:23:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 49902,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5008:1:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "4982:27:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "id": 49904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "4916:93:63",
                    "trueExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "id": 49899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 49896,
                          "name": "TickMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45059,
                          "src": "4952:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TickMath_$45059_$",
                            "typeString": "type(library TickMath)"
                          }
                        },
                        "id": 49897,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "4961:14:63",
                        "memberName": "MIN_SQRT_RATIO",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 44536,
                        "src": "4952:23:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 49898,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4978:1:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "4952:27:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4900:109:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 49907,
                        "name": "inToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49876,
                        "src": "5031:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        }
                      },
                      {
                        "id": 49908,
                        "name": "outToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49879,
                        "src": "5040:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        }
                      },
                      {
                        "id": 49909,
                        "name": "amountIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49881,
                        "src": "5050:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49910,
                        "name": "limit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49887,
                        "src": "5060:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        },
                        {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "id": 49906,
                      "name": "swap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        49914,
                        49970
                      ],
                      "referencedDeclaration": 49970,
                      "src": "5026:4:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_MockERC20_$46478_$_t_contract$_MockERC20_$46478_$_t_uint256_$_t_uint160_$returns$_t_uint256_$",
                        "typeString": "function (contract MockERC20,contract MockERC20,uint256,uint160) returns (uint256)"
                      }
                    },
                    "id": 49911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5026:40:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 49885,
                  "id": 49912,
                  "nodeType": "Return",
                  "src": "5019:47:63"
                }
              ]
            },
            "functionSelector": "df791e50",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "swap",
            "nameLocation": "4793:4:63",
            "parameters": {
              "id": 49882,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49876,
                  "mutability": "mutable",
                  "name": "inToken",
                  "nameLocation": "4808:7:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49914,
                  "src": "4798:17:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MockERC20_$46478",
                    "typeString": "contract MockERC20"
                  },
                  "typeName": {
                    "id": 49875,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49874,
                      "name": "MockERC20",
                      "nameLocations": [
                        "4798:9:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46478,
                      "src": "4798:9:63"
                    },
                    "referencedDeclaration": 46478,
                    "src": "4798:9:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MockERC20_$46478",
                      "typeString": "contract MockERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49879,
                  "mutability": "mutable",
                  "name": "outToken",
                  "nameLocation": "4827:8:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49914,
                  "src": "4817:18:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MockERC20_$46478",
                    "typeString": "contract MockERC20"
                  },
                  "typeName": {
                    "id": 49878,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49877,
                      "name": "MockERC20",
                      "nameLocations": [
                        "4817:9:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46478,
                      "src": "4817:9:63"
                    },
                    "referencedDeclaration": 46478,
                    "src": "4817:9:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MockERC20_$46478",
                      "typeString": "contract MockERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49881,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nameLocation": "4845:8:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49914,
                  "src": "4837:16:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49880,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4837:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4797:57:63"
            },
            "returnParameters": {
              "id": 49885,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49884,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nameLocation": "4879:9:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49914,
                  "src": "4871:17:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49883,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4871:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4870:19:63"
            },
            "scope": 50069,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 49970,
            "nodeType": "FunctionDefinition",
            "src": "5079:824:63",
            "nodes": [],
            "body": {
              "id": 49969,
              "nodeType": "Block",
              "src": "5212:691:63",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 49934,
                            "name": "swapper",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49467,
                            "src": "5246:7:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ISwapRouter_$45454",
                              "typeString": "contract ISwapRouter"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ISwapRouter_$45454",
                              "typeString": "contract ISwapRouter"
                            }
                          ],
                          "id": 49933,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5238:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49932,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5238:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49935,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5238:16:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 49936,
                        "name": "amountIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49922,
                        "src": "5256:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 49929,
                        "name": "inToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49917,
                        "src": "5222:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        }
                      },
                      "id": 49931,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5230:7:63",
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 43058,
                      "src": "5222:15:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 49937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5222:43:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 49938,
                  "nodeType": "ExpressionStatement",
                  "src": "5222:43:63"
                },
                {
                  "assignments": [
                    49943
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 49943,
                      "mutability": "mutable",
                      "name": "params",
                      "nameLocation": "5679:6:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 49969,
                      "src": "5637:48:63",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ExactInputSingleParams_$45378_memory_ptr",
                        "typeString": "struct ISwapRouter.ExactInputSingleParams"
                      },
                      "typeName": {
                        "id": 49942,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 49941,
                          "name": "ISwapRouter.ExactInputSingleParams",
                          "nameLocations": [
                            "5637:11:63",
                            "5649:22:63"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 45378,
                          "src": "5637:34:63"
                        },
                        "referencedDeclaration": 45378,
                        "src": "5637:34:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExactInputSingleParams_$45378_storage_ptr",
                          "typeString": "struct ISwapRouter.ExactInputSingleParams"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 49963,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 49948,
                            "name": "inToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49917,
                            "src": "5744:7:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          ],
                          "id": 49947,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5736:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49946,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5736:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49949,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5736:16:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 49952,
                            "name": "outToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49920,
                            "src": "5762:8:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockERC20_$46478",
                              "typeString": "contract MockERC20"
                            }
                          ],
                          "id": 49951,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5754:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 49950,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5754:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 49953,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5754:17:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 49954,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49472,
                        "src": "5773:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      {
                        "expression": {
                          "id": 49955,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "5778:3:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 49956,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5782:6:63",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "5778:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 49957,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "5790:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 49958,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5796:9:63",
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "src": "5790:15:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49959,
                        "name": "amountIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49922,
                        "src": "5807:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 49960,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5817:1:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "id": 49961,
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49924,
                        "src": "5820:17:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "expression": {
                        "id": 49944,
                        "name": "ISwapRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45454,
                        "src": "5688:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ISwapRouter_$45454_$",
                          "typeString": "type(contract ISwapRouter)"
                        }
                      },
                      "id": 49945,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5700:22:63",
                      "memberName": "ExactInputSingleParams",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45378,
                      "src": "5688:34:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_ExactInputSingleParams_$45378_storage_ptr_$",
                        "typeString": "type(struct ISwapRouter.ExactInputSingleParams storage pointer)"
                      }
                    },
                    "id": 49962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5688:159:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ExactInputSingleParams_$45378_memory_ptr",
                      "typeString": "struct ISwapRouter.ExactInputSingleParams memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5637:210:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 49966,
                        "name": "params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49943,
                        "src": "5889:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExactInputSingleParams_$45378_memory_ptr",
                          "typeString": "struct ISwapRouter.ExactInputSingleParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_ExactInputSingleParams_$45378_memory_ptr",
                          "typeString": "struct ISwapRouter.ExactInputSingleParams memory"
                        }
                      ],
                      "expression": {
                        "id": 49964,
                        "name": "swapper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49467,
                        "src": "5864:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISwapRouter_$45454",
                          "typeString": "contract ISwapRouter"
                        }
                      },
                      "id": 49965,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5872:16:63",
                      "memberName": "exactInputSingle",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45387,
                      "src": "5864:24:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$_t_struct$_ExactInputSingleParams_$45378_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct ISwapRouter.ExactInputSingleParams memory) payable external returns (uint256)"
                      }
                    },
                    "id": 49967,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5864:32:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 49928,
                  "id": 49968,
                  "nodeType": "Return",
                  "src": "5857:39:63"
                }
              ]
            },
            "functionSelector": "4a09d3dd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "swap",
            "nameLocation": "5088:4:63",
            "parameters": {
              "id": 49925,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49917,
                  "mutability": "mutable",
                  "name": "inToken",
                  "nameLocation": "5103:7:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49970,
                  "src": "5093:17:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MockERC20_$46478",
                    "typeString": "contract MockERC20"
                  },
                  "typeName": {
                    "id": 49916,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49915,
                      "name": "MockERC20",
                      "nameLocations": [
                        "5093:9:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46478,
                      "src": "5093:9:63"
                    },
                    "referencedDeclaration": 46478,
                    "src": "5093:9:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MockERC20_$46478",
                      "typeString": "contract MockERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49920,
                  "mutability": "mutable",
                  "name": "outToken",
                  "nameLocation": "5122:8:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49970,
                  "src": "5112:18:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MockERC20_$46478",
                    "typeString": "contract MockERC20"
                  },
                  "typeName": {
                    "id": 49919,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49918,
                      "name": "MockERC20",
                      "nameLocations": [
                        "5112:9:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46478,
                      "src": "5112:9:63"
                    },
                    "referencedDeclaration": 46478,
                    "src": "5112:9:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MockERC20_$46478",
                      "typeString": "contract MockERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49922,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nameLocation": "5140:8:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49970,
                  "src": "5132:16:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49921,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5132:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49924,
                  "mutability": "mutable",
                  "name": "sqrtPriceLimitX96",
                  "nameLocation": "5158:17:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49970,
                  "src": "5150:25:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 49923,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "5150:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5092:84:63"
            },
            "returnParameters": {
              "id": 49928,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49927,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nameLocation": "5201:9:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49970,
                  "src": "5193:17:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49926,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5193:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5192:19:63"
            },
            "scope": 50069,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 49983,
            "nodeType": "FunctionDefinition",
            "src": "5909:112:63",
            "nodes": [],
            "body": {
              "id": 49982,
              "nodeType": "Block",
              "src": "5969:52:63",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 49980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 49975,
                          "name": "sqrtPriceX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49973,
                          "src": "5980:12:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        null,
                        null,
                        null,
                        null,
                        null,
                        null
                      ],
                      "id": 49976,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "5979:20:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint160_$__$__$__$__$__$__$",
                        "typeString": "tuple(uint160,,,,,,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 49977,
                          "name": "pool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49470,
                          "src": "6002:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IUniswapV3Pool_$43894",
                            "typeString": "contract IUniswapV3Pool"
                          }
                        },
                        "id": 49978,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "6007:5:63",
                        "memberName": "slot0",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 44241,
                        "src": "6002:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                          "typeString": "function () view external returns (uint160,int24,uint16,uint16,uint16,uint8,bool)"
                        }
                      },
                      "id": 49979,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6002:12:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                        "typeString": "tuple(uint160,int24,uint16,uint16,uint16,uint8,bool)"
                      }
                    },
                    "src": "5979:35:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49981,
                  "nodeType": "ExpressionStatement",
                  "src": "5979:35:63"
                }
              ]
            },
            "functionSelector": "a035b1fe",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "price",
            "nameLocation": "5918:5:63",
            "parameters": {
              "id": 49971,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5923:2:63"
            },
            "returnParameters": {
              "id": 49974,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49973,
                  "mutability": "mutable",
                  "name": "sqrtPriceX96",
                  "nameLocation": "5955:12:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 49983,
                  "src": "5947:20:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 49972,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "5947:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5946:22:63"
            },
            "scope": 50069,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 50068,
            "nodeType": "FunctionDefinition",
            "src": "6027:683:63",
            "nodes": [],
            "body": {
              "id": 50067,
              "nodeType": "Block",
              "src": "6082:628:63",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "73776170546f5072696365",
                        "id": 49991,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6105:13:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_adbad3dc16aedbb9cff2c880c2038e8ed862949065440cbb51dbb708f2ddce21",
                          "typeString": "literal_string \"swapToPrice\""
                        },
                        "value": "swapToPrice"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_adbad3dc16aedbb9cff2c880c2038e8ed862949065440cbb51dbb708f2ddce21",
                          "typeString": "literal_string \"swapToPrice\""
                        }
                      ],
                      "expression": {
                        "id": 49988,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "6092:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 49990,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6101:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22167,
                      "src": "6092:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 49992,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6092:27:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49993,
                  "nodeType": "ExpressionStatement",
                  "src": "6092:27:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 49997,
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49985,
                        "src": "6142:17:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "expression": {
                        "id": 49994,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "6129:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 49996,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6138:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22139,
                      "src": "6129:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) pure"
                      }
                    },
                    "id": 49998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6129:31:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 49999,
                  "nodeType": "ExpressionStatement",
                  "src": "6129:31:63"
                },
                {
                  "assignments": [
                    50001
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50001,
                      "mutability": "mutable",
                      "name": "curPrice",
                      "nameLocation": "6178:8:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 50067,
                      "src": "6170:16:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "typeName": {
                        "id": 50000,
                        "name": "uint160",
                        "nodeType": "ElementaryTypeName",
                        "src": "6170:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50004,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 50002,
                      "name": "price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49983,
                      "src": "6189:5:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint160_$",
                        "typeString": "function () view returns (uint160)"
                      }
                    },
                    "id": 50003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6189:7:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6170:26:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50008,
                        "name": "curPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50001,
                        "src": "6219:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "expression": {
                        "id": 50005,
                        "name": "console2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29653,
                        "src": "6206:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_console2_$29653_$",
                          "typeString": "type(library console2)"
                        }
                      },
                      "id": 50007,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6215:3:63",
                      "memberName": "log",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22139,
                      "src": "6206:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) pure"
                      }
                    },
                    "id": 50009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6206:22:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50010,
                  "nodeType": "ExpressionStatement",
                  "src": "6206:22:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    },
                    "id": 50013,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 50011,
                      "name": "curPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50001,
                      "src": "6242:8:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 50012,
                      "name": "sqrtPriceLimitX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49985,
                      "src": "6254:17:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "src": "6242:29:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50015,
                  "nodeType": "IfStatement",
                  "src": "6238:55:63",
                  "trueBody": {
                    "functionReturnParameters": 49987,
                    "id": 50014,
                    "nodeType": "Return",
                    "src": "6286:7:63"
                  }
                },
                {
                  "assignments": [
                    50018
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50018,
                      "mutability": "mutable",
                      "name": "inToken",
                      "nameLocation": "6312:7:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 50067,
                      "src": "6302:17:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockERC20_$46478",
                        "typeString": "contract MockERC20"
                      },
                      "typeName": {
                        "id": 50017,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50016,
                          "name": "MockERC20",
                          "nameLocations": [
                            "6302:9:63"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46478,
                          "src": "6302:9:63"
                        },
                        "referencedDeclaration": 46478,
                        "src": "6302:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50029,
                  "initialValue": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "id": 50021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 50019,
                        "name": "curPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50001,
                        "src": "6322:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "id": 50020,
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49985,
                        "src": "6333:17:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "src": "6322:28:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "arguments": [
                        {
                          "id": 50026,
                          "name": "token1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49482,
                          "src": "6383:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 50025,
                        "name": "MockERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46478,
                        "src": "6373:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MockERC20_$46478_$",
                          "typeString": "type(contract MockERC20)"
                        }
                      },
                      "id": 50027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6373:17:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockERC20_$46478",
                        "typeString": "contract MockERC20"
                      }
                    },
                    "id": 50028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6322:68:63",
                    "trueExpression": {
                      "arguments": [
                        {
                          "id": 50023,
                          "name": "token0",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49480,
                          "src": "6363:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 50022,
                        "name": "MockERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46478,
                        "src": "6353:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MockERC20_$46478_$",
                          "typeString": "type(contract MockERC20)"
                        }
                      },
                      "id": 50024,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6353:17:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockERC20_$46478",
                        "typeString": "contract MockERC20"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MockERC20_$46478",
                      "typeString": "contract MockERC20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6302:88:63"
                },
                {
                  "assignments": [
                    50032
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50032,
                      "mutability": "mutable",
                      "name": "outToken",
                      "nameLocation": "6410:8:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 50067,
                      "src": "6400:18:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockERC20_$46478",
                        "typeString": "contract MockERC20"
                      },
                      "typeName": {
                        "id": 50031,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50030,
                          "name": "MockERC20",
                          "nameLocations": [
                            "6400:9:63"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46478,
                          "src": "6400:9:63"
                        },
                        "referencedDeclaration": 46478,
                        "src": "6400:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50043,
                  "initialValue": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      },
                      "id": 50035,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 50033,
                        "name": "curPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50001,
                        "src": "6421:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "id": 50034,
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49985,
                        "src": "6432:17:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "src": "6421:28:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "arguments": [
                        {
                          "id": 50040,
                          "name": "token1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49482,
                          "src": "6482:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 50039,
                        "name": "MockERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46478,
                        "src": "6472:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MockERC20_$46478_$",
                          "typeString": "type(contract MockERC20)"
                        }
                      },
                      "id": 50041,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6472:17:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockERC20_$46478",
                        "typeString": "contract MockERC20"
                      }
                    },
                    "id": 50042,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6421:68:63",
                    "trueExpression": {
                      "arguments": [
                        {
                          "id": 50037,
                          "name": "token0",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49480,
                          "src": "6462:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 50036,
                        "name": "MockERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46478,
                        "src": "6452:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MockERC20_$46478_$",
                          "typeString": "type(contract MockERC20)"
                        }
                      },
                      "id": 50038,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6452:17:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockERC20_$46478",
                        "typeString": "contract MockERC20"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MockERC20_$46478",
                      "typeString": "contract MockERC20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6400:89:63"
                },
                {
                  "assignments": [
                    50045
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50045,
                      "mutability": "mutable",
                      "name": "aLot",
                      "nameLocation": "6589:4:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 50067,
                      "src": "6581:12:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50044,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6581:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50049,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_rational_1267650600228229401496703205376_by_1",
                      "typeString": "int_const 1267650600228229401496703205376"
                    },
                    "id": 50048,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "32",
                      "id": 50046,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6596:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "hexValue": "313030",
                      "id": 50047,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6599:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_100_by_1",
                        "typeString": "int_const 100"
                      },
                      "value": "100"
                    },
                    "src": "6596:6:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1267650600228229401496703205376_by_1",
                      "typeString": "int_const 1267650600228229401496703205376"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6581:21:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 50055,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "6633:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockEnv_$50069",
                              "typeString": "contract MockEnv"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockEnv_$50069",
                              "typeString": "contract MockEnv"
                            }
                          ],
                          "id": 50054,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6625:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 50053,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6625:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 50056,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6625:13:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 50057,
                        "name": "aLot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50045,
                        "src": "6640:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 50050,
                        "name": "inToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50018,
                        "src": "6612:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        }
                      },
                      "id": 50052,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6620:4:63",
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46477,
                      "src": "6612:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 50058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6612:33:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50059,
                  "nodeType": "ExpressionStatement",
                  "src": "6612:33:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50061,
                        "name": "inToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50018,
                        "src": "6660:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        }
                      },
                      {
                        "id": 50062,
                        "name": "outToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50032,
                        "src": "6669:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        }
                      },
                      {
                        "id": 50063,
                        "name": "aLot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50045,
                        "src": "6679:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50064,
                        "name": "sqrtPriceLimitX96",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49985,
                        "src": "6685:17:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        },
                        {
                          "typeIdentifier": "t_contract$_MockERC20_$46478",
                          "typeString": "contract MockERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "id": 50060,
                      "name": "swap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        49914,
                        49970
                      ],
                      "referencedDeclaration": 49970,
                      "src": "6655:4:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_MockERC20_$46478_$_t_contract$_MockERC20_$46478_$_t_uint256_$_t_uint160_$returns$_t_uint256_$",
                        "typeString": "function (contract MockERC20,contract MockERC20,uint256,uint160) returns (uint256)"
                      }
                    },
                    "id": 50065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6655:48:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 50066,
                  "nodeType": "ExpressionStatement",
                  "src": "6655:48:63"
                }
              ]
            },
            "functionSelector": "c578d91d",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "swapToPrice",
            "nameLocation": "6036:11:63",
            "parameters": {
              "id": 49986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49985,
                  "mutability": "mutable",
                  "name": "sqrtPriceLimitX96",
                  "nameLocation": "6056:17:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 50068,
                  "src": "6048:25:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 49984,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "6048:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6047:27:63"
            },
            "returnParameters": {
              "id": 49987,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6082:0:63"
            },
            "scope": 50069,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "MockEnv",
        "contractDependencies": [
          46478
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "internalFunctionIDs": {
          "21582": 1
        },
        "linearizedBaseContracts": [
          50069
        ],
        "name": "MockEnv",
        "nameLocation": "597:7:63",
        "scope": 50070,
        "usedErrors": [],
        "usedEvents": []
      }
    ],
    "license": "UNLICENSED"
  },
  "id": 63
}